我有一個帶有腳本塊的腳本:
$RoboArgs = @{
Source = '01'
Target = '02'
ExtraArgs = '/e', '/purge'
}
Write-Host @RoboArgs
Start-ThreadJob -InputObject $RoboArgs -ScriptBlock {
. robocopy_invoke.ps1
Write-Host @input
} | Receive-Job -Wait -AutoRemoveJob
我想使用輸入引數 ( Invoke-Robocopy @RoboArgs) 呼叫在 robocopy_invoke.ps1 模塊中定義的函式,但是輸入引數的內容一旦進入腳本塊就會以某種方式發生變化。這是輸出:
-Target: 02 -ExtraArgs: /e /purge -Source: 01
System.Management.Automation.Runspaces.PipelineReader`1 <GetReadEnumerator>d__20[System.Object]
為什么兩個Write-Host呼叫的輸出不同?我怎樣才能使第二個像第一個一樣?
uj5u.com熱心網友回復:
您使用“-InputObject”將物件通過管道傳輸到作業中(使用 $input 檢索)。所以Start-ThreadJob -InputObject $RoboArgs -ScriptBlock {}相當于$RoboArgs | Start-ThreadJob -ScriptBlock {}
您需要的是“-ArgumentList”(使用 $args 檢索):
$RoboArgs = @{
Source = '01'
Target = '02'
ExtraArgs = '/e', '/purge'
}
$RoboArgs
Start-ThreadJob -ArgumentList $RoboArgs -ScriptBlock {
$args
} | Receive-Job -Wait -AutoRemoveJob
示例 2(解壓縮 $args 陣列)
$RoboArgs = @{
Source = '01'
Target = '02'
ExtraArgs = '/e', '/purge'
}
Write-Host @RoboArgs
Start-ThreadJob -ArgumentList $RoboArgs -ScriptBlock {
$robo = $args[0]
Write-Host @robo
} | Receive-Job -Wait -AutoRemoveJob
示例 3(顯式定義引數而不是使用 $args)
$RoboArgs = @{
Source = '01'
Target = '02'
ExtraArgs = '/e', '/purge'
}
Write-Host @RoboArgs
Start-ThreadJob -ArgumentList $RoboArgs -ScriptBlock {
param ( $myRoboArgs )
Write-Host @myRoboArgs
} | Receive-Job -Wait -AutoRemoveJob
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/428279.html
上一篇:嵌套的zip內容串列
下一篇:從陣列中提取PID
