Um z. B. für Berechtigungen eine neue Gruppe „GruppeB“ mit den selben Mitgliedern wie „GruppeA“ zu erstellen, kann folgendes Skript verwendet werden:

Definieren Sie den Namen der Quell- und Zielgruppe

$sourceGroupName = „GruppeA“
$targetGroupName = „GruppeB“
# in welche OU soll die neue Gruppe erstellt werden?
$ZielOU = „OU=Groups,DC=example,DC=com“

Abrufen der Mitglieder der Quellgruppe

$sourceGroupMembers = Get-ADGroupMember -Identity $sourceGroupName

Überprüfen, ob die Zielgruppe existiert. Wenn nicht, erstellen Sie sie.

if (-not (Get-ADGroup -Filter {Name -eq $targetGroupName})) {
New-ADGroup -Name $targetGroupName -GroupScope Global -Path $ZielOU -Description „Beschreibung der Zielgruppe“
}

Hinzufügen der Mitglieder zur Zielgruppe

foreach ($member in $sourceGroupMembers) {
Add-ADGroupMember -Identity $targetGroupName -Members $member
}

Write-Output „Mitglieder der Gruppe $($sourceGroupName) wurden erfolgreich zur Gruppe $($targetGroupName) hinzugefügt.“

# Liste der DNS-Namen, die aufgelöst werden sollen
$dnsNames = @(
    "example.com",
    "example2.com",
    "example3.com"
)

foreach ($dnsName in $dnsNames) {
    try {
        $ipAddresses = [System.Net.Dns]::GetHostAddresses($dnsName) | Select-Object -ExpandProperty IPAddressToString
        Write-Host "IP-Adressen für $dnsName "
        foreach ($ip in $ipAddresses) {
            Write-Host "- $ip"
        }
    } catch {
        Write-Host "Fehler beim Auflösen des DNS-Namens $dnsName $_"
    }
}

 

Die Reservierung aller Scopes exportieren:

$dhcpserver = "QuellServer.QuellDomain.com"
Get-DhcpServerv4Scope -ComputerName $dhcpserver | Get-DhcpServerv4Reservation -ComputerName $dhcpserver Export-Csv "pathtofile\ScopeReservation.csv" -Encoding UTF8 -Force -NoTypeInformation -Delimiter ";"

Als nächstes importieren wir die Reservierungen (ACHTUNG!: nicht mit Import, sondern mit Add)

$dhcpserver = "ZielServer.ZielDomain.com"
$scopes = Import-Csv -Path "pathtofile\ScopeReservation.csv" -Delimiter ";"
foreach ($scope in $scopes)
{
    $name = $scope.name
    $description = $scope.description
Write-Output "Creating scope  $name"

Add-DhcpServerv4Reservation -ComputerName $dhcpserver -ScopeId $scope.ScopeId -IPAddress $scope.IPAddress -Description $scope.description -Name $scope.name -ClientId $scope.clientid -Type $scope.Type #-WhatIf
}
Getagged mit: 
Alle Scope Optionen exportieren:
Get-DhcpServerv4Scope -ComputerName "QuellServer.QuellDomain.com" | Export "pathtofile\exportScopeOptions.csv" -Delimiter ";"

Da in dieser Tabelle alle Scope Optionen wie Rounter, DNS Server in einer Spalte stehen, habe ich mit einem Excel Filter diese in separate Spalten aufgetrennt und jeweils nach dem ScopeOptionNamen benannt. Zum Beispiel Router;DNSServer usw. .

Import der Scope Optionen:

$dhcpserver = "ZielServer.ZielDomain.com"
$scopes = Import-Csv -Path "pathtofile\exportScopeOptions.csv" -Delimiter ";"
foreach ($scope in $scopes)
{
    $name = $scope.name
    $description = $scope.description
Write-Output "Creating scope  $name"
Set-DhcpServerv4OptionValue -Router $scope.router -DNSServer $scope.DNSServer -ScopeId $scope.scopeid -ComputerName $dhcpserver
}

Wie die DHCP Reservierungen exportiert und importiert werden, zeige ich in einem neuen Blogbeitrag.

Getagged mit: 

Aufgrund eines Firmenkaufs, mussten die DHCP Scopes eines Windows DHCP Server auf einen bereits bestehenden transferiert werden. Da die Standard Backup/Import Funktion die bestehende Konfiguration überschreiben würde, habe ich hierzu PowerShell genutzt:

