Exchange PowerShell ActiveSync统计信息

时间:2014-12-08 20:04:24

标签: powershell exchange-server activesync

我正在尝试将powershell脚本放在一起以从Exchange服务器检索ActiveSync统计信息。我的目标是获取一份报告,其中包括ActiveSync设备的统计信息以及与用户关联的Active Directory帐户的一些详细信息。除了脚本生成的信息之外,我还要尝试捕获每个用户帐户的EmployeeID和businesscategory属性。然后将其输出到csv。

公平地说,我不是一个powershell Wiz,并且已经从我在网上找到的例子中扩充了这个脚本。任何反馈/建议将不胜感激。

$DCSession = "DC1"
$sess = New-PSSession -computer $DCSession
Invoke-Command -session $sess -script { Import-Module ActiveDirectory }
Import-PSSession -session $sess -module ActiveDirectory
$ASUser = Get-CASMailbox -Filter {HasActiveSyncDevicePartnership -eq $True -and DisplayName -notlike "CAS_{*"} 
$ACT = Get-ADUser -ID $ASUser.SAMAccountName -Properties EmployeeID, BusinessCategory
$ASUser | ForEach {$Name = $_.Name; $EMail = $_.PrimarySMTPAddress; $Device = Get-    ActiveSyncDeviceStatistics -Mailbox $_.identity; $Device | ForEach {Write-Host $Name, $Email,         $ACT.EmployeeID, $ACT.BusinessCategory, $_.devicemodel, $_.devicephonenumber, $_.deviceid, $_.FirstSyncTime, $_.LastSuccessSync} } 

Remove-PSSession $sess`

2 个答案:

答案 0 :(得分:1)

我认为这与Matt非常相似,我只是使用Add-Member来处理现有对象,而不是在Select cmdlet中进行。这也会为您留下$Devices数组,以便您以后可以使用它们。

基本上,对于每个人的每个设备,它将人员的姓名,电子邮件地址,员工ID和BusinessCategory添加到设备的对象,然后将其传递给最后一个Add-Member创建一个数组您可以使用的设备对象。它还会为您输出CSV。

$DCSession = "DC1"
$sess = New-PSSession -computer $DCSession
Invoke-Command -session $sess -script { Import-Module ActiveDirectory }
Import-PSSession -session $sess -module ActiveDirectory
$ASUser = Get-CASMailbox -Filter {HasActiveSyncDevicePartnership -eq $True -and DisplayName -notlike "CAS_{*"} 

$Devices = ForEach($User in $ASUser) {
    $ACT = Get-ADUser -ID $User.SAMAccountName -Properties EmployeeID, BusinessCategory
    Get-ActiveSyncDeviceStatistics -Mailbox $_.identity | ForEach{
        Add-Member -InputObject $_ -NotePropertyName 'EmployeeID' -NotePropertyValue $ACT.EmployeeID
        Add-Member -InputObject $_ -NotePropertyName 'BusinessCategory' -NotePropertyValue $ACT.BusinessCategory
        Add-Member -InputObject $_ -NotePropertyName 'Name' -NotePropertyValue $User.Name
        Add-Member -InputObject $_ -NotePropertyName 'Email' -NotePropertyValue $User.PrimarySMTPAddress -PassThru
    }
} 

$Devices | Select Name,Email,EmployeeID,BusinessCategory,DeviceModel,DevicePhoneNumber,DeviceID,FirstSyncTime,LastSyncTime | Export-CSV "C:\Path\To\Export.CSV" -NoTypeInformation

Remove-PSSession $sess

答案 1 :(得分:0)

好的,在阅读评论之后,问题是您在输出到csv时出现问题。 Export-CSV将获取所有输出并将其写入csv文件。你遇到的两个问题是

  1. 您正在将数据写入shell,因此没有输出到管道
  2. Export-Csv更喜欢将对象输出到文件。 Add-Content可能适用于此案例。

  3. $ASUser = Get-CASMailbox -Filter {HasActiveSyncDevicePartnership -eq $True -and DisplayName -notlike "CAS_*"}
    $ACT = Get-ADUser -ID $ASUser.SAMAccountName -Properties EmployeeID, BusinessCategory
    $ASUser | ForEach {
        $Name = $_.Name
        $EMail = $_.PrimarySMTPAddress
    
        $Device = Get-ActiveSyncDeviceStatistics -Mailbox $_.identity
        $Device | Select-Object @{n="Name";e={$Name}},
                    @{n="Email";e={$Email}},
                    @{n="EmployeeID";e={$ACT.EmployeeID}},
                    @{n="BusinessCategory";e={$ACT.BusinessCategory}},
                    devicemodel,devicephonenumber,deviceid,FirstSyncTime,LastSuccessSync
    } | Export-CSV -Path "C:\temp\File.csv" -NoTypeInformation
    

    以上代码旨在将以$ASUser=开头的行替换为Remove会话。这样做是将一组对象输出到Export-CSV。由于数据来自多个对象,因此我们将其收集在一个大的Select-Object中。

    看起来像@{n=Email;e={$Email}}的代码是@{Name=Email;Expression={$Email}}的缩写形式,称为计算属性。我们使用它,因为员工数据不是Get-ActiveSyncDeviceStatistics cmdlet的一部分。 漂亮确定这有效。