【问题标题】:Exchange PowerShell ActiveSync statsExchange PowerShell ActiveSync 统计信息
【发布时间】:2015-02-06 13:51:57
【问题描述】:

我正在尝试将 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`

【问题讨论】:

  • 你真的没有问题。出了什么问题或没有按预期工作
  • 对不起,如果我不清楚。就像我在上面的注释中提到的那样,该脚本可以很好地获取所有与 ActiveSync 相关的信息,但它没有提取 AD 信息(EmployeeID、BusinessCategory),所以我想知道是否有人可以指出我的错误。其他我想在 CSV 文件中捕获输出,在您之前我似乎无法使用脚本的创可贴来完成,因此我们将不胜感激有关如何将输出导出到 CSV 的建议。
  • 此信息是否输出到屏幕?看起来您所要求的一切都在控制台屏幕上?只需要修复输出方法,它应该很好地转到 csv。
  • 你是对的,它正在写入主机控制台..当我尝试执行 Export-CSV 时,我收到 SL 的错误,然后缺少 AD 字段。

标签: powershell exchange-server activesync


【解决方案1】:

好的,阅读 cmets 后,问题是您在输出到 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:\temp\File.csv" -NoTypeInformation

上面的代码旨在替换以$ASUser= 开头的行,直到删除会话。它的作用是将对象数组输出到Export-CSV。由于数据来自多个对象,我们将它们全部收集在一个大的Select-Object 中。

类似于@{n=Email;e={$Email}} 的代码是@{Name=Email;Expression={$Email}} 的缩写形式,称为计算属性。我们使用它是因为员工数据不是Get-ActiveSyncDeviceStatistics cmdlet 的一部分。 相当确定这可行。

【讨论】:

  • 感谢 Matt 的建议以及您为将示例放在一起所做的努力。但是我尝试了,但遇到了一些错误。像:术语“名称”不被识别为 cmdlet、函数、脚本文件或可运行程序的名称。检查名称的拼写,或者如果包含路径,请验证路径是否正确并重试。在 H:\scrap\TS.ps1:10 char:37 + $Device | Select-Object @{n=Name
  • 和 ... Get-ActiveSyncDeviceStatistics:无法验证参数“邮箱”上的参数。参数为 null 或空。提供一个不为 null 或空的参数,然后再次尝试该命令。在 H:\scrap\TS.ps1:9 char:54 + $Device = Get-ActiveSyncDeviceStatistics -Mailbox
  • 部分原因是我没有引用字符串....已修复。检查其他错误。
  • 如果$_.identity 为空,我所做的就不应该改变它。
  • 看起来我也搞错了,这就是我所拥有的设置:
【解决方案2】:

我认为这与 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

【讨论】:

  • 当然想念你:}。如果这可行,请使用这个。
  • Thakss Madtech .. 那也没有用 .. 当我这样做时 .. $ASUser = Get-CASMailbox -Filter {HasActiveSyncDevicePartnership -eq $True -and DisplayName -notlike "CAS_{*"} ..然后 $ASUsers |选择 SamAccountName .. 输出为空
  • 这告诉我你的过滤器有问题,或者SamAccountName不是Get-CASMailbox返回的对象的属性
  • 我刚刚检查过,该 cmdlet 返回一个 CASMailbox 对象,该对象确实具有 SamAccountName 属性。如果您只是运行Get-CASMailbox -Filter {HasActiveSyncDevicePartnership -eq $True -and DisplayName -notlike "CAS_{*"},它会返回任何内容吗?
  • 但它是 .. :( ... 除其他外 .. EmailAddresses LegacyExchangeDN LinkedMasterAccount PrimarySmtpAddress ProtocolSettings SamAccountName ServerLegacyDN
猜你喜欢
  • 2013-06-07
  • 2018-05-06
  • 2014-10-16
  • 2012-09-14
  • 1970-01-01
  • 2019-12-16
  • 2012-01-31
  • 2010-10-07
  • 2017-10-26
相关资源
最近更新 更多