Powershell:获取邮箱权限-仅来自具有给定名称的Aduser+;姓

Powershell:获取邮箱权限-仅来自具有给定名称的Aduser+;姓,powershell,csv,exchange-server,Powershell,Csv,Exchange Server,我需要制作一个带有邮箱名称(mb标识)、用户、访问权限和拒绝的CSV文件。但我只想为那些有吉文名和姓氏而不仅仅是姓氏的成年人说这句话 我想到了这样的事情: $File_Path = $args[0] $File_Path = ((Get-Item -Path ".\" -Verbose).FullName) + "\" + $File_Path $Utf8NoBomEncoding = New-Object System.Text.UTF8Encoding($False) [System.IO

我需要制作一个带有邮箱名称(mb标识)、用户、访问权限和拒绝的CSV文件。但我只想为那些有吉文名和姓氏而不仅仅是姓氏的成年人说这句话

我想到了这样的事情:

$File_Path = $args[0]
$File_Path = ((Get-Item -Path ".\" -Verbose).FullName) + "\" + $File_Path

$Utf8NoBomEncoding = New-Object System.Text.UTF8Encoding($False)
[System.IO.File]::WriteAllLines($File_Path, "Mailbox;RightHolder;Rights;Deny", $Utf8NoBomEncoding)

$Mailboxes = Get-Mailbox -ResultSize Unlimited

Foreach ($Mailbox in $Mailboxes) {
    $mbPermissions = get-mailboxpermission $Mailbox
    $str_DN = $Mailbox.DistinguishedName
    $ad_obj = [ADSI]"GC://$str_DN"

    Foreach ($mbPermission in $mbPermissions) {
        If ($mbPermission.IsInherited -eq $False -and $mbPermission.User -notlike "NT-AUTORITÄT\SELBST") {
            [System.IO.File]::AppendAllText($File_Path, "$($mbPermission.Identity);$($mbPermission.User);$($mbPermission.AccessRights);$($mbPermission.Deny)`r", $Utf8NoBomEncoding)
        }
    }
    $ADPermissions = get-ADPermission $Mailbox.Identity

    Foreach ($ADPermission in $ADPermissions) {
         If ($ADPermission.ExtendedRights -like "Send-As" -and $ADPermission.User -notlike "NT-AUTORITÄT\SELBST" -and $ADPermission.Deny -eq $false)    {
             [System.IO.File]::AppendAllText($File_Path, "$($ADPermission.Identity);$($ADPermission.User);$($ADPermission.ExtendedRights);$($ADPermission.Deny)`r", $Utf8NoBomEncoding)
         }
    }
}
这对于创建包含我所需的所有凭据的csv文件非常有效,但它不会从没有givenname的用户中排除邮箱。我有点困在这里了

谢谢你的帮助

编辑: 解决了!只需放置以下行,而不是$Mailboxes部分:

$Mailboxes = get-mailbox -ResultSize Unlimited | select -ExpandProperty samaccountname
$Filter = foreach ($Obj in $Mailboxes) { get-aduser $Obj | select -property givenname,samaccountname }
$NoGivenName = $Filter | where { $_.givenname -ne $null } | select -ExpandProperty samaccountname

$BoxesFiltered=foreach($NoGivenName中的框){get mailbox$Box}

您可以尝试以下方法吗,它可能需要稍长的时间,因为它必须使用get ADUser进行过滤以重新生成列表

Import-Module ActiveDirectory
$File_Path = $args[0]
$File_Path = ((Get-Item -Path ".\" -Verbose).FullName) + "\" + $File_Path

$Utf8NoBomEncoding = New-Object System.Text.UTF8Encoding($False)
[System.IO.File]::WriteAllLines($File_Path, "Mailbox;RightHolder;Rights;Deny", $Utf8NoBomEncoding)

$Mailboxes = Get-Mailbox -ResultSize Unlimited

$Mailboxes = Foreach ($Mailbox in $Mailbox){ (get-aduser $mailbox | where { ([string]::IsNullOrEmpty($_.givenname) -eq $false) }).samaccountname }

Foreach ($Mailbox in $Mailboxes)
{
    $mbPermissions = get-mailboxpermission $Mailbox
    $str_DN = $Mailbox.DistinguishedName
    $ad_obj = [ADSI]"GC://$str_DN"

    Foreach ($mbPermission in $mbPermissions)
    {
        If ($mbPermission.IsInherited -eq $False -and $mbPermission.User -notlike "NT-AUTORITÄT\SELBST")
        {
            [System.IO.File]::AppendAllText($File_Path, "$($mbPermission.Identity);$($mbPermission.User);$($mbPermission.AccessRights);$($mbPermission.Deny)`r", $Utf8NoBomEncoding)
        }
    }
    $ADPermissions = get-ADPermission $Mailbox.Identity

    Foreach ($ADPermission in $ADPermissions)
    {
        If ($ADPermission.ExtendedRights -like "Send-As" -and $ADPermission.User -notlike "NT-AUTORITÄT\SELBST" -and $ADPermission.Deny -eq $false)
        {
            [System.IO.File]::AppendAllText($File_Path, "$($ADPermission.Identity);$($ADPermission.User);$($ADPermission.ExtendedRights);$($ADPermission.Deny)`r", $Utf8NoBomEncoding)
        }
    }
}