簡體   English   中英

Powershell - Start-Job - 傳遞基於變量的命令

[英]Powershell - Start-Job - Pass a variable based command

我正在嘗試在腳本塊中啟動命令,但這不起作用。 是否需要其他選項才能完成這項工作?

代碼

$cmd = "dir c:\"
start-job -ScriptBlock {$cmd} -Name "Test1" 
Get-Job -Name "Test1" | Receive-Job -Keep

Output

PS C:\> $cmd = "dir c:\"

PS C:\> start-job -ScriptBlock {$cmd} -Name "Test1" 

Id     Name            PSJobTypeName   State         HasMoreData     Location             Command                  
--     ----            -------------   -----         -----------     --------             -------                  
41     Test1           BackgroundJob   Running       True            localhost            $cmd                     

PS C:\> Get-Job -Name "Test1" | Receive-Job -Keep
PS C:\> 

能夠讓它工作......需要添加參數。 謝謝你的幫助。

$cmd = { param([string]$dirname) dir $dirname }
$job = start-job -ScriptBlock $cmd -Name "Test1" -ArgumentList "C:\"
$job | Wait-Job | Receive-Job -Keep
$job

PS C:\> $job | Wait-Job | Receive-Job -Keep

    Directory: C:\

Mode                LastWriteTime         Length Name                                                                                                                           
----                -------------         ------ ----                                                                                                                           
d-----       12/29/2019   9:46 AM                DevTools                                                                                                                       
d-----        5/29/2019   5:44 AM                ESD                                                                                                                            
d-r---         4/1/2020   3:11 AM                Program Files                                                                                                                  
...

PS C:\> $job
Id     Name            PSJobTypeName   State         HasMoreData     Location             Command                  
--     ----            -------------   -----         -----------     --------             -------                  
77     Test1           BackgroundJob   Completed     True            localhost             param([string]$dirnam...

您必須使用 Invoke-Expression 在 $cmd 中執行命令:

$cmd = "dir c:\"
$job = start-job -ScriptBlock {Invoke-Expression $cmd} -Name "Test1" 
$job | Wait-Job | Receive-Job 

您可以使用using前綴來訪問腳本塊中的值:

$cmd = "dir c:\"
$job = start-job -ScriptBlock {Invoke-Expression $using:cmd} -Name "Test1" 
$job | Wait-Job | Receive-Job 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM