none
Powershell Scripting try catch mit switch in Variable schreiben RRS feed

  • Frage

  • Hallo zusammen, 

    ich habe gestern ein Skript gefunden, welches Gruppen ausliest und diese dann je nach Fehler kategorisiert. Die Schleife (foreach) läuft ohne Probleme durch ich bekomme auch das gewünschte Ergebnis, alles gut. Wie bekomme ich nun das Ergebnis in eine Variable, möglichst noch gefiltert, ist aber keine Voraussetzung. 

    Hier das Skript: 

    $o365groups = Get-UnifiedGroup
    foreach ($o365group in $o365groups) {
      
             
      try {
        
        $teamschannels = Get-TeamChannel -GroupId $o365group.ExternalDirectoryObjectId 
        [pscustomobject]@{GroupId = $o365group.ExternalDirectoryObjectId; GroupName = $o365group.DisplayName; TeamsEnabled = $true} 
       
        
      } catch {
        $ErrorCode = $_.Exception.ErrorCode
        switch ($ErrorCode) {
          "404" {
            [pscustomobject]@{GroupId = $o365group.ExternalDirectoryObjectId; GroupName = $o365group.DisplayName; TeamsEnabled = $false}
            break;
          }
          "403" {
            [pscustomobject]@{GroupId = $o365group.ExternalDirectoryObjectId; GroupName = $o365group.DisplayName; TeamsEnabled = $true} 
            break;
          }
          default {
            Write-Error ("Unknown ErrorCode trying to 'Get-TeamChannel -GroupId {0}' :: {1}" -f $o365group, $ErrorCode)
          }
           
        }
      }
        
    } 

    Das Skript liest mir alle Teams in O365 aus. Wie bekomme ich das CustomObject in eine Variable? Ich möchte dies nämlich weiterverarbeiten. 

    Vielen Dank für eure Hilfe.


    Viele Gruesse /best wishes Alexander (blog.it-koehler.com)

    Montag, 25. Juni 2018 09:08

Antworten

  • Der Output ist folgendermaßen: 

    Nun möchte ich den gesamten Output in einem Objekt stehen haben. Frage nun etwas verständlicher? 

    Moin,

    ich vermute jetzt, Du meinst, den ganzen Output in eine Variable bekommen zu wollen. Das wäre dann ein Array von Objekten und ginge so:

    $o365groups = Get-UnifiedGroup
    $output = @()
    foreach ($o365group in $o365groups) {
      try {
        $teamschannels = Get-TeamChannel -GroupId $o365group.ExternalDirectoryObjectId 
        $output += [pscustomobject]@{GroupId = $o365group.ExternalDirectoryObjectId; GroupName = $o365group.DisplayName; TeamsEnabled = $true} 
      } catch {
        $ErrorCode = $_.Exception.ErrorCode
        switch ($ErrorCode) {
          "404" {
            $output += [pscustomobject]@{GroupId = $o365group.ExternalDirectoryObjectId; GroupName = $o365group.DisplayName; TeamsEnabled = $false}
            break;
          }
          "403" {
            $output += [pscustomobject]@{GroupId = $o365group.ExternalDirectoryObjectId; GroupName = $o365group.DisplayName; TeamsEnabled = $true} 
            break;
          }
          default {
            Write-Error ("Unknown ErrorCode trying to 'Get-TeamChannel -GroupId {0}' :: {1}" -f $o365group, $ErrorCode)
          }
        }
      }
    } 
    Am Ende hat $output Deine ganzen Objekte als Array.


    Evgenij Smirnov

    I work @ msg services ag, Berlin -> http://www.msg-services.de
    I blog (in German) @ http://it-pro-berlin.de
    my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
    Exchange User Group, Berlin -> https://exusg.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com


    In theory, there is no difference between theory and practice. In practice, there is.

    • Als Antwort markiert AKoehler Mittwoch, 4. Juli 2018 18:44
    Mittwoch, 27. Juni 2018 19:52

