Skip to content

Daniels Tagesmeldungen

Kleine IT-Episoden, der Diabetes & das wahre Leben

  • Startseite
  • About me…
    • Lebenslauf
    • Weiterbildung
  • Diabetes melitus
    • Diabetes melitus – Definition/Typen
    • Diabetes melitus – Podcasts
    • Diabetes Typ-2 – Erläuterung
    • Medikament – Forxiga (Dapagliflozin)
    • Medikament – Eylea (Aflibercept)
    • Medikament – Lucentis (Ranibizumab )
    • Medikament – Metformin
  • Disclaimer
  • Toggle search form

Kategorie: Programmierung

Powershell: Auslesen von Gruppen aus Azure-Unternehmensanwendungen

Posted on 13. Oktober 202113. Oktober 2021 By Daniel Lensing Keine Kommentare zu Powershell: Auslesen von Gruppen aus Azure-Unternehmensanwendungen

Im Rahmen einer Aktualisierung mussten die Anwender von mehreren Unternehmensapplikationen ermittelt werden.

Dazu wollte ich allerdings nur den Applikationsnamen definieren und eine entsprechenden CSV-Export erhalten. Bei meiner ersten Analyse fiel mir dann direkt auf, dass bei den betroffenen Zuordnungen nur Gruppen Definiert sind. Entsprechend ist das Skript aktuell nur auf diesen Sachverhalt abgestimmt.

#Definition der Azure-Unternehmensanwendung
$app_name = "Demo App"

#Definition der Exportdatei
$ExportFileCsv = "E:\DemoCompany\Export\AppUsers.csv"

### ----- Beginn Skripting ----- ###

#Verbindung zur AzureAD aufbauen
Connect-AzureAD

#Ermittlung der Applikationsdaten
$sp = Get-AzureADServicePrincipal -Filter "displayName eq '$app_name'"

#Ermittlung der Angebundenen Azure AD-Gruppen
$assignments = Get-AzureADServiceAppRoleAssignment -ObjectId $sp.ObjectId -All $true

#Verarbeitung der eingetragenen Gruppen
$groupMembers = foreach ($group in $assignments){

    #Ermittlung der Daten zur aktuellen Gruppe 
    $AzureADgroup = Get-AzureADGroup -SearchString $group.PrincipalDisplayName
            
    #Definition der ObjectID der aktuellen Gruppe
    $ObjectId = $AzureADgroup.ObjectId
    #Definition des Displaynames der aktuellen Gruppe
    $GroupName = $AzureADgroup.DisplayName

    #Kurze Pause...
    Start-Sleep -Milliseconds 200

    #Ermittlung der Mitglieder der aktuellen Gruppe
    Get-AzureADGroupMember -ObjectId $ObjectId | Select-Object -Property @{Name = 'GroupName'; Expression= {$GroupName}}, DisplayName, UserPrincipalName

}
#Export der ermittelten Daten in das Export-CSV
$groupMembers | Export-Csv -Path $ExportFileCsv -NoTypeInformation -Append -Encoding UTF8 -Delimiter ";"

Eine Erweiterung, so dass neben den Gruppen auch die Benutzer ermittelt werden, ist bereits auf dem ToDo-Zettel und wird eine V2.

Microsoft Azure, Powershell

Powershell: Attribut „LogonWorkstations“ verwalten

Posted on 12. Juli 202111. Juli 2021 By Daniel Lensing Keine Kommentare zu Powershell: Attribut „LogonWorkstations“ verwalten

Manchmal müssen auch selten genutzte Attribute gepflegt werden. In einem Fall aus der Vergangenheit mussten Probleme mit Verbindungen auf verschiedene Systeme analysiert werden. Dabei ist aufgefallen, dass der Wert „LogonWorkstations“ bei dem Anwender gefüllt war.

Daraufhin habe ich mir dieses Skript erstellt, mit dem man einiges mit dem Aufruf anpassen kann:

# LogonsWorkstation.ps1


# Das Skript kann unterschiedliche Modi:
# s = search 
# Es wird der aktuelle Eintrag angezeigt
# a = add 
# Es wird der aktuelle Eintrag hinzugefügt
# Alle weiteren Einträge werden entfernt
# m = modify
# Es wird der aktuelle Eintrag hinzugefügt
# Alle weiteren Einträge werden übernommen.
# r = replace
# Alle Einträge werden gelöscht
$mode=$args[0]

# Benutzer der angepasst werden soll
$User = $args[1]

# Bezeichnung des neuen Systems
$Workstation = $args[2]

# Gesamter Befehlssatz:
# .\logonWorkstation.ps1 m test01 WKSWin110001
# Dem User test01 wird das System WKSWin110001 zu den vorhandenen Systemen hinzugefügt.
# Sollte kein Eintrag vorhanden sein, wir dieser aks erster gesetzt.


# Ermittlung des aktuellen Wertes
$LogonWorkstations = Get-AdUser -Identity $User -Properties LogonWorkstations | select -ExpandProperty LogonWorkstations


if ($args[0] = "s")
{
$LogonWorkstations
}

