PSEXEC密码时不执行命令"已指定

时间:2016-03-17 18:02:25

标签: powershell psexec

问题:   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。我不知道为什么。

1 个答案:

答案 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"&,;Jlpsexec将完全通过g=76""&,;Jl

如果psexec结束了&#34;吃饭&#34;嵌入式"",请尝试以下操作:

PSEXEC -u storeadmin -p  ('"' + ($x -replace '"', '""') + '"') \\srXXX01 cmd /c TIME /T 

如果psexec要求将"转义为\"(这对于MS程序来说是不寻常的,通常至少支持{{1} }),尝试:

""