AD-User und AD-Gruppen mit Powershell bearbeiten

Active Directory Powershell 1

Ich habe mal ein paar nütziche Powershell-Befehle zusammengestellt, die man für die üblichen Administrativen Aufgaben benötigt.

Vorab, den „-server“ anzugeben ist nur notwendig, wenn man die Änderungen über einen speziellen Server initieren möchte oder der eigene Computer kein Active-Directory Member ist und von „außen“ kommt. Ähnlich bei „get-credential“, bzw. sollte der Befehl verwendet werden wenn ihr die Befehle unter einem anderen Nutzer auführen wollt.

Active Directory User bearbeiten und anlegen mit Powershell

Active-Directory User Accounts nach CSV exportieren

Get-ADUser -filter * -SearchBase "DC=mj,dc=local" -Properties * | export-csv c:\temp\get-aduser.csv -Delimiter ";"

AD-User Account aktivieren oder deaktivieren

Enable-ADAccount -Identity dampf.hans
Disable-ADAccount -Identity dampf.hans

ChangePasswordAtNextLogon bei mehrere Nutzern setzen oder deaktivieren

Get-ADuser -Filter 'Name -like "service.phone*"' | Set-ADUser -ChangePasswordAtLogon $true -PasswordNeverExpires $false

Get-ADuser -Filter 'Name -like "service.phone*"' | Set-ADUser -ChangePasswordAtLogon $false -PasswordNeverExpires $false

User Account umbenennen

Get-ADUser dampf.hans | Rename-ADObject -NewName dampf.hans2

vielen Active-Directory User Accounts anlegen

$ad_count_of_users_to_create=14
$ad_domainname_short="mj"
$ad_acc_surname="service.phoneXX"
$ad_groupmembership="wifi_access"

$ad_acc_password="Str3ngG3h31m!"

### load AD Module 
Import-Module ActiveDirectory

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

    $current_number=$i
    if($current_number -lt 10){$current_number="0"+$current_number}

    $tmp_ad_acc_surname=$ad_acc_surname -replace 'XX',$current_number
    $tmp_ad_acc_displayname=$ad_acc_displayname -replace 'XX',$current_number
    $tmp_ad_acc_SamAccountName=$ad_acc_SamAccountName -replace 'XX',$current_number
    $tmp_upn = $tmp_ad_acc_SamAccountName+“@”+$ad_domainname_long 
    
    write-host "`n`nSamAccountName: "$tmp_ad_acc_SamAccountName"`n Name: "$tmp_ad_acc_SamAccountName"`n UserPrincipalName: "$tmp_upn"`n firstname: "$ad_acc_firstname"`n Surname: "$tmp_ad_acc_surname"`n DisplayName: "$tmp_ad_acc_displayname"`n Description: "$ad_acc_description"`n Department: "$ad_acc_department"`n Path: "$ad_path"`n AccountPassword: "$ad_acc_password
    
    Set-ADUser -SamAccountName $tmp_ad_acc_SamAccountName -UserPrincipalName $tmp_upn -Name $tmp_ad_acc_SamAccountName -SurName $tmp_ad_acc_surname -DisplayName $tmp_ad_acc_displayname -Department $_.Department -Path $ad_path -Description $ad_acc_description -AccountPassword (ConvertTo-SecureString $ad_acc_password -AsPlainText -force) -Enabled $True -PasswordNeverExpires $True -PassThru 

    add-ADGroupMember -Identity $ad_groupmembership -member $tmp_ad_acc_SamAccountName

}

AD-User Properties anzeigen lassen

Anzeigen lassen alle User die „Hans“ heißen

Get-ADUser -filter {Name -like "hans*"}

Alle Attribute eines AD-Users anzeigen lassen

Get-ADUser dampf.hans -Properties *

letzte Passwortänderung eines Nutzers anzeigen lassen.

Get-ADuser dampf.hans -Properties GivenName,whenChanged,pwdLastSet,PasswordLastSet

letzte Passwortänderung mehrerer Nutzer anzeigen lassen.

Get-ADuser -Filter 'Name -like "service.phone*"' -Properties GivenName,whenChanged,pwdLastSet,PasswordLastSet

Anzeigen von AD-Nutzern mit Lastlogon älter als

diesen Schnipsel habe ich irgendwo im Netz gefunden. stammt nicht von mir 😉

$disable_older_than_x_days=-7
$disable_oldDate = (Get-Date).AddDays($disable_older_than_x_days).ToFileTime().toString()

