Powershell 需要脚本来检测对象属性-多值

Powershell 需要脚本来检测对象属性-多值,powershell,active-directory,exchange-server,Powershell,Active Directory,Exchange Server,我主要使用PowerShell与Active Directory和MS Exchange一起工作 存在使用联接来报告多值对象的示例,但是在脚本中包含这些行似乎很麻烦。我想要一个脚本,它可以报告所有对象,提供标准属性,检测多值属性,并使用联接字符“%”将它们导出。您提到了AD和Exchange,但对于具体查询什么以及哪些是“标准”属性,这个问题仍然很模糊。我猜你可能指的是广告用户属性,但下面的产品更具通用性 通过将属性放入数组并使用选择对象,可以选择要从对象检索的属性(属性)列表。在本例中,您需要

我主要使用PowerShell与Active Directory和MS Exchange一起工作


存在使用联接来报告多值对象的示例,但是在脚本中包含这些行似乎很麻烦。我想要一个脚本,它可以报告所有对象,提供标准属性,检测多值属性,并使用联接字符“%”将它们导出。

您提到了AD和Exchange,但对于具体查询什么以及哪些是“标准”属性,这个问题仍然很模糊。我猜你可能指的是广告用户属性,但下面的产品更具通用性

通过将属性放入数组并使用
选择对象
,可以选择要从对象检索的属性(属性)列表。在本例中,您需要提前知道哪些属性将是多值的:

# Create an object with regular and multi-valued properties. In your
# case I guess this will come from a Get-*User cmdlet or similar.

$test = New-Object -TypeName PSOBject -Property @{"one"=1;"two"=2;"multi"=@("a","b")}

# Define the list of properties you want to return from this object.
# In this list we include a calculated column to pull the multi-valued
# data out and -join it with the '%' character

$properties = @('one','two',@{Label="multi";Expression={($_.multi) -join "%"}})

# Now we pipe our object through Select-Object to pull out those
# properties we want, including the calculated one:
$test | Select-Object $Properties

one two multi
--- --- -----
  1   2 a%b 
请注意,计算属性的名称(标签)可以是您想要的任何名称;我使用了与原始财产相同的名称


编辑:下面的代码适用于上面的$test对象,将其转换为一个新对象,其中多值字段是一个带有“%”连接原始数组成员的单个字符串。请注意,这不会使用准备好的表达式来转换multi属性;相反,它使用
选择对象
中的
-ExpandProperty
开关动态执行工作

$ConvertedProperties = @{}

foreach($Property in ($test | Get-Member -MemberType Properties)){ 
  $Value = (Select-Object -InputObject $test -ExpandProperty $Property.Name) -join "%"
  $ConvertedProperties.($Property.Name) = $Value
}

$ConvertedObject = New-Object -TypeName PSOBject -Property $ConvertedProperties

$ConvertedObject | Export-Csv filename.csv -NoTypeInformation

这是我的剧本。我只希望我可以使用ad对象,自动确定属性类型并输出,或者使用分隔符将多值项连接到CSV。我想确定属性类型可能是一次性的,因为有一个有限的列表,但我明白,在一般情况下,找到一个这样做的解决方案是多么好。我已经用一个适用于我的简单测试对象的例子更新了我的答案。我希望这是有意义的,并让您更接近与您的Active Directory一起工作的东西。