【问题标题】:Combining 2 cmdlets for one result/output using pscustomobject使用 pscustomobject 为一个结果/输出组合 2 个 cmdlet
【发布时间】:2020-04-28 04:53:56
【问题描述】:

基本上我在这里想要实现的是一个带有 4 列/列表的输出(在这种情况下,我将导出为文本) Get-MailboxPermission 给了我身份、用户、访问权限的属性,但它没有给我“经理”的属性。我需要确定该特定用户向何处报告。所以,我尝试了 PSCustomObject 并希望我可以将结果放入一个数组中。请参阅下面的脚本

$GETMAILBOXPERM = Get-Content C:\Users\Account\Desktop\MailboxUsers\MAILBOXESUSERS.txt | ForEach-Object {Get-MailboxPermission $_ |
    where {
    ($_.User -notlike ‘*NT AUTHORITY*’) -and
    ($_.User -notlike ‘*S-1-5-21-*’) -and
    ($_.User -notlike ‘*NAMPRD08*’) -and
    ($_.User -notlike ‘*PRDTSB01*’) -and
    ($_.User -notlike ‘*0365Admin*’) -and
    ($_.User -notlike ‘*Discovery Management*’) -and
    ($_.User -notlike ‘*NAMPR08A005*’) -and
    ($_.User -notlike ‘*NT AUTHORITY*’)
    }
    }
    $Results = foreach( $Mailbox in (get-content C:\Users\Account\Desktop\MailboxUsers\MAILBOXESUSERS.txt))
    {
    $Users = Get-User $Mailbox
    if ($Users){
    foreach ($User in $Users){
    [pscustomobject]@{
                    DisplayName       = $User.name
                    Account           = $GETMAILBOXPERM.user
                    Manager           = $User.manager
                    Access            = $GETMAILBOXPERM.accessrights
                             }
                    }
               }
    }
    $Results | Format-List -Property DisplayName, Account, Manager, Access | Out-File C:\Users\Account\Desktop\MailboxUsers\mailbox4.txt

这是文本文件中的输出。我得到了正确的 DisplayName 和 Manager,但 Account 和 Access 似乎没有从文本文件中循环。

显示名称:MAILBOX1

帐户:{user1@domain.ca, user2@domain.ca, user3@domain.ca, user4@domain.ca...}

经理:MANAGER1

访问:{FullAccess、FullAccess、FullAccess、FullAccess...}

显示名称:MAILBOX2

帐户:{user1@domain.ca, user2@domain.ca, user3@domain.ca, user4@domain.ca...}

经理:MANAGER2

访问:{FullAccess、FullAccess、FullAccess、FullAccess...}

【问题讨论】:

    标签: powershell foreach pscustomobject


    【解决方案1】:

    用户管理器属性通常位于 ADDS,而不是 Exchange。然而,该文本文件似乎是您从 ADDS 动态获取此文件的位置。

    您为什么使用格式列表? 当列数超过 5 时,PowerShell 将自动格式化为列表。

    这是未经测试的,因为我没有可以尝试的环境,而是重构了您在这里的内容。试一试。

    $GetMailboxPerm = Get-Content -Path 'C:\Users\Account\Desktop\MailboxUsers\MAILBOXESUSERS.txt' | 
    ForEach-Object {Get-MailboxPermission $PSitem |
    where {
            ($PSitem.User -notlike ‘*NT AUTHORITY*|
            *S-1-5-21-*|
            *NAMPRD08*|
            *PRDTSB01*|*0365Admin*|
            *Discovery Management*|
            *NAMPR08A005*|
            *NT AUTHORITY*’)
        }
    }
    
    foreach( $Mailbox in (Get-Content -Path 'C:\Users\Account\Desktop\MailboxUsers\MailboxUsers.txt'))
    {
        $Users = Get-User $Mailbox
        if ($Users)
        {
            foreach ($User in $Users)
            {
                [pscustomobject]@{
                    DisplayName       = $User.name
                    Account           = $GetMailboxPerm.user
                    Manager           = $User.manager
                    Access            = $GetMailboxPerm.accessrights
                } | Out-File -FilePath 'C:\Users\Account\Desktop\MailboxUsers\mailbox4.txt' -Append
            }
        }
    }
    

    【讨论】:

    • DisplayName 帐户管理员访问 ----------- ------- ------- ------ MAILBOX1 {user1@domain.ca , user2@domain.ca, user3@domain.ca, user4@domain.ca ...} MANAGER1 {FullAccess, Rea ...“用户”部分是我的问题所在。它只是不断重复用户帐户,而不是当前有权访问 MAILBOX1 的用户
    猜你喜欢
    • 2016-01-10
    • 1970-01-01
    • 2014-07-07
    • 2017-01-31
    • 1970-01-01
    • 1970-01-01
    • 2017-12-22
    • 1970-01-01
    • 2017-12-11
    相关资源
    最近更新 更多