dpole86
Goto Top

UseraccountControl on Powershell Module

Hallo Zusammen

Versuche mich gerade an einem Script welches mir die verschiedenen Flags von UseraccountControl ausliest.
Ich denke, dass auslesen funktioniert, aber leider komm ich nicht weiter.

Ich hätte gern den Namen hinter der Zahl bei jedem User in einer Tabelle. Online habe ich bisher nix gefunden.

$Flags = @{
    1        = 'SCRIPT'  
    2        = 'ACCOUNTDISABLE'  
    8        = 'HOMEDIR_REQUIRED'  
    16       = 'LOCKOUT'  
    32       = 'PASSWD_NOTREQD'  
    128      = 'ENCRYPTED_TEXT_PWD_ALLOWED'  
    256      = 'TEMP_DUPLICATE_ACCOUNT'  
    512      = 'NORMAL_ACCOUNT'  
    2048     = 'INTERDOMAIN_TRUST_ACCOUNT'  
    4096     = 'WORKSTATION_TRUST_ACCOUNT'  
    8192     = 'SERVER_TRUST_ACCOUNT'  
    65536    = 'DONT_EXPIRE_PASSWORD'  
    131072   = 'MNS_LOGON_ACCOUNT'  
    262144   = 'SMARTCARD_REQUIRED'  
    524288   = 'TRUSTED_FOR_DELEGATION'  
    1048576  = 'NOT_DELEGATED'  
    2097152  = 'USE_DES_KEY_ONLY'  
    4194304  = 'DONT_REQ_PREAUTH'  
    8388608  = 'PASSWORD_EXPIRED'  
    16777216 = 'TRUSTED_TO_AUTH_FOR_DELEGATION'  
    67108864 = 'PARTIAL_SECRETS_ACCOUNT'  
}

1ster Versuch: 
Get-ADUser -Filter * -properties * | Format-Table Name,homeDirectory,HomeDrive,scriptPath,UserAccountControl,
@{Name="accountExpires";Expression={([datetime]::FromFileTime($_.accountExpires))}}  

2ter Versuch
Import-Module ActiveDirectory  
 $users = Get-ADUser -SearchBase "OU" -filter * -property userAccountControl    
 ForEach($user in $users)


3ter Versuch
Get-ADUser $users -Properties * | 
    Select-Object employeeid, name, displayname, samaccountname, mail, PasswordExpired, @{N = "AccountExpires"; E = {[DateTime]::FromFileTime($_.AccountExpires)}}, @{N = "UserAccountControl";E = {$flags.Get_Item($_.UserAccountControl)}}  

ist etwas zusammengewürfelt, aber ich bekomme leider keine Lösung hin.

Danke für alle die sich der Sache annehmen face-smile

Content-ID: 488919

Url: https://administrator.de/contentid/488919

Ausgedruckt am: 22.11.2024 um 03:11 Uhr

140913
Lösung 140913 27.08.2019 aktualisiert um 10:23:36 Uhr
Goto Top
Dafür gibt's den Operator -band, der binär prüft ob ein Wert in einem anderen enthalten ist. Also einfache Calculated Property mit einer Schleife über die Flags, Fertig.
$Flags = @{
    1        = 'SCRIPT'  
    2        = 'ACCOUNTDISABLE'  
    8        = 'HOMEDIR_REQUIRED'  
    16       = 'LOCKOUT'  
    32       = 'PASSWD_NOTREQD'  
    128      = 'ENCRYPTED_TEXT_PWD_ALLOWED'  
    256      = 'TEMP_DUPLICATE_ACCOUNT'  
    512      = 'NORMAL_ACCOUNT'  
    2048     = 'INTERDOMAIN_TRUST_ACCOUNT'  
    4096     = 'WORKSTATION_TRUST_ACCOUNT'  
    8192     = 'SERVER_TRUST_ACCOUNT'  
    65536    = 'DONT_EXPIRE_PASSWORD'  
    131072   = 'MNS_LOGON_ACCOUNT'  
    262144   = 'SMARTCARD_REQUIRED'  
    524288   = 'TRUSTED_FOR_DELEGATION'  
    1048576  = 'NOT_DELEGATED'  
    2097152  = 'USE_DES_KEY_ONLY'  
    4194304  = 'DONT_REQ_PREAUTH'  
    8388608  = 'PASSWORD_EXPIRED'  
    16777216 = 'TRUSTED_TO_AUTH_FOR_DELEGATION'  
    67108864 = 'PARTIAL_SECRETS_ACCOUNT'  
}
Get-ADUser -Filter * -properties Name,homeDirectory,HomeDrive,scriptPath,UserAccountControl | select Name,homeDirectory,HomeDrive,scriptPath,@{n='Flags';e={$uac = $_.UserAccountControl;($flags.GetEnumerator() | ?{$uac -band $_.Key} | %{$_.Value}) -join ','}} | ft -AutoSize -Wrap  
Dpole86
Dpole86 26.09.2019 um 22:56:57 Uhr
Goto Top
Vielen Dank für die Hilfe, hat super funktioniert face-smile