if ($args[0] = "a")
{
Set-ADUser -Identity $User -LogonWorkstations "$Workstation"
}


if ($args[0] = "m")
{
Set-ADUser -Identity $User -LogonWorkstations "$LogonWorkstations,$Workstation"
}


if ($args[0] = "r")
{
Set-ADUser -Identity $User -LogonWorkstations $null
}

Hiermit können die üblichen Szenarien einfach umgesetzt werden.

Powershell

Powershell: Zeitelemente berechnen

Posted on 10. Juli 202110. Juli 2021 By Daniel Lensing Keine Kommentare zu Powershell: Zeitelemente berechnen

Ein Tick entspricht 100 Nanosekunden. Die Ticks werden im Normalfall ab dem 01.01.0000 00:00:00 berechnet.

$tick=636763462457113590
$tickcalc=[datetime]($tick)
$tickcalc.tostring("g")

Im Active Directory werden Werte im FileTime-Format gespeichert. Bei diesem Format werden ebenfalls die Ticks verwendet. Das Startdatum ist allerdings der 01.01.1601.

$tick=131296540203012408
$tickcalc=[datetime]::FromFileTime($tick)
$tickcalc.tostring("g")

Eine weitere Art für Ticks nutzt für Unix. Bei diesem Zeitstempel gilt der 01.01.1970 als Startdatum:

$tick=1537615930
$Date = (Get-Date 01.01.1970).AddSeconds($tick)
$Date.tostring("g")

Powershell

Port-Test ohne Ping per Powershell

Posted on 18. März 202117. März 2021 By Daniel Lensing Keine Kommentare zu Port-Test ohne Ping per Powershell

Viele kennen das Cmdlet Test-Connection oder Test-NetConnection um Verbindungen zu testen. Dort kann per -TcpPort bzw. -Port kann auch ein Port geprüft werden. Allerdings wird in beiden Varianten ein Ping vorausgesandt.

Es kann aber sein, dass die „Internet Control Message Protocol (ICMP) Echo Requests“ zu denen auch Pings gehören, in Firewalls gesperrt ist. Trotzdem möchte man aber vielleicht den direkten Port testen.

Dabei hilft das unten stehende Skript:

$destination = "192.168.2.1"
$port ="443"

$connection = new-object Net.Sockets.TcpClient
try{
    $connection.Connect($destination, $port)
} catch {}
 
if($connection.Connected)
    {
        $connection.Close()
        $object = [pscustomobject] @{
                        IP = $destination
                        TCPPort = $port
                        Result = $True }
        Write-Output $object
    }
    else
    {
        $object = [pscustomobject] @{
                        IP = $destination
                        TCPPort = $port
                        Result = $False }
        Write-Output $object

    }
    Write-Host $msg
Powershell, Windows 10, Windows Server

Powershell: Zip-Dateien erstellen und entpacken

Posted on 15. März 202114. März 2021 By Daniel Lensing Keine Kommentare zu Powershell: Zip-Dateien erstellen und entpacken

In manchen Exporten werden viele Dateien erstellt. Zum Versand oder weiteren Ablage kann es sinnvoller sein diese zu bündeln. Im Skripting-Umfeld kann eine ZIP-Datei eine einfache Lösung sein.

Dafür kann der folgende Befehl genutzt werden:

Compress-Archive -Path 'C:\Quelle' -DestinationPath 'C:\Ablage\Dokumente.zip'

Dabei wird automatisch die optimale Kompression im Standard verwandt. Bei einer großen Anzahl an Daten kann dieses über das Argument „-CompressionLevel“ editiert werden:

  • NoCompression
  • Fastest
  • Optimal

Bei „Fastest“ wird schneller verschlüsselt aber auch die Zieldatei wird größer. Bei „NoCompresssion“ werden die Dateien nur zu einer zusammengefasst.

Mit „-Update“ können weitere Dateien einer vorhandenen ZIP-Datei hinzugefügt werden. Zum Beispiel könnte man so eine Monatsdatei erstellt werden.

Selbstverständlich gibt es auch einen Befehl zum entpacken:

Expand-Archive -LiteralPath 'C:\Ablage\Dokumente.zip' -DestinationPath 'C:\Zielordner'

Dabei wird die Zip-Datei an den definierten Zielordner entpackt.
Leider gibt es bei diesen Verfahren keine Möglichkeit die Zip-Datei mit einem Passwort zu schützen.

Zu den Commandlets gibt es natürlich Beschreibungen in den Microsoft Docs

  • Compress-Archive bei Microsoft Docs15
  • Expand-Archive bei Microsoft Docs
Powershell

Powershell: AD-Gruppen zweier Benutzer vergleichen

Posted on 3. März 202128. Februar 2021 By Daniel Lensing Keine Kommentare zu Powershell: AD-Gruppen zweier Benutzer vergleichen

Manchmal benötigt man einen schnellen Vergleich über die AD-Gruppen zweier Benutzer-Accounts. Dieses kann einem im Fehlerfall schnell eine Idee für ein Problem identifizieren.

#Samaccountname der zu vergleichen
 
$user1 = "user1"
$user2 = "user2"
 
Compare-Object -ReferenceObject (Get-AdPrincipalGroupMembership $user1 | select name | sort-object -Property name) -DifferenceObject (Get-AdPrincipalGroupMembership $User2 | select name | sort-object -Property name) -property name -passthru |
 
ForEach-Object {
 
if ($_.SideIndicator -eq '=>') {
 
$_.SideIndicator = 'Group is not assigned to ' +$User1
 
} elseif ($_.SideIndicator -eq '<=') {
 
$_.SideIndicator = 'Group is not assigned to ' +$User2
 
}
 
$_
 
}

Es konnte sehr schnell die fehlende AD-Gruppe ermittelt werden. Manuell hätten dieses definitiv mehr Arbeitszeit gekostet.

Powershell

AD: Existiert zum Nebenbenutzer noch ein Hauptbenutzer

Posted on 26. Februar 202125. Februar 2021 By Daniel Lensing Keine Kommentare zu AD: Existiert zum Nebenbenutzer noch ein Hauptbenutzer

In einigen Active Directory-Umgebungen gibt es neben dem Haupt-Benutzer auch Funktionsbenutzer für administrative Berechtigungen oder auch Software-Lösungen. Dabei kann es interessant sein, ob der Hauptaccount überhaupt existiert.

$Prefix_users = get-aduser -filter "samaccountname -like 'pre_*'"
 
Foreach ($u in $Prefix_users.samaccountname)
 
{
 
$query = $(try {get-aduser $u.split('_')[1]} catch {$null})
 
  if ($query -ne $null) {
 
  write-host $u " - "$u.split('_')[1]" - existiert"
 
  } else {
 
  write-host $u " - "$u.split('_')[1]" - existiert nicht"
 
  }
 
}

Die Darstellung des Status ist nur eine der vielen Möglichkeiten. Die Daten können selbstverständlich auch anders verarbeitet werden. Ein Möglichkeit wäre, den Hauptaccount als Manager des Nebenaccounts einzutragen.

Powershell

Seitennummerierung der Beiträge

Vorherige 1 … 3 4 5 … 14 Nächste

Daniel Lensing

Ich betreibe diesen Blog, bei dem ich meine Erfahrungen aus der IT & dem Berufsalltag sowie dem Wahnsinn des Lebens mit Höhen und Tiefen. Darunter meine „Erlebnisreise“ zum Planeten „Diabetes mellitus Typ-2“.

Translate:

Follow us

Kategorien

  • Allgemein (1)
  • Client (243)
    • Android (8)
    • Fedora (Linux) (5)
    • iOS (6)
    • Mac OS X (6)
    • Peripherie (5)
    • Ubuntu (Linux) (9)
    • Windows 10 (63)
    • Windows 11 (29)
    • Windows 7 (100)
    • Windows 8 (36)
    • Windows 8.1 (28)
    • Windows Mobile (2)
    • Windows Vista (65)
    • Windows XP (21)
  • Cloud (15)
    • Amazon AWS (1)
    • Microsoft Azure (7)
    • Office 365 (9)
  • Fortbewegung (58)
    • Auto (18)
    • Bahn (19)
    • Beinarbeit (6)
    • Flugzeug (4)
    • Zweirad (14)
  • IT-Nachrichten (37)
  • Leben Beruf und Gesundheit (218)
    • #t2dhero (59)
    • Arbeitszimmer (38)
    • Audio (22)
    • Film / Kino (7)
    • Gedanken (81)
    • Gesundheit (38)
    • Internet (7)
    • Lebensmittel & Essen (23)
    • Lesestoff (20)
    • Sport (11)
    • Veranstaltung (3)
  • Lehren & Lernen (50)
    • Forschung (2)
    • Konferenzen (3)
    • Lehre (1)
    • Präsentation (4)
    • Zertifizierung (42)
  • Programme (332)
    • Android-Apps (28)
    • Eigene Tools (13)
    • iOS-Apps (7)
    • Office (88)
    • Patchday+Updates (77)
    • Software (154)
    • Spiele (3)
    • Windows Phone-Apps (2)
  • Programmierung (97)
    • AutoIT (2)
    • KiXtart (2)
    • PHP (3)
    • Power Automate (1)
    • Powershell (66)
    • VB.NET (11)
    • VBA (10)
    • VBS (10)
  • Server (164)
    • Citrix XenServer (2)
    • Exchange Server (27)
    • Lync Server (1)
    • System Center (4)
    • Ubuntu Server (2)
    • Windows Home Server (2)
    • Windows Server (92)
    • Windows Server 2012 (45)
    • Windows Server 2016 (15)
    • Windows Server 2019 (21)
    • Windows Server 2022 (20)
    • Windows Server 2025 (13)
  • Telekommunikation (38)
    • Festnetz (3)
    • Internet (13)
    • Mobilfunk (23)
  • Verkauf & Verlosung (1)
  • Web-Installationen (37)
    • Joomla (4)
    • Mastodon (1)
    • MediaWiki (10)
    • phpMyAdmin (2)
    • Piwik (4)
    • Wordpress (20)
Mastodon

Copyright © 2025 Daniels Tagesmeldungen.

Powered by PressBook WordPress theme