Dienstag, der 03. Dezember 2024 - 17:37 Uhr

Powershell: Wie kombiniere ich zwei Eigenschaften zu einer?

erstellt am: 06.06.2018 | von: DevLink | Kategorie(n): Powershell, Scripting | Keine Kommentare

Aus gegebenem Anlass, hatte ich mal wieder so eine Extrawurst, bei der ich die Ausgabe in einem Skript anpassen musste. Im kurzen geht es darum, dass von Befehlen aus einer foreach-Schleife diverse Eigenschaften existieren, oder eben auch nicht um diese dann miteinander zu kombinieren.

Probieren wir es mal visuell darzustellen. Konkret geht es um Informationen aus der Office365 Cloud. Wir möchten uns die Mitglieder eines Postfachs ausgeben. Allerdings ist das kompliziert, da wir hier speziell nach Attributen filtern und zwar nach Benutzern und nach Benutzern die ein Postfach haben.

Beispiel Freigegebenes Postfach:

Administrator (Benutzer): Hat Vollzugriff
Max Mustermann (Benutzer mit Postfach): Hat Vollzugriff

Über get-user können wir im RecipientType sehen, dass wir einmal "User" und einmal "UserMailbox" haben. Die Funktion in dem Teil, war es einen Benutzer von diesem Postfach über den Alias zu entfernen, den es bei einem User nicht gibt.

Also haben wir einmal get-user und einmal get-mailbox was am Ende dann im Prinzip so aussieht:

DisplayName	Alias		Identity
Administrator administrator Max Mustermann mmustermann

Wir wollen jetzt aber unser Alias und Identity in eine Zeile bringen und um das zu schaffen packen wir das ganze sowieso in eine Variable also:

$user | sort DisplayName | FT @{Expression={$_.DisplayName};Label="Name"},@{Expression={"$($_.Alias)$($_.Identity)"};Label="Alias"} -AutoSize
und sieht dann am Ende so aus:

DisplayName	Alias
Administrator administrator Max Mustermann mmustermann

Der komplette Code selber für diejenigen, denen es langweilig ist sieht folgendermaßen aus:
do{
$mailbox = Read-Host 'Geben Sie den Alias der Mailbox ein'

$identity = get-mailbox -identity $mailbox | select -ExpandProperty UserPrincipalName 
}
until ($?)

$Userlist2 = @(Get-MailboxPermission -identity $mailbox | where {$_.AccessRights -eq "FullAccess" -and $_.User -notlike "EURPR*" -and $_.User -notlike "NT*"})

$user1 = Foreach($Mailbox2 in $Userlist2)
{
	$Objectid = get-msoluser -UserPrincipalName $Mailbox2.User
	$Guid = $Objectid.ObjectID | select -expandproperty GUID
	$type = get-user -identity $Guid
	
	if ($type.RecipientType -eq "User")
	{
		get-user -identity $Guid | select DisplayName, Identity
	}
	elseif ($type.RecipientType -eq "UserMailbox")
	{
		get-mailbox -identity $Mailbox2.User | select DisplayName, Alias
	}
	
}
write-host -foregroundcolor Green "`nFolgende Benutzer sind im Postfach ""$mailbox"" als Mitglied hinterlegt:"

$user1 | sort DisplayName | FT @{Expression={$_.DisplayName};Label="Name"},@{Expression={"$($_.Alias)$($_.Identity)"};Label="Alias"} -AutoSize

Wie gesagt, das Skript geht an dieser Stelle noch weiter, hier haben wir nur eine Prüfung quasi, damit wir niemand unberechtigten aus dem Postfach entfernen.

Das wars. Wir setzen in die Format-Table Expression die Variablen quasi nebeneinander und simulieren damit ein Join oder Merge oder wie auch immer. Probiert es aus, das komplette Skript findet ihr im Artikel Office365: Freigegebene Postfächer mit der Powershell verwalten


Eine kleine Quellenangabe zum Lösungsansatz:
Concatenation of Table Output



, ,

Keine Kommentare


Bis jetzt noch keine Kommentare

Einen Kommentar abgeben

Themen:

55 Artikel in 6 Kategorien:

  • Exchange Server (16)
  • Linux (6)
  • Microsoft Server (7)
  • Scripting (3)
  • Tutorials (10)
  • Windows (13)