PowerShell, Piping i Exchange Online do zarządzania skrzynkami pocztowymi

Polecenia cmdlet do potoku

Współpracując z PowerShellem mamy wiele cmdletów, które mogą wykonywać zadania takie jak zapytania, zmiany konfiguracji i nie tylko. Pojedyncze polecenia cmdlet same w sobie są przydatne, ale możliwość przesyłania informacji z jednego polecenia cmdlet do drugiego jest niezwykle przydatną funkcją PowerShell. PowerShell używa koncepcji zwanej potokowaniem, aby połączyć co najmniej dwa polecenia cmdlet w celu wykonania spójnego zadania. Znak potoku „|” oddziela polecenia cmdlet.

Podczas tworzenia potoku między poleceniami cmdlet informacje są przekazywane z polecenia cmdlet po lewej stronie do polecenia cmdlet po prawej stronie. Należy pamiętać, że gdy informacje przechodzą od lewej do prawej, PowerShell przechowuje dane jako obiekty do przetworzenia przez następne polecenie cmdlet, a nie jako zwykły tekst. Korzystanie z obiektów oznacza, że ​​program PowerShell ma maksymalną elastyczność, gdy następne polecenie cmdlet w potoku przetwarza otrzymane dane.

Praktyczne użycie

Osoby korzystające z programu PowerShell po raz pierwszy często używają pojedynczych poleceń cmdlet do tworzenia jednowierszowych informacji, takich jak Get-EXOMailbox, w celu wyświetlenia skrzynek pocztowych Exchange Online lub zmiany ustawień za pomocą Set-EXOMailbox. Użycie potoku między tymi poleceniami cmdlet rozszerza to, co możemy zrobić. Chociaż nie istnieje limit liczby poleceń cmdlet w potoku, należy uważać, aby nie uczynić go zbyt skomplikowanym, ponieważ może to prowadzić do niezamierzonych konsekwencji.

Poniższe przykłady pokazują, jak używać potoku na różne sposoby, aby wyświetlić listę skrzynek pocztowych programu Exchange Online, które mają włączone archiwizowanie:

Get-EXOMmailbox -PropertySets Minimum,Archive | Gdzie ArchiveName -ne $Null

Get-EXOMmailbox -PropertySets Minimum,Archive | Gdzie ArchiveName -ne $Null

Ten sam przykład, ale inny potok jest używany do dodania sortowania według właściwości DisplayName:

Get-EXOMmailbox -PropertySets Minimum,Archive | Gdzie ArchiveName -ne $Null | Wyświetlana nazwa obiektu sortowania

Get-EXOMmailbox -PropertySets Minimum,Archive | Gdzie ArchiveName -ne $Null | Wyświetlana nazwa obiektu sortowania

Biorąc poprzedni przykład i dodając dodatkowe potoki, aby dostosować formatowanie danych wyjściowych:

Get-EXOMmailbox -PropertySets Minimum,Archive | Gdzie ArchiveName -ne $Null | Wyświetlana nazwa obiektu sortowania | ft -Auto

Get-EXOMmailbox -PropertySets Minimum,Archive | Gdzie ArchiveName -ne $Null | Wyświetlana nazwa obiektu sortowania | ft -Auto

Istnieje kolejność operacji związanych z używaniem poleceń cmdlet do prawidłowego przetwarzania informacji. Na przykład polecenia cmdlet formatujące (Ft, Fl , Fw) należy dodać na końcu potoku. Jeśli nie, PowerShell generuje błąd:

„out-lineoutput : obiekt typu „Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData” jest nieprawidłowy lub w niewłaściwej kolejności”.

„out-lineoutput : obiekt typu „Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData” jest nieprawidłowy lub w niewłaściwej kolejności”.

NIE spróbuj sformatować wyjście w środku potoku:

Get-EXOMmailbox -PropertySets Minimum,Retention | Wyświetlana nazwa Ft, retencja* | Wyświetlana nazwa obiektu sortowania

Get-EXOMmailbox -PropertySets Minimum,Retention | Wyświetlana nazwa Ft, retencja* | Wyświetlana nazwa obiektu sortowania

ROBIĆ to zamiast tego (formatowanie na końcu):

Get-EXOMmailbox -PropertySets Minimum,Retention | Wyświetlana nazwa obiektu sortowania | Wyświetlana nazwa Ft, retencja*

