2016-11-08 42 views
1

我得到了一個啓動另一個腳本並將參數傳遞給它的PowerShell腳本。 我這樣做是與Start-Job,因爲我不想等到第二個腳本完成:啓動作業scriptblock傳遞變量

SCRIPTA:

start-job -name EnableAutoUnlock -scriptblock {Invoke-Command -script { C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe "\\Path\To\Script\EnableAutoUnlock.ps1" $VolumeDriveLetter }} 

ScriptB:

[CmdletBinding()] 
Param (
    [Parameter(Position=0)] 
    [string]$drive 
) 
<do stuff with $drive here> 

$VolumeDriveLetter只是一個被處理的驅動器號即「C:」

不幸的是,雖然$VolumeDriveLetter具有預期的值,但鍵入它確實工作正常,但通過變量參數傳遞不起作用。

作品:

start-job -name EnableAutoUnlock -scriptblock {Invoke-Command -script { C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe "\\Path\To\Script\EnableAutoUnlock.ps1" C: }} 

不起作用

$VolumeDriveLetter = "C:" 

start-job -name EnableAutoUnlock -scriptblock {Invoke-Command -script { C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe "\\Path\To\Script\EnableAutoUnlock.ps1" $VolumeDriveLetter }} 

編輯:ScriptB輸出傳遞的變量爲空

缺少什麼我得到傳遞變量上班?

回答

1

可以使用using前綴的腳本塊中訪問值:

$VolumeDriveLetter = "C:" 

start-job -name EnableAutoUnlock -scriptblock {Invoke-Command -script { C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe "\\Path\To\Script\EnableAutoUnlock.ps1" $using:VolumeDriveLetter }} 

或者你使用-ArgumentList的參數和參數傳遞到腳本塊:

start-job -name EnableAutoUnlock -scriptblock { 
    Param($VolumeDriveLetter) 
    Write-Host $VolumeDriveLetter 
} -ArgumentList $VolumeDriveLetter 
+0

謝謝您的回答,但我剛剛嘗試過,不幸的是它不起作用(與之前一樣,scriptB收到的參數只是空的) –

+0

非常感謝,我使用了編輯後的答案,它的工作非常完美 –