使用 PsEcec.exe 的远程 powershell 脚本错误 运行

Errors running remote powershell script with PsEcec.exe

我在远程 windows 框上有一个 powershell 脚本,它可以找到联结指向的文件夹。脚本的内容如下所示:

return fsutil reparsepoint query C:\foo\bar\junction_name | where-object { $_ -imatch 'Print Name:' } | foreach-object { $_ -replace 'Print Name\:\s*','' }

当我在远程机器上 运行 时,它按预期执行:)

但是,当我尝试从我的本地计算机远程 运行 时:

C:\Users\foo>C:\pstools\PsExec.exe \remote_server_name "powershell D:\bar\my_script.ps1"

我收到错误:

PsExec could not start powershell D:\bar\my_script.ps1 on remote_server_name: The filename, directory name, or volume label syntax is incorrect.

知道这个错误告诉我的是什么(假设我可以 运行 直接在远程机器上运行脚本没有问题)?

谢谢!

1- 也许您应该避免使用 psexec 并利用 powershell 远程处理

invoke-command -computername remote_server_name -scriptblock {. "D:\bar\my_script.ps1"}

2-如果要保留psexec,看起始目录切换-w

PsExec.exe \remote_server_name -w D:\bar "powershell -file my_script.ps1"

PS 远程处理是进入这里的最佳方式,我实际上为在您的机器上开放 TCP/5985 打了一场好仗。到目前为止,微小的安全风险值得您从中获得管理收益。

最坏的情况使用 WMI Win32_Process class。这样的事情可能会奏效。

$wmiParams = @{
    'ComputerName' = 'Somecomputer'
    'Class' = 'Win32_Process'
    'Name' = 'Create'
    'Args' = 'fsutil reparsepoint query C:\foo\bar\junction_name > C:\temp.txt'
}
Invoke-WmiMethod @wmiParams
Get-Content \somecomputer\c$\temp.txt | where-object { $_ -imatch 'Print Name:' } | foreach-object { $_ -replace 'Print Name\:\s*', '' }

我成功实现了以下功能:

PsExec.exe \remote_server_name powershell.exe D:\bar\my_script.ps1

但是,powershell 会话没有按预期关闭,并且在我的脚本返回后仍处于挂起状态,因此通过 cmd 调用它,详见 here 似乎解决了这个问题:

PsExec.exe \remote_server_name cmd /c "echo . | powershell.exe D:\bar\my_script.ps1"

感谢所有建议...