2017-05-02 62 views
0

我在遠程服務器上有一個命令行exe,我需要遠程執行(在遠程服務器上運行)。這個exe連接到數據庫,並寫入一個日誌文件。使用Start-Process的PowerShell Invoke-Command未創建日誌文件

我已經通過執行這些PowerShell中啓用WinRM的命令:

  1. netsh http add iplisten localip {add local ip here}
  2. netsh http add iplisten 127.0.0.1
  3. Set-Item WSMan:\localhost\Client\TrustedHosts -Value "*" -Force
  4. Enable-PSRemoting -Force

這工作,我能夠通過執行

測試
Test-WSMan {computername} 

我現在想通過Invoke-Command執行命令行EXE並期待着與該腳本創建日誌文件條目。

Invoke-Command –ComputerName MyServer –ScriptBlock { 
    Start-Process "C:\TheRemotePath\ToTheExe.exe" 
} 

PowerShell不顯示任何錯誤。但是,沒有生成日誌文件。我對exe的目錄以及日誌文件目錄擁有完整的權限。我能夠通過Windows資源管理器成功運行exe(導航到遠程exe文件並雙擊運行)。

任何想法爲什麼這似乎不工作,或者我可以使用什麼工具來嘗試和診斷?

+0

您希望創建什麼日誌,以及在哪裏?你確定日誌文件不是在不同的地方創建的嗎?在運行可執行文件之前,您是否嘗試過'Set-Location「C:\ some \ folder」'?你是否嘗試了調用操作符而不是'Start-Process'? –

+0

該exe有一個配置(使用log4Net登錄)來記錄。它當前登錄在exe文件所在的目錄中。我沒有嘗試過。我會很快嘗試。我認爲這個exe運行在它所在的目錄(在服務器上)。這不是這種情況嗎? (我能夠將一個文件回顯到目錄,所以我知道這不是權限問題。PS C:\ Windows \ system32> Invoke-Command - 計算機名稱myServer -ScriptBlock {回聲測試> C:\ Playground \ log \ test.tx}) – rlev

+0

'$ PSScriptRoot'和'$ PWD.Path'不一定是相同的,不是。 –

回答

1

我會嘗試測試路徑並切換到電話運營商如安斯加爾提到的,即:

Invoke-Command –ComputerName MyServer –ScriptBlock { 
    $path = "C:\TheRemotePath\ToTheExe.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啓動該過程。

+1

是的。我向Ansgar添加了評論。他的評論是解決方案,但標記爲你的,因爲他只是一個我不能標記爲答案的評論。 :) – rlev

+0

乾杯,很高興它解決不管! –

0

在運行之前將工作目錄更改爲可執行文件的位置。我也建議使用呼叫運營商(&)而不是Start-Process,除非您有理由使用後者。

Invoke-Command –ComputerName MyServer –ScriptBlock { 
    Set-Location 'C:\MyDirectory' 
    & 'MyApp.Console.exe' 
}