运行PowerShell的脚本块

时间:2018-02-21 14:34:09

标签: powershell invoke-command

通过PowerShell提示运行下面的部分时,它会执行它应该执行的操作 - 将包含MYID的任何内容更改为MyValue

(Get-Content C:/tmp/test.txt) | ForEach-Object {$_ -replace "MYID", "MyValue"} | Set-Content C:/tmp/test.txt

然而,当我通过下面的脚本块运行它时,它失败了:

PowerShell Invoke-Command -ScriptBlock {Get-Content C:/tmp/test.txt | ForEach-Object {$_ -replace "MYID", "MyValue"} | Set-Content C:/tmp/test.txt}

以下是上面命令的跟踪

  

λpowerhellinvoke-command -scr {get-content c:\ tmp \ test.txt | foreach-object {$ _ -replace“MYID”,“MyValue”} | set-content c:\ tmp \ test.txt}   'foreach-object'n'est pas reconnant que commande interne   ou externe,un programexécutableouun fichier de commandes。

我尝试做过类似下面的变化

 powershell invoke-command -scr {(get-content c:\tmp\test.txt) | (foreach-object {$_ -replace "MYID", "MyValue"}) | (set-content c:\tmp\test.txt)}

上面的命令给出了以下错误

  

}没想到。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

如果您只是想在正常条件下在本地计算机上执行命令,则不需要使用Invoke-Command或脚本块。相反,我们可以使用-Command切换到PowerShell:

powershell -command "(get-content c:\tmp\test.txt) | foreach-object { $_ -replace 'MYID', 'MyValue' } | set-content c:\tmp\test.txt"

请注意-replace字符串周围的单引号;这避免了命令处理器逃逸的问题。此命令在我的机器上使用多行文件,但是如果它使您仍然无法打开文件,则可以使用此版本,该版本完全读取文件而不是逐行读取:

powershell -c "(get-content c:\tmp\test.txt -raw) -replace 'MYID', 'MyValue' | set-content c:\tmp\test.txt -nonewline"