是否可以将PowerShell命令行分成多行?
在Visual Basic中,我可以使用下划线(_
)在下一行中继续该命令。
sh
命令提交脚本,则bash约定成立,因此可以使用反斜杠。在这种情况下,您的脚本还应该具有unix样式的结尾。
是否可以将PowerShell命令行分成多行?
在Visual Basic中,我可以使用下划线(_
)在下一行中继续该命令。
sh
命令提交脚本,则bash约定成立,因此可以使用反斜杠。在这种情况下,您的脚本还应该具有unix样式的结尾。
Answers:
您可以使用带有重音符号(反勾号)的空格:
Get-ChildItem -Recurse `
-Filter *.jpg `
| Select LastWriteTime
但是,仅在上述情况下才需要这样做。通常,当命令在语法上无法完全完成时,您会获得自动的行连续性。这包括启动新的管道元素:
Get-ChildItem |
Select Name,Length
可以正常工作,因为在|
命令之后由于缺少另一个管道元素而无法完成。同样,打开花括号或任何其他种类的括号也可以直接继续行:
$x=1..5
$x[
0,3
] | % {
"Number: $_"
}
与|
逗号类似,在某些情况下也可以使用:
1,
2
请记住,虽然,类似于JavaScript的自动分号插入,也有一些事情,也同样打破,因为线路中断发生在那里的一个点是由一个有效的声明之前:
return
5
不管用。
最后,字符串(在所有变体中)也可能会超出一行:
'Foo
bar'
然后,它们在字符串中包括换行符。
|
和{
。
我刚刚发现,反斜线和换行符之间不能有任何字符。即使是空格也会导致该命令不起作用。
在大多数类似C的语言中,我故意将花括号放在我认为它们使代码最容易阅读的位置。
PowerShell的解析器识别出明显没有完成的语句,然后转到下一行。例如,想象一个带有可选脚本块参数的cmdlet:
Get-Foo {............}
如果脚本块很长,则可能需要编写:
Get-Foo { ...... ...... ...... }
但这是行不通的:解析器将看到两个语句。第一个是Get-Foo
,第二个是脚本块。相反,我写道:
Get-Foo { ...... ...... ...... }
我可以使用换行符(`),但这会使代码难以阅读,并引发bug。
因为这种情况要求开放括号在上一行,所以我到处都遵循这种模式:
如果(条件){ ..... }
请注意,
if
语句需要使用语言语法中的脚本块,因此解析器将在脚本块的下一行中查找,但是为了保持一致,我将大括号放在同一行上。
同样,在长管道的情况下,我在竖线字符(|
)之后中断:
$ project.Items | ?{$ _。Key -eq“ ProjectFile”} | %{$ _。Value} | %{$ _。EvaluatedInclude} | %{ ...... }
if
以及foreach
和try
工作呢?他们允许在下一行显示脚本块...这意味着可能会发生变化
我假设您是在命令行上谈论的-如果它在脚本中,则换行>充当命令定界符。
在命令行上,使用分号“;”
例如:
在命令行上签名PowerShell脚本。没有换行符。
powershell -Command "&{$cert=Get-ChildItem –Path cert:\CurrentUser\my -codeSigningCert ; Set-AuthenticodeSignature -filepath Z:\test.ps1 -Cert $cert}
在PowerShell和PowerShell ISE中,还可以在每行的末尾使用Shift+ Enter进行多行编辑(而不是标准backtick `
)。
SHIFT-ENTER
技巧,则很难编辑。
PSReadLine
模块或等效模块时,PowerShell的控制台版本才会出现这种情况。在标准Windows控制台中输入功能,Enter
并且Shift+Enter
在功能上等效。
PSReadline
模块仅在控制台主机中工作(不适用于ISE)。2)仅在使用时才能在Shift+Enter
控制台主机中工作。3)一直在ISE工作。4)如果不使用控制台主机,在功能上等效于。PSReadline
Shift+Enter
PSReadline
Shift+Enter
Enter
;
分隔命令\\
在任何反斜杠上替换双反斜杠\
。"'
传递安全地址转换命令,如“‘路径’”。此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之类的语句,如果有,也可以继续。
$scriptBlock = [Scriptblock]::Create(@'
echo 'before'
ipconfig /all
echo 'after'
'@)
Invoke-Command -ComputerName AD01 -ScriptBlock $scriptBlock
只需使用`字符在多行上分隔命令