Start-Job scriptblock传递变量



我得到了一个PowerShell脚本,它启动另一个脚本并向它传递参数。对于Start-Job,我这样做是因为我不想等到第二个脚本完成:

ScriptA:

start-job -name EnableAutoUnlock -scriptblock {Invoke-Command -script { C:WindowsSystem32WindowsPowerShellv1.0powershell.exe "\PathToScriptEnableAutoUnlock.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:WindowsSystem32WindowsPowerShellv1.0powershell.exe "\PathToScriptEnableAutoUnlock.ps1" C: }}

不工作

$VolumeDriveLetter = "C:"
start-job -name EnableAutoUnlock -scriptblock {Invoke-Command -script { C:WindowsSystem32WindowsPowerShellv1.0powershell.exe "\PathToScriptEnableAutoUnlock.ps1" $VolumeDriveLetter }}

EDIT: ScriptB将传递的变量输出为空

我错过了什么来传递变量的工作?

您可以使用using前缀访问scriptblock中的值:

$VolumeDriveLetter = "C:"
start-job -name EnableAutoUnlock -scriptblock {Invoke-Command -script { C:WindowsSystem32WindowsPowerShellv1.0powershell.exe "\PathToScriptEnableAutoUnlock.ps1" $using:VolumeDriveLetter }}

或者使用-ArgumentList参数并将参数传递给scriptblock:

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

相关内容

  • 没有找到相关文章

最新更新