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: Powershell

Powershell: Objektzähler pro OU

Posted on 17. April 202515. April 2025 By Daniel Lensing Keine Kommentare zu Powershell: Objektzähler pro OU

Im Rahmen einer Bereinigungsanforderung einer Active Directory-Domäne musste ich mir ein Skript erstellen, welches mir die Anzahl der Objekte aufgeteilt nach Typ darstellt:

  • Userobjekte
  • Gruppenobjekte
  • Computerobjekte

Aus diesem Grund ist das folgende Skript entstanden:

$results = Get-ADOrganizationalUnit -Properties CanonicalName,description -Filter * |
Sort-Object CanonicalName |
ForEach-Object {
    [pscustomobject]@{
        Name          = Split-Path $_.CanonicalName -Leaf
        CanonicalName = $_.CanonicalName
        UserCount     = @(Get-AdUser -Filter * -SearchBase $_.DistinguishedName -SearchScope OneLevel).Count
        GroupCount    = @(Get-AdGroup -Filter * -SearchBase $_.DistinguishedName -SearchScope OneLevel).Count
        ComputerCount = @(Get-AdComputer -Filter * -SearchBase $_.DistinguishedName -SearchScope OneLevel).Count
    }
}
$results | Select-Object canonicalname,Description,usercount,groupcount,computercount,name | export-csv C:\Temp\OUStructure.csv -Encoding UTF8 -Delimiter ";" -NoTypeInformation
Powershell, Programmierung, Server, Windows Server 2019, Windows Server 2022

Anwendungsspezifisches Eventlog für Powershell-Skript

Posted on 18. Februar 202517. Februar 2025 By Daniel Lensing Keine Kommentare zu Anwendungsspezifisches Eventlog für Powershell-Skript

Im Rahmen eines Skriptes kann es sinnvoll sein, wenn man ein dediziertes Eventlog erstellt. Dieses kann dann zum Beispiel in einer Monitoring-Lösung weiterverarbeitet werden.

Dazu muss ein neues „Eventlog“ sowie eine neue „Source“ erstellt werden über den Powershell-Befehl „New-Eventlog„:

New-EventLog -LogName "ApplicationName" -Source "AutoScriptPS1" -EA SilentlyContinue

Diese Befehlszeile muss mit administrativen Rechten ausgeführt werden.

Anschließend ist es möglich das neu erstellte Eventlog per Write-Eventlog mit Werten zu befüllen:

Write-EventLog 
      -LogName "ApplicationName"'
      -Source "AutoScriptPS1"'
      -EntryType "Error"'
      -Message "An issue has stopped the script."'
      -EventId 99

Als „EntryType“ können neben „Error“ auch „Information“ oder „Warning“ genutzt werden. Die EventID kann bis zu einem Wert 65535 definiert werden.

Client, Powershell, Programmierung, Server, Windows 10, Windows 11, Windows Server 2016, Windows Server 2019, Windows Server 2022, Windows Server 2025

Gruppenrichtlinien-Bereinigung

Posted on 21. Januar 202519. Januar 2025 By Daniel Lensing Keine Kommentare zu Gruppenrichtlinien-Bereinigung

Oft werden Gruppenrichtlinien erstellt und auch modifiziert, wenn es Anforderungen gibt. Allerdings altern diese auch teilweise sehr schlecht in der Verzeichnisstruktur. Aus diesem Grund habe ich 2 Skripte erstellt, welche einen kleinen Überblick entsprechende Themen berücksichtigen:

Nicht verlinkte Gruppenrichtlinien

Gruppenrichtlinien werden an der Struktur der Domäne zur Verfügung bereitgestellt. Wenn man in dieser Struktur entsprechende Löschung, ob per Kontextmenü oder Taste „ENTF“, wird nur die Verlinkung gelöscht. Die Gruppenrichtlinie selbst bleibt in der Domäne vorhanden.

Mit diesem Skript können nicht mehr verlinkte Gruppenrichtlinien aufgelistet:

# Importieren des GroupPolicy-Moduls
Import-Module GroupPolicy

# Funktion zum Finden nicht verlinkter GPOs
function Get-UnlinkedGPOs {
    # Abrufen aller GPOs
    $allGPOs = Get-GPO -All

    # Liste zum Speichern nicht verlinkter GPOs
    $unlinkedGPOs = @()

    # Schleife durch alle GPOs
    foreach ($gpo in $allGPOs) {
        # Abrufen aller Links für das aktuelle GPO
        $links = Get-GPOLink -Guid $gpo.Id

        # Überprüfen, ob keine Links existieren
        if ($links.Count -eq 0) {
            # Hinzufügen des GPO zur Liste nicht verlinkter GPOs
            $unlinkedGPOs += $gpo
        }
    }

    # Ausgabe der nicht verlinkten GPOs
    foreach ($unlinkedGPO in $unlinkedGPOs) {
        Write-Output "GPO '$($unlinkedGPO.DisplayName)';(ID: $($unlinkedGPO.Id));(ModifyDate: $($unlinkedGPO.whenmodified))"
    }
}

# Aufruf der Funktion
Get-UnlinkedGPOs

Deaktivierte Gruppenrichtlinien

Gruppenrichtlinien sind in zwei Teilen aufgeteilt: Benutzer und Computer. Diese können allerdings auch beide deaktiviert werden. Somit ist eine Gruppenrichtlinie verlinkt, aber nicht mehr in der Verteilung. Diese Funktion kann zum Beispiel in Rollouts genutzt werden, um verschiedene Versionen auszutauschen.

Mit diesem Skript können deaktivierte Gruppenrichtlinien in der Domäne identifiziert werden.

# Importieren des GroupPolicy-Moduls
Import-Module GroupPolicy

# Funktion zum Finden von verlinkten GPOs, die deaktiviert sind
function Get-DisabledLinkedGPOs {
    # Abrufen aller GPOs
    $allGPOs = Get-GPO -All

    # Liste zum Speichern deaktivierter, verlinkter GPOs
    $disabledLinkedGPOs = @()

    # Schleife durch alle GPOs
    foreach ($gpo in $allGPOs) {
        # Überprüfen, ob das GPO deaktiviert ist
        if ($gpo.GpoStatus -eq "AllSettingsDisabled") {
            # Abrufen aller Links für das aktuelle GPO
            $links = Get-GPOLink -Guid $gpo.Id

            # Überprüfen, ob Links existieren
            if ($links.Count -gt 0) {
                # Hinzufügen des GPO zur Liste deaktivierter, verlinkter GPOs
                $disabledLinkedGPOs += $gpo
            }
        }
    }

    # Ausgabe der deaktivierten, verlinkten GPOs
    foreach ($disabledLinkedGPO in $disabledLinkedGPOs) {
        Write-Output "GPO '$($disabledLinkedGPO.DisplayName)' (ID: $($disabledLinkedGPO.Id));(ModifyDate: $($unlinkedGPO.whenmodified))"
    }
}

# Aufruf der Funktion
Get-DisabledLinkedGPOs

Client, Leben Beruf und Gesundheit, Powershell, Server, Windows 10, Windows 11, Windows Server 2019, Windows Server 2022

Powershell: Mastodon-Trööt generieren

Posted on 29. Dezember 202328. Dezember 2023 By Daniel Lensing Keine Kommentare zu Powershell: Mastodon-Trööt generieren

Die API von Mastodon lässt sich einfach per Powershell ansprechend. Darüber können sehr einfach Nachrichten versandt werden. Anbei ein Beispiel-Skript:

##### Manual to Create Applikation / Anleitung zur Applikationserstellung #####
# EN: Generate mastodon application for API access
# DE: Mastodon-Anwendung für API-Zugang generieren

# EN: Preferences - Development - New Application
# DE: Einstellungen - Entwicklung - Neue Anwendung

# EN: Set Application name - Deselect read & follow - Select write:statuses - Submit
# DE: SApplikationsmane setzen - read & follow abwählen - write:statuses auswählen - Speichern

# EN: Open the saved application and copy the API key. Paste this into the script.
# DE:  Die gespeicherte Applikation öffnen und den API-Key kopieren. Diesen in das Skript einfügen.
###############################################################################


### Nachrichten-Text
$message = 'Das ist ein Test-Trööt!'

#### Troot-Status
# Parameters: public - unlisted - private
$status ="public"


########################################
### Static entries / Statische Einträge:
########################################
$Hostname = 'domain.social'
$token = 'TokenID'

###################################
### Do not modify / Nicht verändern
###################################
$url = "https://$hostname/api/v1/statuses"

$headers = @{
    "Authorization" = "Bearer $($token)"
}
$body = @{
    status  = $message
    visibility = $status
}
Invoke-WebRequest -Uri $url -Method Post -Headers $headers -Body $body

Im Skript muss der Hostname sowie die TokenID ausgetauscht werden. Entsprechend kann der Test-Trööt versendet werden. Dadurch kann zum Beispiel eine Automatisierung generiert werden.

Mastodon, Powershell, Windows 10, Windows 11, Windows Server 2019, Windows Server 2022

Powershell: Password-Reset mit Sonderzeichen

Posted on 23. Oktober 202323. November 2023 By Daniel Lensing Keine Kommentare zu Powershell: Password-Reset mit Sonderzeichen
Das Wort „PASSWORD“ mit Scrabble-Steine auf rotem Hintergrund gelegt
Photo by Miguel Á. Padriñán Alba – https://www.instagram.com/padrinan/

In den letzten Jahren haben sich die Regularien für Passwörter verändert. Von der Länge bis zur Komplexität gab es immer wieder Anpassung bei Anforderungen.

Bei der Nutzung von Sonderzeichen in Passwörtern kommt es gerne auch mal zu Problemen unter Powershell. So wird eine Pipe (|), ein Dollarzeichen ($) oder ein Anführungszeichen („) entsprechend als Programmcode interpretiert und es kommt zu Fehlermeldungen. Es kann auch dadurch der Umstand entstehen, dass ein „anderes Password“ gesetzt wird als definiert.

Dieses kann man mit dem folgenden Code-Schnipsel umgehen:

$password = @'
P!UAQ1I|FBZ-4o6N1?p8PDD"?"ce_s6A
'@
$securepassword = ConvertTo-SecureString $password -AsPlainText -Force
$user = "MMustermann"
Set-ADAccountPassword -Identity $user -NewPassword $securepassword –Reset
Set-ADUser -Identity $user -ChangePasswordAtLogon $true -CannotChangePassword $false -PasswordNeverExpires $false enabled $true
Unlock-ADAccount $user

Beim Aufruf der Variable $password wird nur die mittlere Zeile genutzt. Nach dem Setzen des Kennworts habe ich mir angewöhnt die weiteren Befehle mit zu setzen, da es dann weniger Komplikationen in der Nutzung des frisch gesetzten Kennworts gibt.

Client, Powershell, Windows 10, Windows 11, Windows Server 2016, Windows Server 2019, Windows Server 2022

Powershell: Gruppenmitglieder anhand Datei hinzufügen

Posted on 1. März 202228. Februar 2022 By Daniel Lensing Keine Kommentare zu Powershell: Gruppenmitglieder anhand Datei hinzufügen

Zum Importieren von Usern kann zum Beispiel eine csv-Datei genutzt werden. In diesem Skript ist das Format, dass in der ersten Spalte die der Gruppenname definiert wird. In den nachfolgenden Spalten können die zukünftigen Mitglieder definiert werden. Als Trennzeichen wird das Semikolon genutzt. Überschriften sind nicht erforderlich.

# Example ImportFile
# group_test;user_test1;user_test2;user_test8;
# group_Data;file_data2;file_data4;file_data5;


$Importdatei = "E:\GroupManagement\ImportFile.csv"
$Logfile ="E:\Groupmanagement\ImportLog.txt"
$Delimiter = ";"

Import-Module activedirectory

$members = Get-content $importdatei

for ($z=0; $z -le ($members.Length)-1; $z++ ){

$listobject = $members[$z].Split($Delimiter)

for ($i=1; $i -le ($listobject.Count)-1; $i++ ){

If ($listobject[$i]) {

Try{

Add-ADGroupMember -Identity $listobject[0] -members $listobject[$i]

Add-Content $logfile -value ('OK: '+($listobject[$i])+' in '+($listobject[0]))

}

Catch {

Add-Content $logfile -value ('ERROR: '+($listobject[$i])+' in '+($listobject[0]))

}
}
}
}

Im Log-File werden die Gruppen mit jeder einzelnen Transaktion gespeichert.

Powershell

Powershell: Kopieren von AzureAD-Gruppe des Typs Sicherheit

Posted on 7. Januar 20226. Januar 2022 By Daniel Lensing Keine Kommentare zu Powershell: Kopieren von AzureAD-Gruppe des Typs Sicherheit

Im Rahmen einer größeren Migration mussten Gruppen in der AzureAD kopiert werden, um diese neu zu berechtigen.

Mit dem folgenden Skript werden bei Gruppen, bei denen die Mitgliedschaften zugewiesen werden, die Besitzer (Owner) sowie die Mitglieder (Member) übernommen. Bei Gruppen mit dynamischer Mitglieder-Zuordnung wird das entsprechende Regelwerk übernommen und aktiviert.

#Variablen-Definition
$SourceGroup ="Gruppe_1A"
$DestinationGroup ="Gruppe_2A"

### Skript-Start
#Verbindungsaufbau zum Azure AD
Connect-AzureAD

