2016-11-08 65 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

非常感谢,我使用了编辑后的答案,它的工作非常完美 –