如何使用splatting with hash table将PowerShell中的逗号分隔值列表作为参数传递给CmdLet?

时间:2015-12-17 10:28:31

标签: powershell parameter-passing hashtable cmdlet

我想使用" splatting"使用哈希表将变量参数传递给CmdLet。我想修改以下命令:

New-SmbShare -Name Share$ -Path C:\Folder -ChangeAccess MACHINE\User1

如果我仅针对ChangeAccess参数执行此操作,我最终会得到以下结果:

$Args = @{ChangeAccess = 'MACHINE\User1'}
New-SmbShare -Name Share$ -Path C:\Folder @Args

这非常有效。

参数ChangeAcces接受逗号分隔的用户列表,因此如果我想为两个用户提供共享的更改权限,我将使用以下命令:

New-SmbShare -Name Share$ -Path C:\Folder -ChangeAccess MACHINE\User1,MACHINE\User2

如果我用splatting以相同的方式替换此命令,我最终得到这个:

$Args = @{ChangeAccess = 'MACHINE\User1,MACHINE\User2'}
New-SmbShare -Name Share$ -Path C:\Folder @Args

现在命令失败并出现" CimException"。我有什么想法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:2)

参数-ChangeAccess <string[]>接受字符串或字符串数​​组。这就是ChangeAccess = 'MACHINE\User1,MACHINE\User2'失败的原因。它将整个字符串视为一个用户,您需要为多个用户使用数组选项:

$Args = @{ChangeAccess = 'MACHINE\User1','MACHINE\User2'}