我有一个Exchange脚本,它向我提供有关我们数据库的激活首选项的信息。问题是每个数据库可以有3到5个副本,当我运行以下脚本时," pref5"财产被剥夺了。我通常会通过说它剥离不常见的对象属性来理解这一点,但事实并非如此,因为有些对象只有3个副本 - 因此只有3" pref"属性,但4副本的数据库显示正常。我的输出csv以name,pref1,pref2,pref3,pref4结束(为什么不pref5?)。我已经测试了运行它并捕获数组,并且pref5属性在那里,当你将它与其他没有pref5的对象组合在一起时,它就不会使它成为管道。
$dbs = Get-MailboxDatabase "E2K10_DB*" | sort name
foreach ($db in $dbs) {
$db | select -ExpandProperty ActivationPreference | foreach {
$db | Add-Member -Type 'NoteProperty' -Name ("pref" + $_.value) -Value $_.key.tostring()
}
}
$dbs | select name,pref? | Export-Csv $home\Desktop\DBPrefs.csv -NoTypeInformation
答案 0 :(得分:0)
行。这应该是您正在寻找的开始。我的CAS正在运行2.0 PowerShell,因此我确保支持该解决方案。如果你有3.0或更高,它可能会更简洁,但它应该仍然可以工作。
$dbs = Get-MailboxDatabase "E2K10_DB*" | Sort Name
$prefCount = $dbs | Select -ExpandProperty ActivationPreference | Measure-Object value -Maximum | Select -ExpandProperty Maximum
$results = $dbs | ForEach-Object{
$props = @{}
$name = $_.Name
$props.Name = $name
$dbActivationPreference = $_ | Select -ExpandProperty ActivationPreference
For($prefIndex = 1;$prefIndex -le $prefCount;$prefIndex++){
$indexValue = $dbActivationPreference | Where-Object{$_.Value -eq $prefIndex} | Select-Object -ExpandProperty Key
$props."pref$prefIndex" = $indexValue
}
New-Object -TypeName PSCustomObject -Property $props
}
$propsOrder = @("Name") + (1..$prefCount | ForEach-Object{"pref$_"})
$results | Select $propsOrder | Export-Csv $home\Desktop\DBPrefs.csv -NoTypeInformation
我认为你遇到的问题是某些数据库没有相同的ActivationPreference
集。所以我们需要弄清楚最大偏好,因此我们知道我们必须添加许多pref#
。
$prefCount
将获取具有最高优先级计数的数据库中的数字。现在我们知道每个实体需要多少值。
$props = @{}
来构建包含数据库的所有首选项和名称的属性列表。
我们捕获$results
并确保输出中属性的顺序我们必须使用$propsOrder