脚本不向新列添加新数据

时间:2017-08-07 11:12:35

标签: arrays powershell active-directory exchange-server

我编写了一个脚本,用于从Active Directory和Exchange返回一些详细信息,然后将这些详细信息放入数组中。

问题是Exchange部分正在覆盖数组中的现有值,而我希望它基本上为Exchange数据创建一个新列并将其放在那里。

这是脚本:

$adusers = Get-ADUser -Filter {Enabled -eq $true} -Properties LastLogonDate, createTimeStamp, mail |
           Where-Object { $_.Name -like $_."Name" } |
           Select Name, SamAccountName, LastLogonDate, createTimeStamp, mail

$adusers | ForEach-Object {
    $mailboxstats = Get-Mailbox $_.mail |
                    Get-MailboxStatistics |
                    Select-Object TotalItemSize
    $adusers += $mailboxstats
}

return $adusers

3 个答案:

答案 0 :(得分:1)

使用calculated property作为邮箱大小。此外,条件$_.Name -like $_."Name"始终为true,因此您只需删除Where-Object过滤器,并且不需要return关键字,因为PowerShell函数会返回所有未捕获的输出Success output stream无论如何。

将您的代码更改为以下内容:

Get-ADUser -Filter {Enabled -eq $true} -Properties LastLogonDate, createTimeStamp, mail |
    Select Name, SamAccountName, LastLogonDate, createTimeStamp, mail,
        @{n='MailboxSize';e={
            Get-Mailbox $_.mail |
                Get-MailboxStatistics |
                Select-Object -Expand TotalItemSize
        }}

答案 1 :(得分:0)

使用Select-Object修改集合中的项目:

return $adusers | Select *,@{Name='TotalItemSize';Expression={
    $mailboxstats = Get-Mailbox $_.mail |
                    Get-MailboxStatistics |
                    Select-Object -Expand TotalItemSize}}

答案 2 :(得分:0)

非常感谢你。这完全成功了。

谢谢!!!

{{1}}