Я создаю сценарий 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
Сохраню ваш код для дальнейшего использования;) Большое спасибо !!!!