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

Powershell: Owner von AD-Objekt auslesen

Posted on 2. November 20211. November 2021 By Daniel Lensing Keine Kommentare zu Powershell: Owner von AD-Objekt auslesen

Immer mal wieder wundert man sich ĂŒber Objekte in der AD. Manchmal hilft es dann auf schnellen Weg den Ersteller zu ermitteln. Dieses ist natĂŒrlich ĂŒber den Reiter „Sicherheit“/“Security“ und „Erweitert“/“Advanced“ in Erfahrung zu bringen. Ich suchte allerdings einen Weg, der mich schneller ans Ziel bringt.

Dabei ist diese folgende Code-Schnipsel entstanden:

#Definiton der zu nutzenden Assembly
Add-Type -AssemblyName Microsoft.VisualBasic

#Inputbox zur Abfrage des Objectnamens
#Computernamen mĂŒssen mit einem zusĂ€tzlichen $-Zeichen versehen werden
$Query = [Microsoft.VisualBasic.Interaction]::InputBox('Enter a object name', 'OwnerSearch', "$env:UserName")

#Suche nach dem Object
$object = [ADSI](([ADSISearcher]"(SamAccountName=$query)").FindOne().Path)

#Ermittlung des Owners
$objectowner = $object.PsBase.ObjectSecurity.Owner

#Ausgabe ĂŒber Messagebox
[System.Windows.Forms.MessageBox]::Show("Objekt-Ersteller: $objectowner","OwnerSearch",0)

#Speicherung des ermittelten Wertes in der Zwischenablage
Set-Clipboard $objectowner

Man gibt in das Eingabefeld den SamAccountname des Objektes ein. Es kann ein Benutzer, eine Gruppe oder ein Computer sein. Beim Computer-Objekt ist darauf zu achten, dass ein $Zeichen an den Namen angefĂŒgt werden muss.

Entsprechend wird das Ergebnis als Information ĂŒber eine „Message-Box“ angezeigt und auch in die Zwischenablage definiert. Dadurch kann der Wert direkt weiter verarbeitet werden.

Powershell

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

Seitennummerierung der BeitrÀge

Vorherige 1 2 3 4 … 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 (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