通过开始作业和开关参数调用功能

时间:2019-05-13 19:04:57

标签: powershell

我有以下代码:

        Start-Job -ScriptBlock $Function:DbRefresh -argumentlist $DestSqlInstance   , `
                                                                 $RefreshDatabase   , `
                                                                 $PfaEndpoint       , `
                                                                 $PfaCredentials    , `
                                                                 $RefreshSource     , `
                                                                 $ForceDestDbOffline, `
                                                                 $NoPsRemoting      , `
                                                                 $PromptForSnapshot , `
                                                                 $ApplyDataMasks | Out-Null  

最后四个参数是传递到此语句出现的函数中的开关,调用DbRefresh的参数的位置和类型都正确。尽管如此,我的工作还是因以下原因而中止:

A positional parameter cannot be found that accepts argument 'False'.
    + CategoryInfo          : InvalidArgument: (:) [], ParameterBindingException
    + FullyQualifiedErrorId : PositionalParameterNotFound

很明显,通过Start-Job使用我错过的开关来调用函数有些细微差别。         + PSComputerName:本地主机

1 个答案:

答案 0 :(得分:1)

您需要根据自己的情况进行调整,但是此实现应该可以满足您的需求。

[scriptblock]$sb = {
  function isOn {
    param (
      [switch]$on
    )
    if ($on) {write-output "on"} else { write-warning "off" }
  }
  isOn -On:$Args[0]
}

@($true,$false) | %{ start-job -ScriptBlock $sb -ArgumentList @($_) }

Get-Job |Receive-Job
  on
  WARNING: off