2016-09-11 1 views
1

배치 스크립트에 powershell 스크립트를 가져 오는 데 문제가 있습니다. 지금은 powershell -Command "& { }"을 사용하고 있습니다. 나는 파워 쉘 코드의 모든 라인을 ;으로 구분하고 있습니다. 하지만 내 if 문을 가져 오기 위해 해야할지 모르겠다..bat 스크립트에 powershell 코드 가져 오기

If ($a -eq $false) 
{ 
    "FALSE" 
    exit 
} 
Else 
{ 
    If ($b -eq $false) 
    { 
     "FALSE" 
     exit 
    } 
} 
+0

당신은 PowerShell 스크립트로 저장하고'에는 powershell.exe - 파일 C로 호출 할 수 있습니다 : \ myscript.ps1',하지만 당신은 단어'import'을 사용 고려, 내가 ' 당신이 하나의 파일을 원한다고 추측합니다 (그렇다면 답을보십시오). –

+0

@FrodeF 답장을 보내 주셔서 감사합니다. 예, 저는 싱글 BAT 파일을 원합니다. 그리고 당신의 대답은 매우 유용했습니다. 마지막으로, 필자는'powershell -command'를 사용하고';'를 사용하여 제 if 문을 분리했습니다. 그러나 어떻게 든 코드를 여러 줄로 표시하여 코드를 읽기 쉽게 만드는 방법이 있는지 궁금합니다. – DiVeRsi0n

+0

이중으로 불편을 드려 죄송 합니다만, "encode"방법과는 다른 방법으로 말씀 드리고자합니다. – DiVeRsi0n

답변

5

사용 ; 모든 문/LINEBREAK 후 (하지 곱슬 중괄호) : 이것은 내가 가져올 무엇의 예입니다. 또한 if/else를 단순화 할 수 있습니다.

PowerShell.exe -Command "& { $a = $false; if ($a -eq $false -or $b -eq $false) {'FALSE'; exit } }" 

를 Base64로 인코딩과 같은 -EncodedCommand를 사용하거나 : 당신이 배치 파일에서 사용하는 것과 Base64로 인코딩 된 문자열을 포함

$command = @' 
$a = $false 

If ($a -eq $false) 
{ 
    "FALSE" 
    exit 
} 
Else 
{ 
    If ($b -eq $false) 
    { 
     "FALSE" 
     exit 
    } 
} 
'@ 

$bytes = [System.Text.Encoding]::Unicode.GetBytes($command) 
$encodedCommand = [Convert]::ToBase64String($bytes) 

$encodedCommand.

데모 :

powershell.exe -encodedCommand "JABhACAAPQAgACQAZgBhAGwAcwBlAA0ACgANAAoASQBmACAAKAAkAGEAIAAtAGUAcQAgACQAZgBhAGwAcwBlACkADQAKAHsADQAKACAAIAAgACAAIgBGAEEATABTAEUAIgANAAoAIAAgACAAIABlAHgAaQB0AA0ACgB9AA0ACgBFAGwAcwBlAA0ACgB7AA0ACgAgACAAIAAgAEkAZgAgACgAJABiACAALQBlAHEAIAAkAGYAYQBsAHMAZQApAA0ACgAgACAAIAAgAHsADQAKACAAIAAgACAAIAAgACAAIAAiAEYAQQBMAFMARQAiAA0ACgAgACAAIAAgACAAIAAgACAAZQB4AGkAdAANAAoAIAAgACAAIAB9AA0ACgB9AA==" 
관련 문제