尝试使用别名属性创建一个在管道上获取对象的函数。我不确定这是哪里出错的。
过程示例:
function Get-Name
{
Param
(
[Parameter(ValueFromPipelineByPropertyName=$true)]
[alias("givenname")]
[System.String] $FirstName,
[Parameter(ValueFromPipelineByPropertyName=$true)]
[alias("sn")]
[System.String] $LastName
)
write-host "firstName = $FirstName / $($FirstName.GetType().FullName)"
Write-host "LastName = $LastName / $($LastName.GetType().FullName)"
}
如果我运行此命令:
Get-Aduser -filter {sn -eq 'smith'} -properties sn,givenname | Get-Name
输出如下:
firstName = / string
LastName = / string
函数似乎永远不会从传入的对象中获取sn和givenname属性。我错过了什么?
答案 0 :(得分:4)
AD Cmdlet应该归咎于
这里的问题是AD Cmdlet以非标准的方式返回对象。例如,对于任何其他cmdlet,如果您获取命令的输出并选择不存在的属性,则不会返回任何内容,如下所示:
get-date | select Hamster
Hamster
-------
>
看,没什么。当然,它说仓鼠,但那里没有真正的物体。这是标准的PowerShell行为。
现在,看看Get-ADUser做了什么:
get-aduser -Filter {sn -eq 'adkison'} | select Hamster
Hamster
-------
{}
它会创建$ null!那么你的函数会发生什么,PowerShell将寻找-LastName或-FirstName的属性,获得$ null然后在那里停止。太糟糕了!
解决这个问题的最佳方法是交换这样的参数名称,它仍然可以工作:
function Get-Name
{
Param
(
[Parameter(ValueFromPipelineByPropertyName=$true)]
[alias('FirstName')]
[System.String] $givenname,
[Parameter(ValueFromPipelineByPropertyName=$true)]
[alias("sn","lastname")]
[System.String] $Surname
)
write-host "firstName = $givenname / $($givenname.GetType().FullName)"
Write-host "LastName = $SurName / $($SurName.GetType().FullName)"
}
get-aduser -Filter {sn -eq 'adkison'} | Get-Name
firstName = James / System.String
LastName = Adkison / System.String
答案 1 :(得分:2)
从我能够确定的内容来看,技术上并不是要责备的AD cmdlet,而是Microsoft.ActiveDirectory.Management
命名空间中的类型 - 在这种情况下,{{1 }}。 ADUser
上的属性最终都存储在私有ADUser
中并通过get访问器获取,这可能解释了为什么它不能按预期工作。
Colyn1337在之前的评论中提到,SortedDictionary
默认情况下不包含名为ADUser
或sn
的属性(或键),所以你&#39 ; d需要在LastName
参数中包含Surname
的别名,或在LastName
来电中选择sn
:
Get-ADUser
这仍然无法奏效,但是从那里开始,你可以直接管道Get-ADUser -Filter {sn -eq 'Adkison'} -Properties sn | Get-Name
,然后再使用你的功能:
Select-Object
当然,您也可以在Get-ADUser -Filter {sn -eq 'Adkison'} -Properties sn | Select * | Get-Name
中选择所需的特定属性,而不是*。我认为这是有效的,因为它将Select-Object
字典解析为具有混凝土属性的ADUser
。解决后,它们将匹配别名以及实际参数名称。