propriedades calculadas pelo powershell para múltiplos valores

2

Estou fazendo um script powershell de inventário do Outlook. Desejo recuperar:

  • Conta DisplayName
  • Email da conta
  • Tipo de conta (POP3, IAMP ou Exchange)
  • Modo do Exchange (online, em cache)

Código:

Add-Type -assembly "Microsoft.Office.Interop.Outlook"
$Outlook = New-Object -comobject Outlook.Application
$namespace = $Outlook.GetNameSpace("MAPI")
$namespace.Accounts |
   Select-Object DisplayName, SmtpAddress, UserName, AccountType, ExchangeConnectionMode |
   Sort-Object  -Property SmtpAddress | Format-Table

Isso faz o trabalho, mas seria muito legal se eu pudesse usar as propriedades calculadas para mostrar os valores AccountType e ExchangeConnectionMode como nome amigável personalizado, em vez de valor numérico. Por exemplo:

AccountType
0 = Exchange
1 = IMAP
2 = POP3
Else = numeric value (real value)

ExchangeConnectionMode
700 = Cached
800 = Online
Else = N/A (or whatever similar text, for non exchange accounts)

Eu já usei as propriedades calculadas antes, mas apenas com cálculos matemáticos e valor único (sem vários valores). Eu acho que " foreach " ou " if " será necessário ... Não consigo descobrir como: (

Alguma pista?

    
por Vykthoor 03.01.2018 / 17:14

2 respostas

3

Leia e siga Usando propriedades calculadas e Trabalhando com tabelas Hash .

Usando o % co_de do Outlook Enumeração% e Enumeração OlAccountType , as seguintes snippet de código deve fazer o trabalho:

$AccntTypes = @{ '0' = 'Exchange'; 
                 '1' = 'IMAP';
                 '2' = 'POP3';
                 '3' = 'HTTP'; 
                 '4' = 'EAS';
                 '5' = 'unknown'}
$ExchConnModes = @{'0' = 'Exchange'; 
                   '800' = 'Online';
                   '700' = 'CachedConnectedFull';
                   '600' = 'CachedConnectedDrizzle'; 
  # (incomplete; please update from 'OlExchangeConnectionMode' Enumeration)
                    }

Add-Type -assembly "Microsoft.Office.Interop.Outlook"
$Outlook = New-Object -comobject Outlook.Application
$namespace = $Outlook.GetNameSpace("MAPI")
$namespace.Accounts |
   Select-Object DisplayName, SmtpAddress, UserName, 
    @{Name="AccountType";
      Expression={$AccntTypes[[string]$_.AccountType]}} , 
    @{Name="ExchangeConnectionMode";
      Expression={$ExchConnModes[[string]$_.ExchangeConnectionMode]}} |
   Sort-Object  -Property SmtpAddress | Format-Table
    
por 04.01.2018 / 02:09
0

Isso é ótimo!

Por fim, resolvi usar o "switch" e as informações fornecidas por você.

Add-Type -assembly "Microsoft.Office.Interop.Outlook"
$Outlook = New-Object -comobject Outlook.Application
$namespace = $Outlook.GetNameSpace("MAPI")
$namespace.Accounts | Select-Object DisplayName, SmtpAddress, UserName, @{name='AccountType(txt)';expression={
switch ($_.AccountType)
 {
    0 {"Exchange"}
    1 {"IMAP"}
    2 {"POP3"}
    3 {"HTTP"}
    4 {"EAS (Exchange ActiveSync) on mobile devices"}
    5 {"Unknown"}
 }
 }}, @{name='ExchangeConnectionMode(txt)';expression={
switch ($_.ExchangeConnectionMode)
 {
    0 {"N/A"}
    100 {"Offline (Online mode - Work offline selected)"}
    200 {"CachedOffline (Cache mode - Work offline selected)"}
    300 {"Disconnected (Lost Exchange connection)"}
    400 {"CachedDisconnected (Cache mode - Lost Exchange connection)"}
    500 {"CachedConnectedHeaders (Cache mode - Only headers are     downloaded)"}
    600 {"CachedConnectedDrizzle (Cache mode - First headers then full items are downloaded)"}
    700 {"CachedConnectedFull (Cached mode - Full items are downloaded)"}
    800 {"Online"}
 }
 }} | Sort-Object -Property SmtpAddress | Format-Table 

Salvarei seu código para uso futuro;) Muito obrigado !!!!

    
por 04.01.2018 / 14:12

Tags