Alle Antworten

  • Die Frage verstehe ich nun nicht:

    In dem du es in eine Variable überträgst?

    Deine Verarbeitung muss doch innerhalb des Try's stattfinden, da im Catchfall eine Weiterbearbeitung ja wohl wenig sinnvoll erscheint.

    Montag, 25. Juni 2018 09:47
  • Hallo, 

    naja da ich das nicht so richtig verstehe, könntest du das genauer erklären? Wenn ich das Skript ausführe bekomme ich alle Gruppen teamsenabled = true auf der PowerShell ausgegeben (Tabelle) 

    Diese Objekte (das sind für jede foreach Schleife ein eigenes) möchte zu einer Variablen / Objekt zusammenfassen und dann weiterverarbeiten? Ist das mit Try Catch überhaupt möglich? 

    Der Output ist folgendermaßen: 

    Nun möchte ich den gesamten Output in einem Objekt stehen haben. Frage nun etwas verständlicher? 

    Vielen Dank für eure Hilfe. 


    Viele Gruesse /best wishes Alexander (blog.it-koehler.com)

    Mittwoch, 27. Juni 2018 06:47
  • Hi,

    du solltest das über Zuweisung der Objekteigenschaften gut hinbekommen. Einer String-Variable Werte hinzuzufügen, ginge beispielhaft so:

    [string]$strVar = "$($o365group.DisplayName)"

    Gruß
    Matthias

    Mittwoch, 27. Juni 2018 18:40
  • Einer String-Variable Werte hinzuzufügen, ginge beispielhaft so:

    [string]$strVar = "$($o365group.DisplayName)"
    ...wobei man hier den Variablentyp nicht deklarieren muss, denn der String-Typ ergibt sich bereits aus den Anführungszeichen.

    Evgenij Smirnov

    I work @ msg services ag, Berlin -> http://www.msg-services.de
    I blog (in German) @ http://it-pro-berlin.de
    my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
    Exchange User Group, Berlin -> https://exusg.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com


    In theory, there is no difference between theory and practice. In practice, there is.

    Mittwoch, 27. Juni 2018 19:48
  • Der Output ist folgendermaßen: 

    Nun möchte ich den gesamten Output in einem Objekt stehen haben. Frage nun etwas verständlicher? 

    Moin,

    ich vermute jetzt, Du meinst, den ganzen Output in eine Variable bekommen zu wollen. Das wäre dann ein Array von Objekten und ginge so:

    $o365groups = Get-UnifiedGroup
    $output = @()
    foreach ($o365group in $o365groups) {
      try {
        $teamschannels = Get-TeamChannel -GroupId $o365group.ExternalDirectoryObjectId 
        $output += [pscustomobject]@{GroupId = $o365group.ExternalDirectoryObjectId; GroupName = $o365group.DisplayName; TeamsEnabled = $true} 
      } catch {
        $ErrorCode = $_.Exception.ErrorCode
        switch ($ErrorCode) {
          "404" {
            $output += [pscustomobject]@{GroupId = $o365group.ExternalDirectoryObjectId; GroupName = $o365group.DisplayName; TeamsEnabled = $false}
            break;
          }
          "403" {
            $output += [pscustomobject]@{GroupId = $o365group.ExternalDirectoryObjectId; GroupName = $o365group.DisplayName; TeamsEnabled = $true} 
            break;
          }
          default {
            Write-Error ("Unknown ErrorCode trying to 'Get-TeamChannel -GroupId {0}' :: {1}" -f $o365group, $ErrorCode)
          }
        }
      }
    } 
    Am Ende hat $output Deine ganzen Objekte als Array.


    Evgenij Smirnov

    I work @ msg services ag, Berlin -> http://www.msg-services.de
    I blog (in German) @ http://it-pro-berlin.de
    my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
    Exchange User Group, Berlin -> https://exusg.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com


    In theory, there is no difference between theory and practice. In practice, there is.

    • Als Antwort markiert AKoehler Mittwoch, 4. Juli 2018 18:44
    Mittwoch, 27. Juni 2018 19:52