我有这个cmdlet :(剥离)
[CmdletBinding()]
Function Add-DatabaseUser()
{
Param([string]$LogonName, [string]$UserName, [switch]$FullAccess)
Write-Output($LogonName)
Write-Output($UserName)
Write-Output($FullAccess)
}
是否可以将类似数组的数组管道传递给此cmdlet,如下所示:
$users = @(
@('user1', 'user1', $true),
@('user2', 'user2', $false),
@('user3', 'user4', $true),
@('user4', 'user4', $true)
)
$users | Add-DatabaseUser
而不是对cmdlet进行4次单独调用?
Add-DatabaseUser 'user1' 'user1' $true
Add-DatabaseUser 'user2' 'user2' $false
# etc.
更新
我已经跟随理查兹的建议并创建了一些东西来测试管道输入,但有些事情是不对的。下面的代码:(我已将ValueFromPipelineByPropertyName = true
添加到cmdlet中的所有参数)
$users = @(
@{LogonName='user1'; UserName='user1'; FullAccess=$false},
@{LogonName='user2'; UserName='user2'; FullAccess=$false}
)
$users | Add-DatabaseUser
这给出了以下输出:
System.Collections.HashTable
System.Collections.HashTable
True
System.Collections.HashTable
System.Collections.HashTable
False
答案 0 :(得分:4)
是
您需要为参数设置ValueFromPipelineByPropertyName
值。
例如,来自about_Functions_Advanced_Parameters
Param
(
[parameter(Mandatory=$true,
ValueFromPipelineByPropertyName=$true)]
[String[]]
$ComputerName,
…
)
根据该定义,$ComputerName
将从管道中对象上该名称的属性设置。 (它也将根据参数名称别名进行匹配。)