Powershell - 有条件地向 cmdlet 添加参数/参数

mar*_*sze 8 parameters powershell parameter-passing optional-parameters

假设我有以下(虚构的!)PS 脚本:

$par = [...]
New-Connection `
-Server $par.Server `
-User $par.User `
-Pwd $par.Pwd `
- [...]
Run Code Online (Sandbox Code Playgroud)

如果$par.Pwd为空或为空,New-Connection将抛出错误。

所以,我只想包括这个参数,如果$par.Pwd有一个值。由于有很多(!)参数,它们可能是空的,我不想以 1000 种不同的变体编写命令。我想到了某事。

New-Connection `
-Server $par.Server `
-User $par.User `
$(if ($par.Pwd) {-Pwd $par.Pwd})
Run Code Online (Sandbox Code Playgroud)

但这不起作用。

Dav*_*tin 7

如何使用哈希表方法创建新对象:

$Object = New-Object PSObject -Property @{            
    Name             = $obj.Name 
    OptValue1        = $obj.OptValue1
    OptValue2        = $obj.OptValue2   
    OptValue3        = $null
    OptValue4        = "MyValue"
}  
$Object      
Run Code Online (Sandbox Code Playgroud)

更新 Splatting 也可能有所帮助,请参阅此处了解更多详细信息,但如果您的所有参数名称都匹配,则您可以调用 New-Connection,然后将包含您的值的哈希表传递给它。

New-Connection @par
Run Code Online (Sandbox Code Playgroud)

  • Splatting 绝对是他需要的答案。 (2认同)