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"&,;Jl
,psexec
将按字面意思传递 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
问题:
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"&,;Jl
,psexec
将按字面意思传递 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