Comandos do Powershell do Exchange 2010?

5
  1. Eu queria saber se alguém sabe o comando do PowerShell para o Exchange 2010 que lista caixas de correio e / ou usuários que uma caixa de correio específica não tem acesso. Temos uma conta do sistema que precisamos conceder acesso total à maioria das caixas de correio de usuários (mas não todas). Gostaríamos de executar um comando a cada mês que nos informará a quais usuários essa conta não tem direitos totais, para que possamos corrigi-la, se necessário, e exportar para um csv.

  2. Eu gostaria de um comando que lista usuários e tenha permissões completas para cada um. Achei isso, mas os resultados que ele retorna não parecem totalmente precisos (quando comparo o csv ao EMC, algumas contas no EMC mostram que três outros usuários têm acesso à caixa de correio, mas o CSV só informa um usuário).

    Get-Mailbox | Get-MailboxPermission | where {$_.user.tostring() -ne “NT AUTHORITY\SELF” -and $_.IsInherited -eq $false} | Select Identity,User,@{Name=’Access Rights’;Expression={[string]::join(‘, ‘, $_.AccessRights)}} | Export-Csv -NoTypeInformation mailboxpermissions.csv
    
por user111503 16.08.2012 / 18:14

2 respostas

2

# 1 - Escrevi este eu mesmo (revisado). Não é um simples one-liner, pois avalia o valor de cada entrada de permissão em cada caixa de correio em alguns loops aninhados. Infelizmente, não consegui descobrir uma maneira de simplificar isso ainda mais (provavelmente devido à minha falta de conhecimento em powershell). Ele basicamente obtém todas as caixas de correio e armazena-as em uma variável, em seguida, obtém as permissões em cada caixa de correio, avaliando cada entrada de permissão para um critério específico (o usuário do sistema com uma entrada FullAccess na caixa de correio). Se esse critério for atendido em qualquer uma das entradas de permissão, ele definirá a variável $ access como "True". Depois de ter passado por todas as entradas de permissão na caixa de correio, é exibida a variável $ access e, se ainda for False, ela adiciona a caixa de correio ao arquivo csv (não é realmente um csv, pois há apenas uma entrada por linha o arquivo).

Import-Module C:\Temp\Exchange.psm1
$csv = "C:\Temp\systemuser.csv"
$user = "<system user>"
$mailboxes = Get-Mailbox *
ForEach ($mailbox in $mailboxes) {
    $access = "False"
    $perms = $mailbox | Get-MailboxPermission
    ForEach ($item in $perms) {
        if ($item.User -like $user -and $item.AccessRights -like "*FullAccess*") {
        $access = "True"        
        }
    }
    if ($access -eq "False") {
        ac $csv "$($mailbox)"
    }
}

# 2 - Escrevi a maioria de mim, mas estava com dificuldades para obter a propriedade AccessRights para uma string, então ela exportaria para o csv, então eu pesquisei no Google e encontrou o mesmo artigo que você encontrou com o script em sua pergunta e funciona bem. Acho que a discrepância entre o que o csv diz e o que a EMC diz é que o script do artigo filtra as permissões herdadas. Eu o modifiquei abaixo para não filtrar as permissões herdadas e incluir a propriedade "IsInherited" na saída para que você possa dizer se é explícita ou não.

Get-MailboxPermission * | ? {$_.user -notlike "NT AUTHORITY\SELF"} | Select Identity ,User,@{Name='Access Rights';Expression={[string]::join(', ', $_.AccessRights)}},IsInherited | Export-csv -NoTypeInformation c:\temp\mailboxpermissions.csv

    
por 16.08.2012 / 22:03
3

Eu testei o comando em meus sistemas e ele está funcionando como você espera.

Embora, se você estiver apenas comparando com o que está vendo no EMC, pode estar esperando o resultado errado. O comando está configurado para mostrar apenas os direitos não herdados. A EMC mostrará a você Inherited e não Inherited (sem especificar qual é qual). O que você pode querer fazer, é executar apenas esta parte do código no Powershell:

Get-Mailbox | Get-MailboxPermission | where {$_.user.tostring() -ne “NT AUTHORITY\SELF” -and $_.IsInherited -eq $false}

E compare isso ao seu CSV resultante.

Como alternativa, você pode executar isso:

Get-Mailbox | Get-MailboxPermission | where {$_.user.tostring() -ne “NT AUTHORITY\SELF”}

O que mostrará os direitos herdados e os não herdados por meio do Powershell e, em seguida, comparará isso com o resultado do CSV.

    
por 16.08.2012 / 21:39