PowerShell 명령 줄을 여러 줄로 나눌 수 있습니까?
Visual Basic에서는 밑줄 ( _
)을 사용 하여 다음 줄에서 명령을 계속할 수 있습니다 .
sh
명령을 사용 하여 스크립트를 제출해야하는 경우 bash 규칙이 유지되므로 백 슬래시를 사용할 수 있습니다. 이 경우 스크립트에는 유닉스 스타일의 엔딩이 있어야합니다.
PowerShell 명령 줄을 여러 줄로 나눌 수 있습니까?
Visual Basic에서는 밑줄 ( _
)을 사용 하여 다음 줄에서 명령을 계속할 수 있습니다 .
sh
명령을 사용 하여 스크립트를 제출해야하는 경우 bash 규칙이 유지되므로 백 슬래시를 사용할 수 있습니다. 이 경우 스크립트에는 유닉스 스타일의 엔딩이 있어야합니다.
답변:
공백 다음에 억음 악센트 (백틱)를 사용할 수 있습니다.
Get-ChildItem -Recurse `
-Filter *.jpg `
| Select LastWriteTime
그러나 이것은 위와 같은 경우에만 필요합니다. 일반적으로 해당 지점에서 명령을 구문 적으로 완료 할 수없는 경우 자동 줄 연속을 얻습니다. 여기에는 새로운 파이프 라인 요소 시작이 포함됩니다.
Get-ChildItem |
Select Name,Length
|
다른 파이프 라인 요소가 없어서 명령을 완료 할 수 없으므로 문제없이 작동 합니다. 중괄호 또는 다른 종류의 괄호를 열면 줄 연속을 직접 사용할 수 있습니다.
$x=1..5
$x[
0,3
] | % {
"Number: $_"
}
|
쉼표 와 유사하게 일부 상황에서도 작동합니다.
1,
2
JavaScript의 Automatic Semicolon Insertion 과 유사하지만 줄 바꿈 이 앞에 오는 유효한 문장 이 있기 때문에 비슷한 부분이 있습니다 .
return
5
작동 안 할 것이다.
마지막으로 문자열 (모든 종류)은 한 줄 이상으로 확장 될 수도 있습니다.
'Foo
bar'
그런 다음 문자열 내에 줄 바꿈을 포함시킵니다.
|
와 같은 역할을한다는 것을 잊지 마십시오 {
.
난 그냥가 안된다는 것을 발견 어떤 후면 틱과 줄 바꿈 사이의 문자. 공백조차도 명령이 작동하지 않습니다.
대부분의 C와 같은 언어에서는 코드를 가장 쉽게 읽을 수 있다고 생각되는 곳에 중괄호를 배치하는 것에 대해 신중히 생각합니다.
PowerShell 구문 분석기는 명령문이 명확하게 완료되지 않은 시점을 인식하고 다음 줄을 찾습니다. 예를 들어 선택적 스크립트 블록 매개 변수를 사용하는 cmdlet을 상상해보십시오.
Get-Foo {............}
스크립트 블록이 매우 길면 다음과 같이 작성하십시오.
Get-Foo { ............... ............... ............... }
그러나 이것은 작동하지 않습니다. 파서는 두 가지 진술을 보게 될 것입니다. 첫 번째는 Get-Foo
두 번째는 스크립트 블록입니다. 대신에 나는 다음과 같이 쓴다.
Get-Foo { ............... ............... ............... }
줄 연속 문자 (`)를 사용할 수는 있지만 코드를 읽기 어렵고 버그가 발생합니다.
이 경우 열린 괄호가 이전 줄에 있어야하므로 모든 곳에서 해당 패턴을 따릅니다.
if (조건) { ..... }
주 것을
if
파서가 스크립트 블록에 대한 다음 줄에 보이는 것, 그래서 문은, 언어의 문법에 스크립트 블록을 필요로하지만 일관성을 위해, 나는 같은 줄에 열린 중괄호를 유지한다.
마찬가지로 긴 파이프 라인의 경우 파이프 문자 ( |
) 다음에 나옵니다 .
$ project.Items | ? {$ _. Key -eq "ProjectFile"} | % {$ _. Value} | % {$ _. EvaluatedInclude} | % { ......... }
if
과 foreach
및 try
작업 후? 그들은 다음 줄에 스크립트 블록을 허용합니다 ... 이것은 음소거가 가능하다는 것을 의미합니다
cristobalito의 답변 을 확장하려면 :
나는 당신이 명령 줄에 대해 이야기하고 있다고 가정합니다-그것이 스크립트에 있다면, 줄 바꿈은 명령 구분 기호로 작용합니다.
명령 행에서 세미콜론 ';'을 사용하십시오.
예를 들면 다음과 같습니다.
명령 행에서 PowerShell 스크립트에 서명하십시오. 줄 바꿈이 없습니다.
powershell -Command "&{$cert=Get-ChildItem –Path cert:\CurrentUser\my -codeSigningCert ; Set-AuthenticodeSignature -filepath Z:\test.ps1 -Cert $cert}
PowerShell 및 PowerShell ISE에서는 각 줄 끝에 Shift+ 를 사용 Enter하여 여러 줄을 편집 할 수 있습니다 (표준 백틱 대신 `
).
SHIFT-ENTER
입니다. 트릭을 모르면 편집하기가 끔찍합니다 .
PSReadLine
모듈 또는 이와 동등한 기능을 사용할 때만 콘솔 버전의 PowerShell 에서이 경우가 있다고 생각합니다 . 표준 Windows 콘솔 입력 기능에서 Enter
와 Shift+Enter
기능적으로 동일합니다.
PSReadline
모듈은 콘솔 호스트 에서만 작동 합니다 (ISE가 아님). 2) Shift+Enter
콘솔 호스트에서 작동 에만 사용하는 경우 PSReadline
. 3) Shift+Enter
항상 ISE에서 일했습니다. 4)없이 콘솔 호스트를 사용하는 경우 PSReadline
, Shift+Enter
가압 기능적으로 동일하다 Enter
.
;
을 사용하여 명령을 분리 하십시오.\\
에서 이중 백 슬래시 를 교체하십시오 \
."'
" 'PATH'"와 같은 명령을 전환하기 위해 안전한 주소를 전달하는 데 사용하십시오 .이 ps1 명령은 로케일 pfx 인증서를 설치합니다.
powershell -Command "$pfxPassword = ConvertTo-SecureString -String "12345678" -Force -AsPlainText ; Import-PfxCertificate -FilePath "'C:\\Program Files\\VpnManagement\\resources\\assets\\cert\\localhost.pfx'" Cert:\\LocalMachine\\My -Password $pfxPassword ; Import-PfxCertificate -FilePath "'C:\\Program Files\\VpnManagement\\resources\\assets\\cert\\localhost.pfx'" Cert:\\LocalMachine\\Root -Password $pfxPassword"
파이프, 괄호, 괄호, 연산자, 점, 쉼표를 사용하여 powershell에서 줄을 계속 유지할 수있는 방법이 너무 많습니다. 여기에 블로그가 있습니다 : https://get-powershellblog.blogspot.com/2017/07/bye-bye-backtick-natural-line.html
foreach 및 if와 같은 진술 후에도 계속 진행할 수 있습니다.
$scriptBlock = [Scriptblock]::Create(@'
echo 'before'
ipconfig /all
echo 'after'
'@)
Invoke-Command -ComputerName AD01 -ScriptBlock $scriptBlock