Powershell剥离不常见的对象属性

时间:2015-04-09 15:33:56

标签: powershell exchange-server

我有一个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

1 个答案:

答案 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