Start-Job scriptblock传递变量

时间:2016-11-08 10:34:06

标签: powershell parameter-passing start-job

我有一个PowerShell脚本,它启动另一个脚本并将参数传递给它。 我使用Start-Job执行此操作,因为我不想等到第二个脚本完成后才会执行此操作:

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只是一个被处理的驱动器号,即&#34; C:&#34;

不幸的是,虽然$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 个答案:

答案 0 :(得分: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