PowerShell远程处理时设置可执行文件的工作目录

时间:2015-05-15 00:12:14

标签: powershell remoting powershell-remoting working-directory

我正在使用PowerShell远程处理在远程服务器上执行exe文件。问题是exe需要将其工作目录设置为exe所在的目录才能使其正常运行。如果我从命令提示符本地(在服务器上)运行exe它工作正常,如果我使用Enter-PSSession(从我的工作站)然后使用Start-Process -FilePath [PathToExe] -WorkingDirectory [DirectoryPath]工作正常,但如果我使用{{1或Invoke-Command -ComputerName [Blah] -ScriptBlock [MyScriptBlock](来自我的工作站)然后工作目录没有设置。

这就是[MyScriptBlock]的样子:

$session = New-PSSession -ComputerName [Blah]; Invoke-Command -Session $session -ScriptBlock [MyScriptBlock]

我也尝试过使用Invoke-Command而不是Start-Process,但它具有相同的效果;工作目录没有设置。

我已使用SysInternals Process Explorer验证了这一点,右键单击该流程并选择“属性”。当我在本地启动它或使用Enter-PSSession时,会设置命令行和当前目录属性,但不能在使用New-PSSession或只使用带有ComputerName的Invoke-Command时设置。

enter image description here

我正在使用$scriptBlock = { param($version, $database) $hubSyncronizerExeDirectoryPath = "C:\inetpubLive\ScheduledJobs\$version\" $hubSyncronizerExePath = Join-Path $hubSyncronizerExeDirectoryPath 'Test.exe' Set-Location -Path $hubSyncronizerExeDirectoryPath Get-Location Write-Output "$version $database" Start-Process -FilePath $hubSyncronizerExePath -WorkingDirectory $hubSyncronizerExeDirectoryPath -ArgumentList '/database',$database } 并设置Set-Location,这是设置工作目录的两种典型推荐方法,-WorkingDirectory确实显示了预期的(服务器的本地)路径(例如C:\ inetpubLive \ ScheduledJobs \ 1.2.3.4)。我猜这只是PowerShell的一个错误(我在工作站和服务器上使用V4),或者有些东西我不知道?

更新

事实证明,工作目录是一个红色的鲱鱼(至少,我认为是)。出于某种原因,如果我从命令提示符调用可执行文件,一切正常。

所以在我的Invoke-Command中(我用Invoke-Command取代了Start-Process),改变了这个:

Get-Location

到此:

& ""$hubSyncronizerExePath"" /database $database

修复了问题。

感谢所有建议人员:)

1 个答案:

答案 0 :(得分:0)

尝试查看 New-PSDrive ,看看是否有帮助

我想你会想要像

这样的东西

New-PSDrive -Name WorkingDir -PSProvider FileSystem -Root" \\ RemoteServer \ c $ \ inetpubLive \ ScheduledJobs \ 1.2.3.4"

CD WorkingDir:

我假设您应该能够修改您的脚本以包含并将$ version变量放入New-PSDrive命令的路径中...

不确定这会做你需要它做的事情,但它是第一件让人想起的事情......

或者,尝试按如下方式修改脚本:

$ hubSyncronizerExeDirectoryPath =" \\ remoteserver \ C $ \ inetpubLive \ ScheduledJobs \ $ version \"