Get-EXOMmailbox -PropertySets Minimum,Retention | Wyświetlana nazwa obiektu sortowania | Wyświetlana nazwa Ft, retencja*

Zgodne polecenia cmdlet

Nie wszystkie polecenia cmdlet programu PowerShell mogą przesyłać informacje z jednego polecenia cmdlet do drugiego, zwykle dlatego, że obiekty generowane przez jedno polecenie cmdlet nie mogą być przetwarzane przez następne w potoku. Na przykład nie możemy potokować obiektów z polecenia cmdlet Get-EXOMailbox do polecenia cmdlet Get-Remote Domain, ponieważ drugie polecenie cmdlet będzie próbowało przetworzyć tożsamości skrzynek pocztowych jako domeny zdalne i dlatego zakończy się niepowodzeniem.

Z drugiej strony polecenia cmdlet, które przetwarzają podobne obiekty, takie jak Get-EXOMailbox i Get-MailboxSpellingConfiguration, mogą przesyłać dane między nimi, ponieważ drugie polecenie cmdlet może akceptować tożsamości skrzynek pocztowych do przetworzenia.

Zrozumienie, jakie polecenia cmdlet współpracują ze sobą, wymaga pewnego doświadczenia. Logicznie rzecz biorąc, musimy zrozumieć, co cmdlet akceptuje jako dane wejściowe, zanim prześlemy informacje z innego polecenia cmdlet.

Zmienna $_ potoku

Piping obsługuje specjalną zmienną $_ do identyfikacji bieżącego obiektu przetwarzanego przez PowerShell. Możemy użyć obiektu i pracować z jego właściwościami, dodając ‘.’ i żądaną właściwość, taką jak DisplayName lub Identity.

Typowym zastosowaniem zmiennej $_ jest odwoływanie się do właściwości obiektu, którego dotyczy zapytanie, i filtrowanie wszystkich obiektów pasujących do tej właściwości. Można to zrobić zarówno w jednym wierszu, jak i w pętli Foreach:

W tym przykładzie szukamy skrzynek pocztowych zaktualizowanych w ciągu ostatnich 14 dni:

$Date = (Get-Date).AddDays(-14) Get-EXOMailbox -InactiveMailboxOnly | Gdzie {$_.WhenChanged -lt $Date} | Ft

$Data = (Get-Date).AddDays(-14)

Get-EXOMmailbox -InactiveMailboxOnly | Gdzie {$_.WhenChanged -lt $Date} | Ft

Możemy również użyć zmiennej $_ do wykonywania innych typowych zadań. W tym przykładzie szukamy skrzynek pocztowych znajdujących się w Stanach Zjednoczonych, które mają przypisaną politykę przechowywania:

Get-EXOmailbox -PropertySets All | Gdzie {$_.RetentionPolicy -ne $Null} | Gdzie {$_.UsageLocation -eq ‘Stany Zjednoczone’} | Wyświetlana nazwa Ft, podstawowy adres SMTP, zasady przechowywania — automatycznie

Get-EXOmailbox -PropertySets All | Gdzie {$_.RetentionPolicy -ne $Null} | Gdzie {$_.UsageLocation -eq ‘Stany Zjednoczone’} | Wyświetlana nazwa Ft, podstawowy adres SMTP, zasady przechowywania — automatycznie

Lista wszystkich nieaktywnych skrzynek pocztowych ze Stanów Zjednoczonych posortowana według daty ostatniej zmiany i sformatowanego wyniku:

Get-EXOMmailbox -InactiveMailboxOnly -PropertySets All | Gdzie {$_.UsageLocation -eq ‘Stany Zjednoczone’} | Sortuj obiekt po zmianie | Ft DisplayName, WhenCreated, WhenChanged

Get-EXOMmailbox -InactiveMailboxOnly -PropertySets All | Gdzie {$_.UsageLocation -eq ‘Stany Zjednoczone’} | Sortuj obiekt po zmianie | Ft DisplayName, WhenCreated, WhenChanged

Ten przykład przedstawia elementy do odzyskania przechowywane we wszystkich skrzynkach pocztowych znajdujących się w Stanach Zjednoczonych. Foreach-Object służy do konwersji identyfikatora GUID skrzynki pocztowej na nazwę wyświetlaną w celu uzyskania lepszej czytelności danych wyjściowych:

