首页 > 解决方案 > Get-ADGroupMember 和成员的 extensionAttribute5

问题描述

我正在编写一些脚本,他一直工作到我尝试导出到文件的那一刻。在此之后,我有一个错误-“命令管道位置 1 的 cmdlet Export-Csv”我做错了什么吗?我是 PowerShell 和一般脚本的初学者。提前致谢。

 Get-ADGroupMember -Recursive ‘MFA - Users’ | ForEach {Get-ADUser -filter {SamAccountName -eq $_.SamAccountName} -Properties extensionAttribute5 ,employeeid} | Format-Table -Property  name ,extensionAttribute5 ,SamAccountName ,employeeid



Export-CSV -path "$home\desktop\out-ADGroupMember.csv"

标签: powershellpowershell-2.0powershell-3.0

解决方案


在您的示例中,您没有向Export-Csv命令发送数据或对象。您将需要执行以下操作:

Get-ADGroupMember -Recursive 'MFA - Users' | ForEach {
    Get-ADUser -filter "SamAccountName -eq '$_.SamAccountName'" -Properties extensionAttribute5 ,employeeid
} | Export-Csv -Path "$home\desktop\out-ADGroupMember.csv" -NoType

如果您查看 的命令信息Export-Csv,您会注意到这-InputObject是必需的,因为它是一组不包含的参数[]Export-Csv的文档显示该InputObject参数可以接受管道值。这意味着您可以将对象通过管道传递到命令中,也可以将其直接传递给参数。

# Show command info
Get-Command Export-Csv -Syntax
Export-Csv [[-Path] <string>] [[-Delimiter] <char>] -InputObject <psobject> [-LiteralPath <string>] [-Force] [-NoClobber
] [-Encoding <string>] [-Append] [-NoTypeInformation] [-WhatIf] [-Confirm] [<CommonParameters>]

Export-Csv [[-Path] <string>] -InputObject <psobject> [-LiteralPath <string>] [-Force] [-NoClobber] [-Encoding <string>]
 [-Append] [-UseCulture] [-NoTypeInformation] [-WhatIf] [-Confirm] [<CommonParameters>]

# Using pipeline
$data | Export-Csv -Path file.csv -NoType

# Using named parameter
$data | foreach { Export-Csv -InputObject $_ -Path file.csv -Append -NoType}

顺便说一句,Format-*命令只能用于显示目的。如果您计划处理输出而不仅仅是在控制台中查看它,那么您Format-*当时不应该输入管道。

# Good practice
Get-ADGroupMember 'MFA - Users' | Format-Table
$users = Get-ADGroupMember 'MFA - Users'
$users | Export-Csv file.csv -NoType
$users | Format-Table

# Bad practice
Get-ADGroupMember 'MFA - Users' | Format-Table | Select SamAccountName
$users = Get-ADGroupMember 'MFA - Users' | Format-Table
$users | Export-Csv file.csv -NoType

推荐阅读