簡體   English   中英

PowerShell遠程處理時設置可執行文件的工作目錄

[英]Set Executable's Working Directory When PowerShell Remoting

我正在使用PowerShell遠程處理在遠程服務器上執行exe文件。 問題是exe需要將其工作目錄設置為exe所在的目錄才能使其正常運行。 如果我從命令提示符本地(在服務器上)運行exe它工作正常,如果我使用Enter-PSSession(從我的工作站)然后使用Start-Process -FilePath [PathToExe] -WorkingDirectory [DirectoryPath]工作正常,但是如果我使用Invoke-Command -ComputerName [Blah] -ScriptBlock [MyScriptBlock]$session = New-PSSession -ComputerName [Blah]; Invoke-Command -Session $session -ScriptBlock [MyScriptBlock] $session = New-PSSession -ComputerName [Blah]; Invoke-Command -Session $session -ScriptBlock [MyScriptBlock] (來自我的工作站)然后工作目錄沒有設置。

這就是[MyScriptBlock]的樣子:

$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
}

我也嘗試過使用Invoke-Command而不是Start-Process,但它具有相同的效果; 工作目錄未設置。

我已經通過使用SysInternals Process Explorer驗證了這一點,右鍵單擊該進程並選擇Properties。 當我在本地啟動它或使用Enter-PSSession時,會設置命令行和當前目錄屬性,但在使用New-PSSession或僅使用帶有ComputerName的Invoke-Command時則不會。

在此輸入圖像描述

我正在使用Set-Location和設置-WorkingDirectory ,這是設置工作目錄的兩種典型推薦方法, Get-Location確實顯示了預期的(服務器的本地)路徑(例如C:\\ inetpubLive \\ ScheduledJobs \\ 1.2) .3.4)。 我猜這只是PowerShell的一個錯誤(我在工作站和服務器上使用V4),或者可能是我缺少的東西?


UPDATE

事實證明,工作目錄是一個紅色的鯡魚(至少,我認為是)。 出於某種原因,如果我從命令提示符調用可執行文件,一切正常。

所以在我的Invoke-Command(我用Invoke-Command取代了Start-Process)中,改變了這個:

& ""$hubSyncronizerExePath"" /database $database

對此:

& cmd /c ""$hubSyncronizerExePath"" /database $database

解決了這個問題。

謝謝你的所有建議:)

試着看看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 \\”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM