我在远程服务器上有一个命令行EXE,我需要远程执行(在远程服务器上运行(。此EXE连接到DB,并写入日志文件。
我通过执行这些PowerShell命令启用了WinRM:
-
netsh http add iplisten localip {add local ip here}
-
netsh http add iplisten 127.0.0.1
-
Set-Item WSMan:localhostClientTrustedHosts -Value "*" -Force
-
Enable-PSRemoting -Force
这起作用,我能够通过执行
来测试Test-WSMan {computername}
我现在正在尝试通过Invoke-Command
执行命令行EXE,并期望使用此脚本创建一个日志文件。
Invoke-Command –ComputerName MyServer –ScriptBlock {
Start-Process "C:TheRemotePathToTheExe.exe"
}
PowerShell不会显示任何错误。但是,没有生成日志文件。我拥有EXE目录以及日志文件目录的全部权利。我能够通过Windows Explorer成功运行EXE(导航到远程EXE并双击以运行(。
知道为什么这似乎不起作用,或者我可以使用哪些工具来尝试诊断?
我会尝试测试路径并切换到呼叫运算符,即Ansgar,即:
Invoke-Command –ComputerName MyServer –ScriptBlock {
$path = "C:TheRemotePathToTheExe.exe"
if (Test-Path $path) {
Write-Host -ForegroundColor Green "Confirmed access to $path!"
& $path
}
else {
Write-Host -ForegroundColor Yellow "Unable to reach $path!"
}
}
这样做可以帮助您诊断出绊倒的位置。根据EXE,我不得不使用不同的方法从PowerShell开始该过程。
在运行之前,将工作目录更改为可执行文件的位置。我还建议使用呼叫操作员(&
(而不是Start-Process
,除非您有理由使用后者。
Invoke-Command –ComputerName MyServer –ScriptBlock {
Set-Location 'C:MyDirectory'
& 'MyApp.Console.exe'
}