Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 如何输入多行命令_Powershell_Multiline - Fatal编程技术网

Powershell 如何输入多行命令

Powershell 如何输入多行命令,powershell,multiline,Powershell,Multiline,是否可以将PowerShell命令行拆分为多行 在Visual Basic中,我可以使用下划线()在下一行中继续执行命令。我假设您是在命令行上讨论的-如果它在脚本中,则新行充当命令分隔符 在命令行中,使用分号“;” 您可以在空格后加上庄重的重音(倒勾): 然而,只有在上述情况下才有必要这样做。通常,当命令在语法上无法在该点完成时,会自动获得行继续。这包括启动新的管道元素: Get-ChildItem | Select Name,Length 将正常工作,因为在执行|之后,该命令无法完成,因

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


在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'”
  • 此ps1命令安装区域设置pfx证书。


    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