PSEXEC 指定密码时不执行命令

PSEXEC Not executing command when password with " is specified

问题: 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 - 听起来它从未得到修复.

您的次优选项是:

  • 将密码更改为不包含双引号(通常这可能不是一个坏主意,因为其他实用程序也可能无法使用此类密码)。

  • 使用建议的解决方法 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 最终成为 "eating" 嵌入式 "",请尝试以下操作:

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

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

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

问题不在于 psexec 命令行解析。问题是您的密码包含一个在 cmd 中具有特殊含义的字符。您需要使用 ^ 转义此类字符。 https://ss64.com/nt/syntax-esc.html