>

스크립트 foo.ps1 가 있습니다  배치 파일 foo.cmd  파일 탐색기에서 cmd 파일을 두 번 클릭하여 스크립트를 시작하는 데 사용됩니다.

이 스크립트는 스위치 매개 변수를 허용하지만 이러한 종류의 매개 변수를 제공하는 방법을 모르겠습니다. 간단한 매개 변수는 괜찮습니다.

Foo.ps1 :

param(
    [Parameter()]
    [Switch]$MySwitch,
    [Parameter()]
    [string]$Name
)
Write-Host "`$MySwitch : $MySwitch, `$Name : $name"

Foo.cmd :

Powershell -noprofile -NonInteractive -file "%~dp0\foo.ps1" -Name "abc"   

"이름"만으로 스크립트를 호출하면 작동합니다. 그러나 MySwitch를 지정하면 작동이 중지됩니다.

Foo2.cmd :

Powershell -noprofile -NonInteractive -File "%~dp0\foo.ps1" -Name "abc" -MySwitch:$false

오류 :

C:\temp\foo.ps1 : Impossible de traiter la transformation d'argument sur le paramètre «MySwitch». Impossible de convertir la valeur «System.String» en type « System.Management.Automation.SwitchParameter». Les paramètres booléens acceptent seulement des valeurs booléennes et des nombres, tels que $True, $False, 1 ou 0.
    + CategoryInfo          : InvalidData : (:) [foo.ps1], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : ParameterArgumentTransformationError,foo.ps1


  • 답변 # 1

    Windows PowerShell에서는 CLI가 -File 일 때 부울을 전달할 방법이 없습니다.  매개 변수가 사용됩니다-PowerShellCore[1]에서 수정되었습니다.

    JosefZ가 권장하는해결 방법을 사용하십시오.

    -Command 의 사용  (와이즈 와이즈) -c 대신)  PowerShell에서 인수를 리터럴 인수가 아닌PowerShell 소스 코드로 처리합니다.이 경우 -File  올바르게 인식됩니다 (간단하게하기 위해 다른 CLI 매개 변수 생략).

    $false
    
    

    powershell -c "& \"%~dp0\foo.ps1\" -Name 'abc' -MySwitch:$false" 를 사용해야한다는 점에 유의하십시오  경로가 인용되어 있기 때문에 스크립트 파일을 호출합니다. 또한 PowerShell에는 & 가 포함될 것으로 예상됩니다.  문자. " 로 이스케이프 될 명령 행  ( \" 가 아님)  또는 `" 내부PowerShell)의 작동 방식

    <시간>

    PowerShell Core는 "" 에서 다음 값을 부울로 지원합니다.  사용됩니다 : -File $true $false true  (또한 false 하지만 그 해석은 다릅니다 : 스크립트 ( $null 포함) ) 및 함수는 -File 로 해석합니다. cmdlet은이를 $false 로 해석하지만 (!)).
    $true 와 함께  -따라서 모든 PowerShell 코드에서- -Command  그리고 true  작동하지 않지만작동하지만 false  그리고 0  
    불행히도, 지원되지 않는 값을 전달하면 모든 시나리오에서 동일한 오류 메시지가 표시됩니다.  시나리오는 1 를 잘못 제안합니다  그리고 -File  작동합니다.

    0

관련 자료

  • 이전 android - SQL 쿼리에서 모든 'favorites = 1'을 어떻게 배치하고 특정 열을 기준으로 반환을 정렬합니까?
  • 다음 하이퍼 v 우분투에서 안드로이드 스튜디오 에뮬레이터를 실행할 수 있습니까?