Start-Job 脚本块传递变量
Start-Job scriptblock passing of variable
我有一个 PowerShell 脚本可以启动另一个脚本并将参数传递给它。
我使用 Start-Job
执行此操作,因为我不想等到第二个脚本完成:
脚本A:
start-job -name EnableAutoUnlock -scriptblock {Invoke-Command -script { C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe "\Path\To\Script\EnableAutoUnlock.ps1" $VolumeDriveLetter }}
脚本B:
[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 将传递的变量输出为空
我缺少什么才能使变量生效?
您可以使用 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
我有一个 PowerShell 脚本可以启动另一个脚本并将参数传递给它。
我使用 Start-Job
执行此操作,因为我不想等到第二个脚本完成:
脚本A:
start-job -name EnableAutoUnlock -scriptblock {Invoke-Command -script { C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe "\Path\To\Script\EnableAutoUnlock.ps1" $VolumeDriveLetter }}
脚本B:
[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 将传递的变量输出为空
我缺少什么才能使变量生效?
您可以使用 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