问题:
PSEXEC从PS脚执行,当指定-p时,不运行作为参数传递的命令以及包含"
的密码。
代码:
$x = read-host -prompt 'Enter something:'
PSEXEC -u storeadmin -p ('"' + ($x -replace '"', '""') + '"') \\srXXX01 cmd /c TIME /T
结果:
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.
期望:
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.
XX:XX <-- THE ACTUAL TIME, then EXIT as I've invoked /C in CMD
注意:
仅当密码具有"
Anything:";K
时,才会出现这种情况。我已在100台不同的商店机器上对此进行了测试。只有"
的商店才会出现这种异常行为
问题详情: 即使直接在Powershell和CMD上输入CLI,它也会表现出相同的行为。
更新:
问题只会出现在&#34;在密码上。当有&#34;时,它只执行cmd
而不包括/C TIME /T
。我不知道为什么。
答案 0 :(得分:1)
<强>更新强>
听起来问题出在psexec
本身,其命令行解析可能会被包含嵌入式"
实例的密码破坏 - 请参阅this ancient blog post - 听起来好像从未修复过。< / p>
你的 - 次优 - 选项是:
将密码更改为不包含双引号(一般情况下这可能不是一个坏主意,因为其他实用程序也可能无法使用此类密码)。
使用建议的解决方法here:由于问题似乎是传递了其他参数,请将命令行设置为批处理文件 - 如果参数不同,您可以动态创建此批处理文件并将其复制到远程计算机,以便使用psexec
-c
选项执行。
以下是原始答案,演示了避免双引号的各种方法。
最初包含多语句转义方法的问题后来用其中一种方法进行了更新。
如果psexec
期望嵌入的双引号表示为""
,请执行以下操作:
$x = read-host -prompt 'Enter something:'
PSEXEC -u storeadmin -p $($x -replace '"', '""') \\srXXX01 cmd /c TIME /T
如果输入g=76"&,;Jl
,psexec
将完全通过g=76""&,;Jl
。
如果psexec
结束了&#34;吃饭&#34;嵌入式""
,请尝试以下操作:
PSEXEC -u storeadmin -p ('"' + ($x -replace '"', '""') + '"') \\srXXX01 cmd /c TIME /T
如果psexec
要求将"
转义为\"
(这对于MS程序来说是不寻常的,通常至少也支持{{1} }),尝试:
""