通过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)}
上面的命令给出了以下错误
}没想到。
有什么想法吗?
答案 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"