Get-EXOMmailbox -Właściwości UsageLocation | Gdzie {$_.UsageLocation -eq ‘Stany Zjednoczone’} | Get-ExOMmailboxFolderStatistics -FolderScope RecoverableItems | Select-Object ContentMailboxGuid, FolderAndSubfolderSize, ItemsInFolderAndSubfolders | ForEach-Object { $Skrzynka pocztowa = $_.ContentMailboxGuid; $Name = (Get-ExOMailbox $Mailbox).DisplayName;$_.ContentMailboxGuid = $Name ; Zwróć $_}

Get-EXOMmailbox -Właściwości UsageLocation | Gdzie {$_.UsageLocation -eq ‘Stany Zjednoczone’} | Get-ExOMmailboxFolderStatistics -FolderScope RecoverableItems | Select-Object ContentMailboxGuid, FolderAndSubfolderSize, ItemsInFolderAndSubfolders | ForEach-Object { $Skrzynka pocztowa = $_.ContentMailboxGuid; $Name = (Get-ExOMailbox $Mailbox).DisplayName;$_.ContentMailboxGuid = $Name ; Zwróć $_}

Przykłady ze świata rzeczywistego

Pętle foreach to kolejny sposób wykorzystania zmiennej specjalnej $_ do manipulowania danymi.

Podczas zbierania danych skrzynek pocztowych jednym z typowych zadań jest przejrzenie adresów e-mail, aby upewnić się, że dane programu Exchange Online są poprawne. Na przykład być może wystąpiły konflikty obiektów lub aliasy były nieprawidłowe, gdy obiekt użytkownika został zsynchronizowany z usługą Azure AD, a adres e-mail onmicrosoft.com użytkownika końcowego został utworzony niepoprawnie lub niezgodnie z oczekiwaniami. Wyświetlenie właściwości EmailAddresses ujawnia adresy e-mail serwera proxy z prefiksami „SIP:” lub „SMTP:” lub „smtp:”. Możemy użyć $_, aby usunąć pretekst do ujawnienia samego adresu e-mail:

Get-ExOSkrzynka pocztowa | Wybierz wyświetlaną nazwę obiektu, szczegóły typu odbiorcy, adresy e-mail | Foreach-Object { $EmailAddresses = $_.EmailAddresses;$TrimmedEmails = @();Foreach ($EmailAddress w $EmailAddresses) { $Email = $EmailAddress.split(‘:’)[1]; $TrimmedEmails += $Email}; $_.Adresy e-mail = $Przycięte e-maile;Zwróć $_}

Get-ExOSkrzynka pocztowa | Wybierz wyświetlaną nazwę obiektu, szczegóły typu odbiorcy, adresy e-mail | Foreach-Object { $EmailAddresses = $_.EmailAddresses;$TrimmedEmails = @();Foreach ($EmailAddress w $EmailAddresses) { $Email = $EmailAddress.split(‘:’)[1]; $TrimmedEmails += $Email}; $_.Adresy e-mail = $Przycięte e-maile;Zwróć $_}

Z pewnymi zmianami możemy użyć kodu do tworzenia list dla adresów proxy SMTP, SIP i SharePoint Online:

Tylko SMTP

Get-ExOSkrzynka pocztowa | Select-Object DisplayName, RecipientTypeDetails,EmailAddresses | Foreach-Object { $EmailAddresses = $_.EmailAddresses;$TrimmedEmails = @();Foreach ($EmailAddress w $EmailAddresses) { if ($EmailAddress -jak ‘smtp*’) { $Email = $EmailAddress.split(‘: ‘)[1]; $TrimmedEmails += $Email}}; $_.Adresy e-mail = $Przycięte e-maile;Zwróć $_}

Get-ExOSkrzynka pocztowa | Select-Object DisplayName, RecipientTypeDetails,EmailAddresses | Foreach-Object { $EmailAddresses = $_.EmailAddresses;$TrimmedEmails = @();Foreach ($EmailAddress w $EmailAddresses) { if ($EmailAddress -jak ‘smtp*’) { $Email = $EmailAddress.split(‘: ‘)[1]; $TrimmedEmails += $Email}}; $_.Adresy e-mail = $Przycięte e-maile;Zwróć $_}

Tylko SIP

Adresy SIP są używane do komunikacji Teams, w tym telefonów (Rysunek 2:)

