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

How can I pass a comma seperated list of values within PowerShell as a parameter to a CmdLet using splatting with hash tables?

我想将 "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"。我有什么办法可以解决这个问题吗?

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

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