2017-04-17 37 views
0

我無法通過Invoke-Command遠程運行以下PowerShell腳本。PowerShell腳本與Invoke-Command不起作用

Invoke-Command從服務器:

Invoke-Command -Session $session -Command { 
    Param($env:FileLocation, $file) 
    & "$env:FileLocation\$file" 
} -ArgumentList ($env:FileLocation, $file) > ./windowsResult.txt 

遠程腳本:

$Process = Start-Process "$env:DATABASE_HOME\bin\psql.exe" -ArgumentList "-p "5433" -U "postgres" -d "TESTDB" -f $env:LOC_SCRIPT\DBTestScript.2.sql" -Wait -PassThru 

if ($Process.ExitCode -eq 0) { 
    Write-Host "Success!!!!" 
} else { 
    Write-Host "Error while executing DB Scripts" 
} 

當執行它的工作原理和數據庫是越來越成功更新該遠程腳本。

但是用Invoke-Command調用它時沒有。

有人可以幫助我嗎?

+2

請勿使用'env:'限定符作爲參數:'{param($ FileLocation,$ file)&「$ FileLocation \ $ file」}' –

+0

我們需要使用env,因爲我們不知道放置在遠程機器上的腳本的位置。我們正在使用環境變量來讀取腳本的位置。 –

+0

是的,在客戶端(你仍然應該把'$ env:FileLocation'傳遞給'ArgumentList'),但是在遠程scriptblock中你可以自己定義參數變量的名字。 –

回答

0

爲什麼不在腳本中注入腳本並遠程執行它?

$block={ 

    $Process = Start-Process "$env:DATABASE_HOME\bin\psql.exe" -ArgumentList "-p "5433" -U "postgres" -d "TESTDB" -f $env:LOC_SCRIPT\DBTestScript.2.sql" -Wait -PassThru 

    if ($Process.ExitCode -eq 0) { 
     Write-Host "Success!!!!" 
    } else { 
     Write-Host "Error while executing DB Scripts" 
    } 
} 

Invoke-Command -Session $session -ScriptBlock $block 

如果需要塊接受的參數,按照你的語法,但不使用$env:前綴

我希望我的理解正確,你需要達到的目標。