运行 PowerShell 脚本块
Running a script block for PowerShell
当 运行 下面的部分通过 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}
下面是上面命令的踪迹
λ powershell invoke-command -scr {get-content c:\tmp\test.txt | foreach-object {$_ -replace "MYID", "MyValue"} | set-content c:\tmp\test.txt}
'foreach-object' n’est pas reconnu en tant que commande interne
ou externe, un programme exécutable ou un fichier de commandes.
我试着做了如下所示的多种变体
powershell invoke-command -scr {(get-content c:\tmp\test.txt) | (foreach-object {$_ -replace "MYID", "MyValue"}) | (set-content c:\tmp\test.txt)}
上面的命令,给我以下错误
} was not expected.
有什么想法吗?
如果您只想在正常情况下在本地计算机上执行命令,则不需要使用 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"
当 运行 下面的部分通过 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}
下面是上面命令的踪迹
λ powershell invoke-command -scr {get-content c:\tmp\test.txt | foreach-object {$_ -replace "MYID", "MyValue"} | set-content c:\tmp\test.txt} 'foreach-object' n’est pas reconnu en tant que commande interne ou externe, un programme exécutable ou un fichier de commandes.
我试着做了如下所示的多种变体
powershell invoke-command -scr {(get-content c:\tmp\test.txt) | (foreach-object {$_ -replace "MYID", "MyValue"}) | (set-content c:\tmp\test.txt)}
上面的命令,给我以下错误
} was not expected.
有什么想法吗?
如果您只想在正常情况下在本地计算机上执行命令,则不需要使用 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"