问题:
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中输入时,它也表现出相同的行为。
更新:
仅当密码上带有“”时,才会出现此问题。如果存在“”,则仅执行
cmd
而不包括/C TIME /T
。我不知道为什么 最佳答案
更新
听起来好像是psexec
本身存在问题,其命令行解析可能会被包含嵌入式"
实例的密码破坏-请参阅this ancient blog post-听起来好像从未解决过。
您的-次优-选项是:
psexec
' s -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
最终“吃”了嵌入式""
,请尝试以下操作:PSEXEC -u storeadmin -p ('"' + ($x -replace '"', '""') + '"') \\srXXX01 cmd /c TIME /T
如果
psexec
要求将"
转换为\"
(这对于MS程序来说是不常见的,通常至少也支持""
),请尝试:PSEXEC -u storeadmin -p ('"' + ($x -replace '"', '\"') + '"') \\srXXX01 cmd /c TIME /T
关于powershell - PSEXEC指定密码为“”时不执行命令,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36068358/