管道传输到具有多个参数的 cmdlet
Piping to a cmdlet with multiple parameters
我有这个 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.
更新:
我听从了 Richards 的建议并创建了一些东西来测试管道输入,但有些地方不对。下面的代码:(我已将 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
是的。
您需要为参数设置 ValueFromPipelineByPropertyName
值。
例如,来自about_Functions_Advanced_Parameters
Param
(
[parameter(Mandatory=$true,
ValueFromPipelineByPropertyName=$true)]
[String[]]
$ComputerName,
…
)
根据该定义,$ComputerName
将从管道中对象上的那个名称的 属性 设置。 (它也会根据参数名称别名进行匹配。)
我有这个 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.
更新:
我听从了 Richards 的建议并创建了一些东西来测试管道输入,但有些地方不对。下面的代码:(我已将 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
是的。
您需要为参数设置 ValueFromPipelineByPropertyName
值。
例如,来自about_Functions_Advanced_Parameters
Param
(
[parameter(Mandatory=$true,
ValueFromPipelineByPropertyName=$true)]
[String[]]
$ComputerName,
…
)
根据该定义,$ComputerName
将从管道中对象上的那个名称的 属性 设置。 (它也会根据参数名称别名进行匹配。)