我试图有条件地提供证书'参数,所以我可以通过删除第二个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
}
}
答案 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