Powershell 如何输入多行命令
是否可以将PowerShell命令行拆分为多行Powershell 如何输入多行命令,powershell,multiline,Powershell,Multiline,是否可以将PowerShell命令行拆分为多行 在Visual Basic中,我可以使用下划线()在下一行中继续执行命令。我假设您是在命令行上讨论的-如果它在脚本中,则新行充当命令分隔符 在命令行中,使用分号“;” 您可以在空格后加上庄重的重音(倒勾): 然而,只有在上述情况下才有必要这样做。通常,当命令在语法上无法在该点完成时,会自动获得行继续。这包括启动新的管道元素: Get-ChildItem | Select Name,Length 将正常工作,因为在执行|之后,该命令无法完成,因
在Visual Basic中,我可以使用下划线(
)在下一行中继续执行命令。我假设您是在命令行上讨论的-如果它在脚本中,则新行充当命令分隔符
在命令行中,使用分号“;” 您可以在空格后加上庄重的重音(倒勾): 然而,只有在上述情况下才有必要这样做。通常,当命令在语法上无法在该点完成时,会自动获得行继续。这包括启动新的管道元素:
Get-ChildItem |
Select Name,Length
将正常工作,因为在执行|
之后,该命令无法完成,因为它缺少另一个管道元素。此外,打开大括号或任何其他类型的括号将直接允许行继续:
$x=1..5
$x[
0,3
] | % {
"Number: $_"
}
与|
类似,逗号在某些上下文中也适用:
1,
2
但是,请记住,与JavaScript类似,有些东西也会出现类似的中断,因为换行符出现在前面有有效语句的位置:
return
5
这是行不通的
最后,字符串(在所有变体中)也可以延伸到一行之外:
'Foo
bar'
它们包括字符串中的换行符。在大多数类似C的语言中,我都会考虑将大括号放在我认为最容易阅读的地方 PowerShell的解析器识别语句何时明显不完整,并查看下一行。例如,假设一个cmdlet采用可选的脚本块参数: Get-Foo { ............ } 我可以使用行继续符(`),但这会导致代码难以阅读,并引发错误 因为这种情况要求打开的大括号位于前一行,所以我到处都遵循这种模式: if (condition) { ..... } 进一步说明:
我假设您正在谈论命令行-如果它在脚本中,那么新行>将充当命令分隔符 在命令行中,使用分号“;” 例如:
$header = "Make," +
"ComputerName," +
"Model," +
"Windows Version"
在命令行上签署PowerShell脚本。没有断线
powershell -Command "&{$cert=Get-ChildItem –Path cert:\CurrentUser\my -codeSigningCert ; Set-AuthenticodeSignature -filepath Z:\test.ps1 -Cert $cert}
我刚刚发现在回勾和换行符之间不能有任何字符。即使是空白也会导致命令不起作用。在PowerShell和PowerShell ISE中,也可以在每行末尾使用Shift+Enter进行多行编辑(而不是标准的反勾选
`
)。如果试图将字符串分隔为多行,可以使用“+”。例如:
$header = "Make," +
"ComputerName," +
"Model," +
"Windows Version"
看起来就像:
$header = "Make,ComputerName,Model,Windows Version"
代码>以分离命令
\
上替换双反斜杠\
李>
”
将安全地址传递给开关命令,如“'PATH'”powershell中有很多方法可以继续一行,包括管道、括号、括号、运算符、点,甚至是逗号。下面是一个关于它的博客: 您也可以在foreach和if等语句之后继续
$scriptBlock = [Scriptblock]::Create(@'
echo 'before'
ipconfig /all
echo 'after'
'@)
Invoke-Command -ComputerName AD01 -ScriptBlock $scriptBlock
只需在多行上使用`character to separate命令只需在此处添加一个角大小写。这可能会节省您5分钟。如果您使用一系列操作,您需要在行的末尾添加“.”,在“`”(倒勾)后面留出一个空格。我很难找到这个答案
$yourString = "HELLO world! POWERSHELL!". `
Replace("HELLO", "Hello"). `
Replace("POWERSHELL", "Powershell")
我从做开始
if ($true) {
"you can write multiple lines here, and the command doesn't run untill you close the bracket"
"like this"
}
最近发现我可以
&{
get-date
"more stuff"
}
这是一篇老文章,这里是现代方法。
如果您没有使用传统的powershell,继续生产线的最干净方法是生产线开始处的管道
注意:命令没有中断,某些行被注释掉。这在命令行上非常好
> Get-ChildItem -path 'c:\' -Depth 1
| Sort-Object LastWriteTime
# | Sort-Object Length -Descending
| Select-Object -First 3 -Skip 3
| Foreach-Object {
$_.Name, $_.Length | Join-String -Separator ' = '
}
输出:
explorer.exe = 4826160
procexp.old.exe = 2925760
RtlExUpd.dll = 2839488
Windows Powershell(版本<6)
不幸的是,windows powershell不支持它。上面链接了一系列备选方案。您可以完全删除反勾号:,并且不要忘记提及一些其他令牌也充当行延续器,例如|
和{
@Keith:谢谢,我把它包括进去了。那些可能太明显了,不值得一提;-)不,最好把这些其他字符记录下来,以备将来参考。@JackDouglas:你可以在左括号后面直接换行,但显然不能在运算符前面的表达式中。也就是说,我认为这是一个oversi语法中的ght。行继续在ISE命令窗格中显然不起作用。“为什么不反斜杠?”"这个问题在Bruce Payette的PowerShell in Action;一本很棒的书中得到了很好的解决。Bruce对编程语言的历史有着广泛的了解。期待着这本书的第2版。如果是offtopic,很抱歉,但是如果您要使用sh
命令提交脚本,bash约定将保持不变,这样您就可以使用反斜杠了。在这种情况下,yo你的脚本也应该有unix风格的结尾。只需使用“character to separate command on multiple line”这不是问题的答案,但你的答案回答了我的问题。:)这很有趣,但与OP的要求相反。OP想将一个命令拆分为几行;你解释了如何将多个命令合并到多个行一行。如果
和
foreach和try那么如何工作?它们允许脚本块位于下一行…这意味着possible@Nacht:来自生锈的内存:根据语言语法,需要脚本块的语句将通过新行进行解析以找到一个。有人能确认吗?@Nacht:“但这不起作用”我现在明白你的意思了。所以“if”和“foreach”实际上不是cmdlet——它们实际上是语法的一部分,因此迫使它忽略下一行。那么,有没有办法让用户定义的函数读取脚本b
if ($true) {
"you can write multiple lines here, and the command doesn't run untill you close the bracket"
"like this"
}
&{
get-date
"more stuff"
}
> Get-ChildItem -path 'c:\' -Depth 1
| Sort-Object LastWriteTime
# | Sort-Object Length -Descending
| Select-Object -First 3 -Skip 3
| Foreach-Object {
$_.Name, $_.Length | Join-String -Separator ' = '
}
explorer.exe = 4826160
procexp.old.exe = 2925760
RtlExUpd.dll = 2839488