Назад | Перейти на главную страницу

вычисляемые свойства powershell для нескольких значений

Я создаю сценарий PowerShell для инвентаризации Outlook. Я хочу получить:

Код:

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

Это выполнит свою работу, но было бы здорово, если бы я мог использовать вычисляемые свойства для отображения AccountType и ExchangeConnectionMode значения как настраиваемое понятное имя, а не числовое значение. Например:

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)

Я уже использовал вычисляемые свойства раньше, но только с математическими вычислениями и одним значением (без нескольких значений). Я думаю "foreach" или "if"понадобится ... Не могу понять как :(

Есть подсказка?

Читай и следи Использование вычисленных свойств и Работа с хеш-таблицами.

С помощью Outlookс OlExchangeConnectionMode Перечисление и OlAccountType - перечисление, следующий фрагмент кода должен выполнить свою работу:

$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

Это отлично!

Наконец, я решил использовать "переключатель" и предоставленную вами полную информацию.

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 

Сохраню ваш код для дальнейшего использования;) Большое спасибо !!!!