Skip to content

Daniels Tagesmeldungen

Kleine IT-Episoden & das wahre Leben

  • Startseite
  • About me…
    • Lebenslauf
    • Weiterbildung
  • Disclaimer
  • Toggle search form

Kategorie: Programmierung

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

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

Beitragsnavigation

1 2 … 12 Nächste

Daniel Lensing

Ich betreibe diesen Blog, wo ich meine Erfahrungen aus der IT sowie dem damit verbundenen Berufsalltag dem Internet zur Verfügung stelle.

Zwischenzeitlich bringe ich auch noch die eine oder andere Gegebenheit aus meinem Offline-Leben zur digitalen Nutzung.

Follow us

  • rss
  • mail
  • twitter
  • instagram
  • xing
  • linkedin
  • mastodon

Kategorien

  • Allgemein (13)
  • Client (209)
    • Android (4)
    • Fedora (Linux) (4)
    • iOS (3)
    • Mac OS X (3)
    • Peripherie (4)
    • Ubuntu (Linux) (5)
    • Windows 10 (41)
    • Windows 11 (2)
    • Windows 7 (99)
    • Windows 8 (36)
    • Windows 8.1 (28)
    • Windows Mobile (2)
    • Windows Vista (64)
    • Windows XP (20)
  • Cloud (12)
    • Microsoft Azure (5)
    • Office 365 (7)
  • Fortbewegung (39)
    • Auto (13)
    • Bahn (13)
    • Beinarbeit (1)
    • Zweirad (12)
  • IT-Nachrichten (34)
  • Leben & Beruf (77)
    • Arbeitszimmer (2)
    • Gedanken (16)
    • Kino (3)
    • Lebensmittel & Essen (4)
    • Lesestoff (3)
    • Podcast (8)
    • Sport (1)
  • Lehren & Lernen (44)
    • Konferenzen (1)
    • Präsentation (1)
    • Zertifizierung (42)
  • Programme (306)
    • Android-Apps (21)
    • Eigene Tools (11)
    • iOS-Apps (1)
    • Office (82)
    • Patchday+Updates (68)
    • Software (141)
    • Spiele (3)
    • Windows Phone-Apps (2)
  • Programmierung (78)
    • AutoIT (1)
    • KiXtart (1)
    • PHP (2)
    • Power Automate (1)
    • Powershell (49)
    • VB.NET (7)
    • VBA (10)
    • VBS (10)
  • Server (138)
    • Citrix XenServer (2)
    • Exchange Server (25)
    • Lync Server (1)
    • System Center (4)
    • Windows Home Server (2)
    • Windows Server (87)
    • Windows Server 2012 (44)
    • Windows Server 2016 (11)
    • Windows Server 2019 (3)
  • Telekommunikation (29)
    • Festnetz (3)
    • Internet (6)
    • Mobilfunk (20)
  • Verkauf & Verlosung (1)
  • Web-Installationen (32)
    • Joomla (4)
    • MediaWiki (9)
    • phpMyAdmin (1)
    • Piwik (4)
    • Wordpress (19)

Copyright © 2023 Daniels Tagesmeldungen.

Powered by PressBook WordPress theme