【问题标题】:Start-Job scriptblock passing of variableStart-Job 脚本块传递变量
【发布时间】:2016-11-08 10:34:06
【问题描述】:

我有一个 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 将传递的变量输出为空

要让变量传递工作,我缺少什么?

【问题讨论】:

    标签: powershell parameter-passing start-job


    【解决方案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
    

    【讨论】:

    • 感谢您的回答,但我刚试过,不幸的是它不起作用(和以前一样,scriptB收到的参数只是空的)
    • 非常感谢,我使用了编辑后的答案,效果很好
    猜你喜欢
    • 2013-01-17
    • 2023-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-19
    • 1970-01-01
    • 2019-03-28
    • 1970-01-01
    相关资源
    最近更新 更多