Export der bestehenden Konfiguration:

$dhcpserver = "QuellServer.QuellDomain.com"
Get-DhcpServerv4Scope -ComputerName $dhcpserver | Export-Csv "pathtofile\dhcpscopes.csv" -Encoding UTF8 -Force -NoTypeInformation

Import der Konfiguraton auf den Quellserver:

$dhcpserver = "ZielServer@ZielDomain.com"
$scopes = Import-Csv -Path "pathtofile\dhcpscopes.csv" -Delimiter ";"
foreach ($scope in $scopes)
{
    $name = $scope.name
    $description = $scope.description
Write-Output "Creating scope  $name"
Add-DhcpServerv4Scope -ComputerName $dhcpserver -Name "$name" -Description "$description" -StartRange $scope.startrange -EndRange $scope.endrange -SubnetMask $scope.subnetmask -State Active
}

Wie die ScopeOptions und Reservierungen übernommen werden zeige ich in einem weiteren Beitrag.
Getagged mit: 
 
 

Bulk AD Update durch Excel Datei

On 21. Dezember 2021, in Allgemein, Von

Comment : This script updates AD users attributes from excel sheet.

Version : 1.1

This command has been added to script.

[threading.thread]::CurrentThread.CurrentCulture = ‚en-US‘

#

Declare file path and sheet name

$credential=Get-Credential
$ErrorActionpreference = „continue“

[threading.thread]::CurrentThread.CurrentCulture = ‚de-DE‘

$file = „C:\Path\TEST.xlsx“

Create an Excel.Application instance and open that file

$Excelobject = New-Object -ComObject Excel.Application
$Workbook = $Excelobject.Workbooks.Open($file)
$sheetName = „Tabelle1“
$sheet = $Workbook.Worksheets.Item($sheetName)

$objExcel.Visible=$true

Count max row

$rowMax = ($sheet.UsedRange.Rows).count

Count max column

$colMax = ($sheet.UsedRange.Columns).count
$hash = @{}
$server = „DC01.company.com“

Specify starting positions

$row,$col = 1,1
$updatedCount = 0

loop for rows

for ($i=1; $i -le $rowMax-1; $i++)
{

#loop for columns
for($c=0; $c -le $colMax-1; $c++)
{
  #Get all columns values to a hash
  $hash += @{$sheet.Cells.Item($row,$col+$c).text =  $sheet.Cells.Item($row+$i,$col+$c).text}


}

#Create an object and assign hash keys as object property
$Object = New-Object -TypeName PSObject -Property $hash

#Get User via SamAccountname
$user = Get-ADUser -Filter {„SamAccountName -eq ‚$($Object.sAMAccountName)'“} -Server $server -Credential $credential

#Set Users attribute with matched object attribute
$user | Set-ADUser -GivenName $Object.GivenName -Surname $Object.SN
-DisplayName $Object.Displayname -OfficePhone $Object.PhoneNumber
# -Description $Object.Description -Country $Object.Country
-Office $Object.Office -Title $Object.Title
-Company $Object.Company -Department $Object.Department
-Manager $Object.Manager `
-Mobile $Object.Mobile
#-Fax $Object.Fax

#If you want to edit Object common name, you can remove enable two lines below.

#$userguid = $user.ObjectGUID.Guid
#$user | Rename-ADObject -NewName $Object.DisplayName -Server $server -Credential $credential

$hash = @{}
Write-Host $User.Name „- User attributes have been updated.“ -ForegroundColor Yellow
Start-Sleep -s 1
$updatedCount += 1

}

Write-Host $updatedCount „Users have been updated“ -ForegroundColor Green

close excel file

$Excelobject.quit()

 

Abgelaufene Computer Zertifikate finden

On 20. Dezember 2021, in PowerShell, Von

Mit diesem PowerShell Befehl werden abgelaufene Computer Zertifikate aufgelistet:

Continue reading »

Getagged mit: 

Mit Hilfe diesen PowerShell Befehls kann herausgefunden werden, wann die User zuletzt Ihr Passwort geändert haben und ob die Option „Passwort läuft nie ab“ gesetzt wurde:

get-aduser -filter * -properties Name,passwordlastset,passwordneverexpires | Select-Object Name,passwordlastset,passwordneverexpires | Export-Csv C:\Pfad\Last_PW_Set.csv -NoTypeInformation

Getagged mit: