programing

파워셸 ps1 파일은 "cmdlet, 함수, 작동 가능한 프로그램 또는 스크립트 파일로 인식되지 않습니다."

topblog 2023. 10. 5. 21:05
반응형

파워셸 ps1 파일은 "cmdlet, 함수, 작동 가능한 프로그램 또는 스크립트 파일로 인식되지 않습니다."

방금 파워셸 기능을 만들어서 ps1 파일에 저장했습니다.그러나 파워셸 내에서 실행하려고 하면 실행되지 않습니다.

다음 명령을 입력하여 서명되지 않은 코드를 실행하기 위한 설정으로 이미 변경했습니다.

set-executionpolicy remotesigned

기능은 다음과 같습니다.

Function listAllPaths([string]$fromFolder, [string]$filter, [string]$printfile){
Get-ChildItem -Path $fromFolder -Include $filter -Recurse -Force -Name > $printfile
}

특정 파일에 대한 모든 경로가 나열된 텍스트 파일을 만드는 것입니다.
을 함수:\하게 AllPaths다와지었습니다.

파워셸 안에 다음 명령을 입력하면 다음과 같습니다.

PS> listAllPaths.ps1 c:\ *.pdf testingPDF.txt

다음과 같은 오류가 발생합니다.

'listAllPaths.ps1'이라는 용어는 cmdlet, 함수, 작동 가능한 프로그램 또는 스크립트 파일로 인식되지 않습니다.항을 확인하고 다시 시도합니다.

몇 가지 시도를 해봤는데 솔직히 어떻게 해야 할지 모르겠어요?내가 예상하는 것은 이 예제에서 주어진 경로인 c:\에 파일이 생성되는 것입니다.testingPDF.txt라는 이름을 가진 파일과 생성된 내용은 이것입니다.

제가 여기서 무엇을 잊어버리는지 누가 말해줄 수 있나요?

그리고 아니요, 구글이 모든 것에 대답하지는 않습니다.그거 이미 해봤어요.아직 온라인 검색 엔진을 사용해보지 않았다면 여기에 와서 묻지 않았을 겁니다.

이는 환경 경로에 현재 디렉터리가 포함되어 있지 않은 많은 플랫폼에서 발생하는 일반적인 오류입니다. 따라서 스크립트(또는 명령어 또는 프로그램 등)를 실행하면 런타임 환경은 현재/작업 디렉터리를 제외한 모든 곳을 찾습니다.

해라

PS> .\listAllPaths.ps1 c:\ *.pdf testingPDF.txt

편집: 여러분의 의견을 읽은 후에, 저는 여러분에게 이것을 시도해 볼 것을 제안할 것입니다.저는 당신의 PS 스크립트의 논리를 실제로 확인하지 못했습니다.당신의 대본을 먼저 실행시키려고 했을 뿐입니다.

아래와 같이 스크립트를 편집하고 위와 같이 실행합니다.

Function listAllPaths([string]$fromFolder, [string]$filter, [string]$printfile){
Get-ChildItem -Path $fromFolder -Include $filter -Recurse -Force -Name > $printfile
}

listAllPaths

제가 여기서 틀릴 수도 있지만, 스크립트가 함수를 실행하는 것이 아니라 함수를 정의하는 것입니까?스크립트를 "소스화"해야 할 수도 있습니다.

. .\listallpaths.ps1

... 이제 "listallpaths" 함수가 정의됩니다.

"function listall paths"를 param으로 대체하고 이와 같이 주변 {}을(를) 제거하는 경우..

param([string]$fromFolder, [string]$filter, [string]$printfile)
Get-ChildItem -Path $fromFolder -Include $filter -Recurse -Force -Name > $printfile

필요에 따라 호출할 수 있는 스크립트 파일이 있습니다.

PS> .\listAllPaths.ps1 c:\ *.pdf testingPDF.txt

매트가 암시했듯이 함수를 선언하면 스크립트를 호출하면 함수가 생성되고 종료됩니다.PowerShell 스크립트는 기본적으로 파일에 저장되는 기능입니다(주변 브레이스 없이).즉, 함수 자체가 메모리에 저장됩니다.

다른 이유는 상대 경로별로 몇 개의 스크립트를 연속적으로 실행하고 있고 그 중 하나가cd아니면Set-Location당신이 생각하는 곳에서 당신을 이동시키기 위해서입니다.

예:

홈 폴더인 $HOME에서 시작합니다.C:\Users\YOU

여기에는 다음과 같은 스크립트가 있습니다.

  • script_a.ps1
cd C:\
mkdir myfolder
  • script_b.ps1
mkdir myfolder2

그리고 당신은 그들을 연속적으로 운영하려고 노력합니다.

. '.\script_a.ps1'
. '.\script_b.ps1'

".\script_b.ps1"이라는 오류가 표시됩니다. C:\!에 script_b가 없으므로 cmdlet의 이름으로 인식되지 않습니다.

언급URL : https://stackoverflow.com/questions/762927/powershell-ps1-file-is-not-recognized-as-a-cmdlet-function-operable-program

반응형