首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在scriptblock中更改输入

在scriptblock中更改输入
EN

Stack Overflow用户
提问于 2022-02-17 11:08:09
回答 1查看 43关注 0票数 0

我有一个scriptblock脚本:

代码语言:javascript
复制
$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就会改变。这是输出:

代码语言:javascript
复制
-Target: 02 -ExtraArgs: /e /purge -Source: 01
System.Management.Automation.Runspaces.PipelineReader`1+<GetReadEnumerator>d__20[System.Object]

为什么两个Write-Host调用的输出不同?我怎样才能把第二个和第一个一样?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-17 11:41:06

您可以使用'-InputObject‘将对象输送到作业中(使用$input检索)。所以Start-ThreadJob -InputObject $RoboArgs -ScriptBlock {}等同于$RoboArgs | Start-ThreadJob -ScriptBlock {}

相反,您需要的是'-ArgumentList‘(使用$args检索):

代码语言:javascript
复制
$RoboArgs = @{
  Source = '01'
  Target = '02'
  ExtraArgs = '/e', '/purge'
}
$RoboArgs

Start-ThreadJob -ArgumentList $RoboArgs -ScriptBlock {
  $args
} | Receive-Job -Wait -AutoRemoveJob

示例2(解包$args数组)

代码语言:javascript
复制
$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)

代码语言:javascript
复制
$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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71156986

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档