首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将scriptblock重构为不同于start-job的函数

将scriptblock重构为不同于start-job的函数
EN

Stack Overflow用户
提问于 2013-05-24 22:13:26
回答 2查看 396关注 0票数 1

是否可以将脚本块包含在与包含start-job方法的函数不同的函数中?

我要找的是:

代码语言:javascript
复制
function Get-jobA
{

   $params="data1,data2" 
   $jobs += Start-Job -ScriptBlock Get-MyScriptBlock -ArgumentList $params
}

function Get-MyScriptBlock
{
   [string]param1,[string]param2 = $args
   Start-Process -FilePath <someFile> -ArgumentList 'param1,param2' -PassThru -Wait

}
EN

回答 2

Stack Overflow用户

发布于 2013-05-24 22:48:51

作业有其自己的作用域,因此需要在作业中定义函数,然后才能使用它。您可以使用InitializationScript参数在作业中传递函数定义,语法如下。

代码语言:javascript
复制
$functions = {
  function Get-MyScriptBlock
  {  
    return "Hello!";
  }
}

function Get-jobA
{   
  $job = Start-Job -InitializationScript $functions 
         -ScriptBlock { Get-MyScriptBlock } | Wait-Job | Receive-Job
  Write-Host $job;
}

Get-jobA
票数 3
EN

Stack Overflow用户

发布于 2013-05-25 03:27:17

-ScriptBlock的参数必须是脚本块。但是,您的函数不返回脚本块,而是返回Start-Process cmdlet的结果。将其更改为实际返回脚本块:

代码语言:javascript
复制
function Get-MyScriptBlock {
  return {
    Param([string]param1, [string]param2)
    Start-Process -FilePath <someFile> -ArgumentList $param1, $param2 `
      -PassThru -Wait
  }
}

并像这样修改Get-JobA

代码语言:javascript
复制
function Get-jobA {
  $params = "data1", "data2"
  $jobs += Start-Job -ScriptBlock (Get-MyScriptBlock) -ArgumentList $params
}

请注意Get-MyScriptBlock周围的括号。您需要在子subshell中执行该函数,否则PowerShell会将-ArgumentList $params解释为Get-MyScriptBlock的参数,而不是Start-Job。另请注意,当脚本块需要两个字符串参数时,参数列表必须是两个字符串的数组。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16737037

复制
相关文章

相似问题

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