是否可以将PowerShell命令行拆分为多行?
在Visual Basic中,我可以使用下划线(_
)继续下一行中的命令。
您可以使用空格,然后使用重音(反引号):
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 (condition) { ..... }
请注意,
if
语句需要语言语法中的脚本块,因此解析器将查看脚本块的下一行,但为了保持一致性,我将开括号保留在同一行。
类似地,在长管道的情况下,我在管道字符(qazxsw poi)之后断开:
$project.Items | ? { $_.Key -eq "ProjectFile" } | % { $_.Value } | % { $_.EvaluatedInclude } | % { ......... }
要扩展|
:
我假设您在命令行上谈论 - 如果它在脚本中,那么新行>充当命令分隔符。
在命令行中,使用分号“;”
例如:
在命令行上签署PowerShell脚本。没有换行符。
cristobalito's answer
在PowerShell和PowerShell ISE中,还可以在每行末尾使用Shift + Enter进行多行编辑(而不是标准反引号powershell -Command "&{$cert=Get-ChildItem –Path cert:\CurrentUser\my -codeSigningCert ; Set-AuthenticodeSignature -filepath Z:\test.ps1 -Cert $cert}
)。
如果您尝试将字符串分成多行,则可以使用“+”。例如:
`
看起来就像:
$header = "Make," +
"ComputerName," +
"Model," +
"Windows Version"
我假设您正在谈论命令行 - 如果它在脚本中,那么新行充当命令分隔符。
在命令行中,使用分号“;”
$header = "Make,ComputerName,Model,Windows Version"
来分离命令;
上替换双反斜杠\\
。\
将安全地址传递给切换命令,如“'PATH'”。此ps1命令安装locale pfx证书。
"'
有很多方法可以继续使用powershell中的一行,包括管道,括号,括号,运算符,点,甚至是逗号。这是一个关于它的博客: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"
你可以在像foreach这样的陈述之后继续。