如何input多行命令?
是否有可能通过多行分割Powershell命令行?
在Visual Basic中,我可以使用下划线( _
)继续下一行中的命令。
你可以使用重音(或反音):
Get-ChildItem -Recurse ` -Filter *.jpg ` | Select LastWriteTime
但是,在上述情况下,这只是必要的。 通常情况下,当一个命令在语法上不能在这个时候完成时,你会得到自动的续行。 这包括启动一个新的pipe道元素:
Get-ChildItem | Select Name,Length
自从|
之后将无问题地工作 该命令不能完成,因为它缺less另一个pipe道元素。 另外打开大括号或任何其他种类的括号将允许直接连续的行:
$x=1..5 $x[ 0,3 ] | % { "Number: $_" }
类似于|
逗号也可以在一些情况下工作:
1, 2
请记住,虽然与JavaScript的自动分号插入类似,但也有一些事情被类似地破坏,因为换行符发生在有效语句的前面:
return 5
不pipe用。
最后,string(所有types)也可以延伸到一行之外:
'Foo bar'
然后,它们包含string中的换行符。
只是发现在后退和换行符之间一定不能有任何字符,即使是空白也会导致命令不能工作。
在大多数类C语言中,我故意把我的大括号放在我认为最容易阅读的地方。
PowerShell的parsing器可以识别一个语句显然不完整,并且可以看到下一行。 例如,想象一个带有可选脚本块参数的cmdlet:
Get-Foo {............}
如果脚本块很长,你可能想写:
GET-富 { ............... ............... ............... }
但是这不起作用:parsing器将会看到两个语句。 第一个是Get-Foo
,第二个是脚本块。 相反,我写道:
Get-Foo { ............... ............... ............... }
我可以使用续行字符(`),但这会造成难以阅读的代码,并引发错误。
因为这种情况需要开放的支撑在前一行,我遵循的模式到处都是:
if(condition){ ..... }
请注意,
if
语句在语言语法中需要脚本块,则parsing器将在脚本块的下一行中查找,但为了保持一致性,我将左大括号保持在同一行上。
同样,在长pipe道的情况下,我打破了pipe道字符( |
):
$ project.Items | ? {$ _。Key -eq“ProjectFile”} | %{$ _。Value} | %{$ _。EvaluatedInclude} | %{ ......... }
我假设你在命令行中讨论 – 如果它在脚本中,那么一个新行作为一个命令分隔符。
在命令行上,使用分号;
,比如说, 在命令行上签署一个PowerShell脚本,不换行。
powershell -Command "&{$cert=Get-ChildItem –Path cert:\CurrentUser\my -codeSigningCert ; Set-AuthenticodeSignature -filepath Z:\test.ps1 -Cert $cert}
在PowerShell和PowerShell ISE中,也可以在每行末尾使用SHIFT+ENTER
进行多行编辑(而不是标准的反引号)。
我假设你在命令行中讨论 – 如果它在脚本中,那么一个新行作为一个命令分隔符。
在命令行中,使用分号“;”
如果您尝试将string分隔成多行,则可以使用“+”。 例如:
$header = "Make," + "ComputerName," + "Model," + "Windows Version"
看起来就像:
$header = "Make,ComputerName,Model,Windows Version"