Get-ADUser -SearchBase DC=mj,DC=local -Properties SamAccountName, lastlogontimestamp,DistinguishedName,UserPrincipalName -server $selected_domaincontroller -LDAPFilter "(lastlogontimestamp<=$disable_oldDate)" | select @{n='SamAccountName';e={$_.SamAccountName}}, @{n='LastLogOn';e={[datetime]::FromFileTime($_.lastlogontimestamp)}},@{n='UserPrincipalName';e={$_.UserPrincipalName}},@{n='DistinguishedName';e={$_.DistinguishedName}}

LastLogin der Mitglieder einer AD-Gruppe anzeigen lassen

get-adgroupmember -recursive Administrators | get-aduser -properties "LastLogonDate" | export-csv -path c:\temp\lastlogin.csv -Delimiter ";"

Anzeigen von AD-Nutzern mit Passwortchange älter als

Nutzer die lange nicht mehr ihr Passwort geändert haben. Auch dieser Code stammt nicht aus meiner Feder.

$today = Get-Date
$change_password_older_than_x_days=7
$cutDate = $today.AddDays(-($change_password_older_than_x_days))
$change_password_oldDate = $cutDate.ToFileTimeUtc()

Get-ADUser -searchbase DC=mj,DC=local -Properties pwdLastSet,* -LDAPFilter "(pwdLastSet<=$change_password_oldDate)" | Select-Object -Property SamAccountName,PasswordLastSet,DistinguishedName,UserPrincipalName | Sort-Object -Property SamAccountName

Passwort eines oder mehrerer AD-Nutzer setzen

weitere Informationen zu Set-ADAccountPassword und nützlichen Anwendungsbeispiele

Set-ADAccountPassword dampf.hans -Reset -NewPassword (ConvertTo-SecureString -AsPlainText "4%rhDWooh7777!" -Force)
Get-ADuser -Filter 'Name -like "service.phone*"' | Set-ADAccountPassword -Reset -NewPassword (ConvertTo-SecureString -AsPlainText "4%rhDWooh7777!" -Force)

Zufallspasswort mit Powershell setzen

# Quelle: http://activedirectoryfaq.com/2017/08/creating-individual-random-passwords/
    function Get-RandomCharacters($length, $characters) {
        $random = 1..$length | ForEach-Object { Get-Random -Maximum $characters.length }
        $private:ofs=""
        return [String]$characters[$random]
    }
 
    function Scramble-String([string]$inputString){     
        $characterArray = $inputString.ToCharArray()   
        $scrambledStringArray = $characterArray | Get-Random -Count $characterArray.Length     
        $outputString = -join $scrambledStringArray
        return $outputString 
    }

##
$password = Get-RandomCharacters -length 4 -characters 'abcdefghiklmnoprstuvwxyz'
$password += Get-RandomCharacters -length 4 -characters 'ABCDEFGHKLMNOPRSTUVWXYZ'
$password += Get-RandomCharacters -length 4 -characters '1234567890'
$password += Get-RandomCharacters -length 2 -characters '!%§?+-' 
$ad_acc_passwd = Scramble-String $password

Set-ADAccountPassword hans.dampf -Reset -NewPassword (ConvertTo-SecureString -AsPlainText $ad_acc_passwd -Force)

AD-Gruppenmitgliedschaften mit Powershell anzeigen lassen und bearbeiten

Mitglieder einer AD-Gruppe anzeigen lassen ohne auflösen der Mitgliedsgruppen

Get-ADGroupMember -Identity "Administrators"

Mitglieder einer AD-Gruppe anzeigen lassen mit auflösen der Mitgliedsgruppen

Get-ADGroupMember -Identity "Administrators" -Recursive

Mitglieder eine AD-Gruppe als CSV exportieren

Get-ADGroupMember -Identity "Administrators" -Recursive | export-csv c:\temp\get-adgroupmember.csv -Delimiter ";"

Einen AD-Account zu einer AD-Gruppe hinzufügen

Add-ADPrincipalGroupMembership dampf.hans -MemberOf Administrators

Eine AD-Gruppe anlegen und Nutzer zuweisen

New-ADGroup -Name "local_administrators" -SamAccountName dampf.hans -GroupCategory Security -GroupScope Global -DisplayName "local_admiministrators" -Path "OU=User,OU=testlab,DC=mj,DC=local" -Description "AD-Group for local Adminusers"

Add-ADPrincipalGroupMembership dampf.hans -MemberOf "local_administrators"

Get-ADGRoupMember -Credential $cred -server $server -Identity "local_administrators"

weitere interessante Beitäge zu dem Thema