我有以下powershell命令:
(gc c:\foo.xml -Raw) -replace '(?s)(.*)<bar baz="foo" />', '$1LOL' | Out-File c:\foo.xml
Run Code Online (Sandbox Code Playgroud)
我知道验证这个powershell命令在PowerShell中输入时有效.
现在我想从cmd提示符运行它,所以我知道我需要在cmd中执行:
powershell -Command [the-above-powershell-command]
Run Code Online (Sandbox Code Playgroud)
但是,powershell命令有很多特殊字符,无论我使用什么逃脱,我都无法做到正确.
有人可以为我逃脱powershell命令,所以我可以把它放在cmd?
自己找到了答案:
powershell -Command "(gc c:\foo.xml -Raw) -replace '(?s)(.*)<bar baz=\"foo\" />', '$1LOL' | Out-File c:\foo.xml"
Run Code Online (Sandbox Code Playgroud)
诀窍是逃避"与\,而不是".
帮助我解决问题的链接.
另一种方法是Base64编码命令并使用-EncodedCommand开关:
$CmdLine = @'
(gc c:\foo.xml -Raw) -replace '(?s)(.*)<bar baz="foo" />', '$1LOL' | Out-File c:\foo.xml
'@
$CmdLineBytes = [System.Text.Encoding]::Unicode.GetBytes($CmdLine)
$EncodedCommand = [System.Convert]::ToBase64String($CmdLineBytes)
Run Code Online (Sandbox Code Playgroud)
在您的情况下,这将导致字符串:
KABnAGMAIABjADoAXABmAG8AbwAuAHgAbQBsACAALQBSAGEAdwApACAALQByAGUAcABsAGEAYwBlACAAJwAoAD8AcwApACgALgAqACkAPABiAGEAcgAgAGIAYQB6AD0AIgBmAG8AbwAiACAALwA+ACcALAAgACcAJAAxAEwATwBMACcAIAB8ACAATwB1AHQALQBGAGkAbABlACAAYwA6AFwAZgBvAG8ALgB4AG0AbAA=
Run Code Online (Sandbox Code Playgroud)
从cmd以下地方拨打电话:
powershell.exe -EncodedCommand KABnAGMAIABjADoAXABmAG8AbwAuAHgAbQBsACAALQBSAGEAdwApACAALQByAGUAcABsAGEAYwBlACAAJwAoAD8AcwApACgALgAqACkAPABiAGEAcgAgAGIAYQB6AD0AIgBmAG8AbwAiACAALwA+ACcALAAgACcAJAAxAEwATwBMACcAIAB8ACAATwB1AHQALQBGAGkAbABlACAAYwA6AFwAZgBvAG8ALgB4AG0AbAA=
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
114 次 |
| 最近记录: |