所以,我在PowerShell中编写工具来执行远程计算机上的文件。我最初使用的是PSexec,但是使用win32_process将它们切换到.net框架。当我使用win32_process在远程计算机上运行安装文件时,它失败了。在远程机器上尝试gwmi win32_process后,失败了。因此,访问wmi对象可能是个问题。无论如何!我最终使用PSexec并且它成功了,我确认它确实如此。但是,这让我想到了PSexec如何连接到远程机器,我想知道这里是否有人知道我如何看待PSexec源代码,或者有人知道它是如何连接和执行的。
我在网上找不到任何东西,只是一堆关于它能做什么的文章。也许我只是勉强研究。
答案 0 :(得分:1)
我使用针对远程计算机的Invoke-WmiMethod cmdlet完成了此操作。您需要在可执行文件路径中包含任何开关,但下面的代码示例应该让您在那里假设您对本地/远程主机具有适当的权限。
有关cmdlet的详细信息,请参阅https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/invoke-wmimethod?view=powershell-5.1。
#local path on the remote machine that will be run including any switches needed
$exePath = "c:\mypath\myfile.exe -s -norestart"
# Use FQDN or IP if netbios name is not reachable
$server = "myserver"
try {
Invoke-WmiMethod -ComputerName $server -Class win32_process -Name create -ArgumentList $exePath -ErrorAction Stop | Out-Null
}
catch {
Write-Host "Failed to execute program on $server. Error Details: $_.Exception.Message" -ForegroundColor Red
}
我无法谈论PSExec如何为您进行比较,但这种方法在过去仅使用本机PowerShell在远程主机上执行应用程序时起了作用。