#Ermittlung der Standard-Parameter der Source-Gruppe
$SourceObjectStatic = Get-AzureADGroup -Filter "DisplayName eq '$SourceGroup'"
$SourceObjectDynamic = Get-AzureADMSGroup -Filter "DisplayName eq '$SourceGroup'"

#Abfrage nach Gruppentyp "Dynamisch"
if ($SourceObjectDynamic.GroupTypes -eq "DynamicMembership") {
### Gruppentyp "Zugewiesen"

#Erstellung der neuen AzureAD-Gruppe
New-AzureADMSGroup -MembershipRule $SourceObjectDynamic.MembershipRule -DisplayName $DestinationGroup -SecurityEnabled $SourceObjectStatic.SecurityEnabled -MailEnabled $SourceObjectStatic.MailEnabled -MailNickname $SourceObjectStatic.MailNickName -MembershipRuleProcessingState "On" -GroupTypes @("DynamicMembership")

}

else {
### Gruppentyp "Zugewiesen"

#Erstellung der neuen AzureAD-Gruppe
New-AzureADGroup -DisplayName $DestinationGroup -MailEnabled $SourceObjectStatic.MailEnabled -SecurityEnabled $SourceObjectStatic.SecurityEnabled -MailNickName $SourceObjectStatic.MailNickName -Description $SourceObjectStatic.Description

#Ermittlung der Standard-Parameter der Destination-Gruppe
$DestinationObject = Get-AzureADGroup -Filter "DisplayName eq '$DestinationGroup'"

#Ermittlung der Mitglieder
$SourceMembers = Get-azureadgroupmember -Objectid $SourceObjectStatic.ObjectId -all $true

#Setzen der Mitglieder in Ziel-Gruppe
Foreach ($Destinationmember in $Sourcemembers){
Add-AzureADGroupMember -ObjectId $DestinationObject.ObjectId -RefObjectId $destinationmember.ObjectId
}

#Ermittlung der Besitzer
$SourceOwners = Get-azureadgroupOwner -Objectid $SourceObjectStatic.ObjectId -all $true

#Setzen der Mitglieder in Ziel-Gruppe
Foreach ($DestinationOwner in $SourceOwners){
Add-AzureADGroupOwner -ObjectId $DestinationObject.ObjectId -RefObjectId $DestinationOwner.ObjectId
}


}
Microsoft Azure, Powershell

Seitennummerierung der Beiträge

Vorherige 1 2 3 … 9 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 (235)
    • Android (7)
    • Fedora (Linux) (5)
    • iOS (5)
    • Mac OS X (5)
    • Peripherie (5)
    • Ubuntu (Linux) (8)
    • Windows 10 (60)
    • Windows 11 (21)
    • 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 (57)
    • Auto (18)
    • Bahn (18)
    • Beinarbeit (6)
    • Flugzeug (4)
    • Zweirad (14)
  • IT-Nachrichten (37)
  • Leben Beruf und Gesundheit (204)
    • #t2dhero (53)
    • Arbeitszimmer (31)
    • Audio (20)
    • Film / Kino (7)
    • Gedanken (79)
    • Gesundheit (33)
    • Internet (5)
    • Lebensmittel & Essen (22)
    • Lesestoff (18)
    • Sport (11)
    • Veranstaltung (3)
  • Lehren & Lernen (49)
    • Forschung (1)
    • Konferenzen (3)
    • Präsentation (4)
    • Zertifizierung (42)
  • Programme (325)
    • Android-Apps (27)
    • Eigene Tools (12)
    • iOS-Apps (6)
    • Office (86)
    • Patchday+Updates (74)
    • Software (150)
    • Spiele (3)
    • Windows Phone-Apps (2)
  • Programmierung (92)
    • AutoIT (1)
    • KiXtart (1)
    • PHP (3)
    • Power Automate (1)
    • Powershell (61)
    • VB.NET (10)
    • VBA (10)
    • VBS (10)
  • Server (159)
    • Citrix XenServer (2)
    • Exchange Server (26)
    • 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 (18)
    • Windows Server 2022 (15)
    • Windows Server 2025 (8)
  • Telekommunikation (38)
    • Festnetz (3)
    • Internet (13)
    • Mobilfunk (23)
  • Verkauf & Verlosung (1)
  • Web-Installationen (36)
    • Joomla (4)
    • Mastodon (1)
    • MediaWiki (9)
    • phpMyAdmin (2)
    • Piwik (4)
    • Wordpress (20)
Mastodon

Copyright © 2025 Daniels Tagesmeldungen.

Powered by PressBook WordPress theme