问题:
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' s -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最终“吃”了嵌入式"",请尝试以下操作:
    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/

    10-13 09:28