如何输入多行命令

问题描述 投票:342回答:9

是否可以将PowerShell命令行拆分为多行?

在Visual Basic中,我可以使用下划线(_)继续下一行中的命令。

powershell multiline
9个回答
553
投票

您可以使用空格,然后使用重音(反引号):

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'

它们包括字符串中的换行符。


58
投票

我发现后面的勾号和换行符之间一定不能有任何字符。即使是空格也会导致命令不起作用。


34
投票

在大多数类C语言中,我故意将我的括号放在我认为它们使代码最容易阅读的地方。

PowerShell的解析器识别语句明显不完整,并查看下一行。例如,假设一个带有可选脚本块参数的cmdlet:

    Get-Foo { ............ }

如果脚本块很长,你可能想写:

    Get-Foo
    {
        ...............
        ...............
        ...............
    }

但这不起作用:解析器将看到两个语句。第一个是Get-Foo,第二个是脚本块。相反,我写道:

    Get-Foo {
        ...............
        ...............
        ...............
    }

我可以使用行继续符(`),但这会产生难以阅读的代码,并引发错误。

因为这种情况需要将开放式大括号放在上一行,所以我在任何地方都遵循这种模式:

    if (condition) {
        .....
    }

请注意,if语句需要语言语法中的脚本块,因此解析器将查看脚本块的下一行,但为了保持一致性,我将开括号保留在同一行。

类似地,在长管道的情况下,我在管道字符(qazxsw poi)之后断开:

    $project.Items | 
        ? { $_.Key -eq "ProjectFile" } | 
        % { $_.Value } | 
        % { $_.EvaluatedInclude } |
        % {
            .........
        }

28
投票

要扩展|

我假设您在命令行上谈论 - 如果它在脚本中,那么新行>充当命令分隔符。

在命令行中,使用分号“;”

例如:

在命令行上签署PowerShell脚本。没有换行符。

cristobalito's answer

16
投票

在PowerShell和PowerShell ISE中,还可以在每行末尾使用Shift + Enter进行多行编辑(而不是标准反引号powershell -Command "&{$cert=Get-ChildItem –Path cert:\CurrentUser\my -codeSigningCert ; Set-AuthenticodeSignature -filepath Z:\test.ps1 -Cert $cert} )。


3
投票

如果您尝试将字符串分成多行,则可以使用“+”。例如:

`

看起来就像:

$header =    "Make," +

             "ComputerName," +

             "Model," +

             "Windows Version"

2
投票

我假设您正在谈论命令行 - 如果它在脚本中,那么新行充当命令分隔符。

在命令行中,使用分号“;”


1
投票
  1. 使用分号$header = "Make,ComputerName,Model,Windows Version" 来分离命令
  2. 在任何反斜杠;上替换双反斜杠\\
  3. 使用\将安全地址传递给切换命令,如“'PATH'”。

此ps1命令安装locale pfx证书。

"'

-1
投票

有很多方法可以继续使用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这样的陈述之后继续。

© www.soinside.com 2019 - 2024. All rights reserved.