有条件地为功能提供“凭证”参数

时间:2014-11-19 21:50:04

标签: powershell

我试图有条件地提供证书'参数,所以我可以通过删除第二个if ... else语句来压缩代码。有什么想法吗?

$params = @{ ScriptBlock = $ScriptBlock; ArgumentList = $Parameters }

if (-not $Remote -or $ComputerName -eq $env:COMPUTERNAME) {
    Start-Job @params -ErrorAction Stop
}
else {
    $params.Add('ComputerName',$ComputerName)
    if (-not $Parameters.Creds) {
        $ComputerName | Test-PsRemoting
        if ($CopyTool) { $CopyTool | Copy-Tool -ComputerName $ComputerName }
        Invoke-Command @params -AsJob -ErrorAction Stop
    }
    else {
        $ComputerName | Test-PsRemoting -Credential $Parameters.Creds
        if ($CopyTool) { $CopyTool | Copy-Tool -ComputerName $ComputerName -Credential $Parameters.Creds }
        Invoke-Command @params -Credential $Parameters.Creds -AsJob -ErrorAction Stop
    }
}

1 个答案:

答案 0 :(得分:1)

由于您已经在使用splatting,您是否只能在$ params哈希表中提供凭据条目(而不是将其称为Creds)?

然后,您只会提供凭据,如果它在哈希表中...您不需要"否则"。

但这并不是你想要的。

当我想"有条件地"提供凭证参数(或任何其他参数),我创建一个单独的哈希表,该哈希表为空或具有凭据项(具有凭据密钥),然后将其展开到相关的cmdlet。

您也可以展示多个哈希表。所以在第一个" else"之后,这个:

   $params.Add('ComputerName',$ComputerName)
   $credHash=@{}
   if ($Parameters.Creds) { 
        $credHash=@{Credential=$parameters.Creds}
   }
   $ComputerName | Test-PsRemoting @credHash
   if ($CopyTool) { $CopyTool | Copy-Tool -ComputerName $ComputerName @credHash }
   Invoke-Command @params @credHash -AsJob -ErrorAction Stop