PowerShell模块参数无法接收管道传递的ADUser数组问题排查
解决PowerShell管道传递AD用户仅获取最后一个对象的问题
问题根源
- 参数类型拼写错误:
Microsoft.ActiveDirectory.Management.ADAcount[]应为Microsoft.ActiveDirectory.Management.ADAccount[](缺失字母c),类型不匹配导致PowerShell无法将多个管道对象正确收集为数组。 - 未使用PowerShell管道处理块:通过管道传递对象时,PowerShell会逐个发送对象,若无
process块,函数仅在所有对象传递完成后执行一次,此时$Users仅保留最后一个对象。
修复后的代码
Function Export-Excel { [cmdletBinding()] param( [parameter(ValueFromPipeline)] [Microsoft.ActiveDirectory.Management.ADAccount[]] $Users ) begin { # 初始化数组用于收集所有管道传递的AD用户对象 $allUsers = @() } process { # 将当前管道中的对象添加到收集数组 $allUsers += $Users } end { Write-Host $allUsers.count # 在此编写导出Excel的逻辑,使用$allUsers即可获取全部用户 } }
验证测试
执行Get-ADUser -Filter * -Properties * | Export-Excel,此时会输出正确的用户总数(如2500),而非1。
内容的提问来源于stack exchange,提问作者Bamboule
相关产品推荐
相关产品推荐

