我正在尝试将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`
答案 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文件。你遇到的两个问题是
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=
开头的行替换为Remove会话。这样做是将一组对象输出到Export-CSV
。由于数据来自多个对象,因此我们将其收集在一个大的Select-Object
中。
看起来像@{n=Email;e={$Email}}
的代码是@{Name=Email;Expression={$Email}}
的缩写形式,称为计算属性。我们使用它,因为员工数据不是Get-ActiveSyncDeviceStatistics
cmdlet的一部分。 漂亮确定这有效。