Exchange PowerShell ActiveSync 统计信息



我正在尝试将Powershell脚本放在一起,以便从Exchange服务器检索ActiveSync统计信息。我的目标是获得一份报告,其中包括有关ActiveSync设备的统计信息以及与用户关联的Active Directory帐户的一些详细信息。除了脚本生成的信息之外,为了更具体地说明,我正在尝试捕获每个用户帐户的 EmployeeID 和业务类别属性。然后将其输出到 csv。

公平地说,我不是Powershell专家,并且从我在网上找到的示例中增强了此脚本。任何反馈/建议将不胜感激。

$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`

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

基本上,对于每个人的每个设备,它将人员的姓名,电子邮件地址,EmployeeID和BusinessCategory添加到设备的对象中,然后在最后一个添加成员上传递该内容,从而创建您可以使用的设备对象数组。它还会为您输出到 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:PathToExport.CSV" -NoTypeInformation
Remove-PSSession $sess
好的

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

  1. 您正在将数据写入 shell,因此没有输出到管道
  2. Export-Csv首选对象输出到文件。 在这种情况下,Add-Content可能有效。

$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:tempFile.csv" -NoTypeInformation

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

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

相关内容

  • 没有找到相关文章

最新更新