【问题标题】:Passing new line from command line to PowerShell将新行从命令行传递到 PowerShell
【发布时间】:2015-07-07 08:32:55
【问题描述】:

如何从命令行向 PowerShell 传递换行符?

// MyScript.ps1:
[CmdletBinding()]
Param(
    [Parameter()] $Param
)

Write-Host $Param

// Command line (not PowerShell - cmd.exe!)
powershell.exe -File MyScript.ps1 -Param "First`nSecond"

不起作用。同样使用命令行的换行符\n 也不起作用。那么如何向命令行传递一个新行呢?

【问题讨论】:

    标签: powershell powershell-3.0 powershell-4.0


    【解决方案1】:

    一种解决方法是使用任何其他字符,例如\n 在命令行中,并在 PowerShell 中替换它:

    $x = $param.Replace("\n", "`n")
    

    这可行,但是,它当然是一种 hack,而不是我的首选解决方案。

    【讨论】:

    • 如果您在replace 调用中复制了反引号,则可以使用 (backtick n)。 $x = $param.Replace("``n", "n")`
    【解决方案2】:

    First Line◙Second Line 中有一个特殊字符。

    【讨论】:

    • 这似乎是一些特殊的换行符,powershell 和命令行都不知道。它确实适用于Write-Host,但在其他方面与“反引号 n”不同,例如不被 ConvertFrom-StringData 等 cmdlet 接受。可惜:-(
    【解决方案3】:

    你需要一个回车和换行:

    `r`n
    

    所以这应该有效:

    powershell.exe -File MyScript.ps1 -Param "First`r`nSecond"
    

    【讨论】:

    • 谢谢,但是,Write-Host 不会添加新行,而是输出rn。此外,如果我将参数传递给ConvertFrom-StringData,它不会识别新行...
    • 嗯,我尝试了脚本(将其保存为 MyScript.ps1),它在两行中正确输出了字符串。您可以尝试写主机“FirstrnSecond”
    • @jisaak 现在试试原始的cmd.exe。如果您在 Powershell 提示符下键入该命令,该脚本确实可以工作,但在 cmd.exe 提示符下则不行。
    • 啊,我错过了那部分
    猜你喜欢
    • 1970-01-01
    • 2020-05-18
    • 1970-01-01
    • 1970-01-01
    • 2016-10-26
    • 2010-11-21
    • 2013-12-01
    • 2013-10-07
    • 1970-01-01
    相关资源
    最近更新 更多