使用多个参数管道到cmdlet

时间:2015-10-04 09:40:00

标签: powershell piping

我有这个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

1 个答案:

答案 0 :(得分:4)

您需要为参数设置ValueFromPipelineByPropertyName值。

例如,来自about_Functions_Advanced_Parameters

Param
(
  [parameter(Mandatory=$true,
             ValueFromPipelineByPropertyName=$true)]
  [String[]]
  $ComputerName,
  …
)

根据该定义,$ComputerName将从管道中对象上该名称的属性设置。 (它也将根据参数名称别名进行匹配。)

相关问题