Get-ExOSkrzynka pocztowa | Select-Object DisplayName, RecipientTypeDetails,EmailAddresses | Foreach-Object { $EmailAddresses = $_.EmailAddresses;$TrimmedEmails = @();Foreach ($EmailAddress w $EmailAddresses) { if ($EmailAddress – jak ‘sip*’) { $Email = $EmailAddress.split(‘: ‘)[1]; $TrimmedEmails += $Email}}; $_.Adresy e-mail = $Przycięte e-maile;Zwróć $_}

Get-ExOSkrzynka pocztowa | Select-Object DisplayName, RecipientTypeDetails,EmailAddresses | Foreach-Object { $EmailAddresses = $_.EmailAddresses;$TrimmedEmails = @();Foreach ($EmailAddress w $EmailAddresses) { if ($EmailAddress – jak ‘sip*’) { $Email = $EmailAddress.split(‘: ‘)[1]; $TrimmedEmails += $Email}}; $_.Adresy e-mail = $Przycięte e-maile;Zwróć $_}

PowerShell, Piping i Exchange Online do zarządzania skrzynkami pocztowymi

Na samym końcu formatowania danych zwróć uwagę na użycie „Return $_”, które pozwala na dosłowny powrót przeformatowanych danych z powrotem do obiektu w potoku. W naszych przykładach zwracamy tylko sformatowane adresy proxy zamiast wartości przechowywanych we właściwości EmailAddresses obiektu skrzynki pocztowej.

Eksportuj-CSV

Potoki programu PowerShell mogą formatować dane wyjściowe do pliku, który ma być używany do celów raportowania. Na przykład możemy utworzyć listę wszystkich nieaktywnych skrzynek pocztowych ze Stanów Zjednoczonych posortowaną według daty ostatniej zmiany i sformatowanego wyniku:

Get-EXOMmailbox -InactiveMailboxOnly -PropertySets All | Gdzie UsageLocation -eq „Stany Zjednoczone” | Sortuj obiekt po zmianie | Wybierz wyświetlaną nazwę obiektu, po utworzeniu, po zmianie | Export-CSV c:\reports\InactiveUSMailboxes.csv -NoType

Get-EXOMmailbox -InactiveMailboxOnly -PropertySets All | Gdzie UsageLocation -eq „Stany Zjednoczone” | Sortuj obiekt po zmianie | Wybierz wyświetlaną nazwę obiektu, po utworzeniu, po zmianie | Export-CSV c:\reports\InactiveUSMailboxes.csv -NoType

Widok poza siatką

Możemy również przesłać dane wyjściowe do cmdletu Out-GridView, aby wyświetlić dane w wyskakującym okienku:

Get-EXOSkrzynka pocztowa | Widok poza siatką

Get-EXOSkrzynka pocztowa | Widok poza siatką

PowerShell, Piping i Exchange Online do zarządzania skrzynkami pocztowymi

Przydatną funkcją Out-GridView jest użycie przełącznika PassThru, który umożliwia operatorowi wybieranie wartości i przekazywanie tylko tych z powrotem do programu PowerShell w celu dalszego przetwarzania przez następne polecenie cmdlet w potoku.

Get-EXOskrzynka pocztowa | Out-GridView – PassThru | Get-EXOCasMailbox | Nazwa wyświetlana Ft,*Włączone

Get-EXOskrzynka pocztowa | Out-GridView – PassThru | Get-EXOCasMailbox | Nazwa wyświetlana Ft,*Włączone

PowerShell, Piping i Exchange Online do zarządzania skrzynkami pocztowymi

Kliknięcie OK w wyskakującym okienku powoduje przekazanie wybranych skrzynek pocztowych do przetworzenia przez Get-EXOCasMailbox w celu wyświetlenia właściwości, w których skrzynka pocztowa może się połączyć:

PowerShell, Piping i Exchange Online do zarządzania skrzynkami pocztowymi
PowerShell, Piping i Exchange Online do zarządzania skrzynkami pocztowymi

Wniosek

Potok programu PowerShell łączy wyjątkowo przydatne polecenia cmdlet w celu przetwarzania danych. Używany w inteligentny sposób potok jest doskonałym sposobem przetwarzania danych za pomocą szeregu kroków w celu zautomatyzowania typowych operacji administracyjnych. Opanowanie potoku lub przynajmniej zaznajomienie się z poleceniami cmdlet do potoku to niezbędna umiejętność dla każdego, kto używa programu PowerShell do zarządzania dzierżawami platformy Microsoft 365.

0 Shares:
You May Also Like