2016-11-08 9 views
1

У меня есть сценарий PowerShell, который запускает другой скрипт и передает ему параметры. Я делаю это с Start-Job, как я не хочу ждать, пока второй сценарий не закончен:Start-Job scriptblock pass variable

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

EDIT: ScriptB Выходы переданные переменные, как пустой

Что я упускаю, чтобы получить прохождение Переменного работать?

ответ

1

Вы можете использовать префикс using для доступа к значению в пределах ScriptBlock:

$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 и передать параметр в ScriptBlock:

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

Спасибо за ваш ответ, но Я просто попробовал это и, к сожалению, не работает (так же, как и раньше, параметр, полученный скриптомB, просто пуст) –

+0

Спасибо, я использовал отредактированный ответ, и он отлично работал –