我有一个scriptblock脚本:
$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我想使用input参数(Invoke-Robocopy @RoboArgs)调用robocopy_invoke.ps1模块中定义的函数,但是输入参数的内容一旦进入scriptblock就会改变。这是输出:
-Target: 02 -ExtraArgs: /e /purge -Source: 01
System.Management.Automation.Runspaces.PipelineReader`1+<GetReadEnumerator>d__20[System.Object]为什么两个Write-Host调用的输出不同?我怎样才能把第二个和第一个一样?
发布于 2022-02-17 11:41:06
您可以使用'-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 -AutoRemoveJobhttps://stackoverflow.com/questions/71156986
复制相似问题