gismox2708
Goto Top

Powershell - Liste von Usern einlesen und dann Gruppen ausgeben

Hallo zusammen

ich bei ein Änfäger bezüglich powershell usw

Ich versuche mein Script so zu bauen , das es von einer TXT datei die Nutzer einliest
$Users = get-content C:\Powershell\Userlist.txt

foreach ($User in $Users)

{ 
$User = $(try {Get-ADUser $username} catch {$null})
If ($User -eq $Null) { 
write-host -foregroundcolor red User $username does not exist. 
return} 
Else {

Get-ADPrincipalGroupMembership $username | select name}
Leider ist das Ergebniss bescheiden !
Es wird zwar eine Liste mit gruppen ausgeworfen , aber leider in der User member ist !


Am besten wäre wenn das Ergebniss auch in einen Datei geschrieben würde !

Danke für die Hilfe

Content-ID: 666580

Url: https://administrator.de/forum/powershell-liste-von-usern-einlesen-und-dann-gruppen-ausgeben-666580.html

Ausgedruckt am: 23.12.2024 um 15:12 Uhr

Doskias
Doskias 10.05.2021 um 11:47:32 Uhr
Goto Top
Hallo,

formulier doch deine Frage etwas genauer. Du schreibst am Ende, dass eine Liste mit Gruppen ausgeworfen wird in der der User Mitglied ist. ist es nicht genau das was du wolltest? Verstehe daher nicht wo genau dein Problem ist.

Außerdem bitte Code-Tags benutzen, das macht das lesen einfacher bzw. man kann dir die Zeile Sagen.

Umleitung in
Get-ADPrincipalGroupMembership $username | select name} >> Dateipfad/Name 
die Datei geht mit

Gruß
Doskias
gismox2708
gismox2708 10.05.2021 um 12:03:25 Uhr
Goto Top
Hallo

danke erstmal !

Ja da habe ich mich etwas falsch ausgedrückt ! Sorry !"

Ich bekomme den Namen nicht angezeigt, welcher auch dem text file ausgelesen wurde !
Ich bekomme nur die Gruppen wohl vom ersten User nicht von den anderen !
mayho33
mayho33 10.05.2021 aktualisiert um 12:09:44 Uhr
Goto Top
Zitat von @gismox2708:
$Users = get-content C:\Powershell\Userlist.txt

foreach ($User in $Users)

{
$User = $(try {Get-ADUser $username} catch {$null})
If ($User -eq $Null) {
write-host -foregroundcolor red User $username does not exist.
return}
Else {

Get-ADPrincipalGroupMembership $username | select name}
Leider ist das Ergebniss bescheiden !

Kein Wunder! Du überschreibst das Objekt $user aus deiner For-Each mit dem Result.

versuche es mal so:

#Get-WindowsCapability -Online | Where-Object {$_.Name -like "*ActiveDirectory.DS-LDS*"} | Add-WindowsCapability -Online 
$Users = get-content "C:\Powershell\Userlist.txt"  

$prinzipales = @()

foreach ($User in $Users) {
    $Result = $(try {Get-ADUser $User} catch {$null})

    If ($Result -eq $Null) {
        write-host -foregroundcolor red User $User does not exist.
        return
    }
    Else {
        $ADResult = Get-ADPrincipalGroupMembership $Result | select name
        $PSReturn_ = New-Object -TypeName psobject
        $PSReturn_ | Add-Member -MemberType NoteProperty -Name User -Value $User
        $PSReturn_ | Add-Member -MemberType NoteProperty -Name Groups -Value $ADResult
        $prinzipales += $PSReturn_
    }
}

Es wird zwar eine Liste mit gruppen ausgeworfen , aber leider in der User member ist !

Verstehe nicht ganz was du meinst. Natürlich ist der user aus der abgefragten Gruppe Member dieser Gruppe.

Am besten wäre wenn das Ergebniss auch in einen Datei geschrieben würde !

$prinzipales | Set-Content -Path "C:\Powershell\Resultlist.txt" -Force  
gismox2708
gismox2708 10.05.2021 um 12:22:56 Uhr
Goto Top
Super erstmal vielen dank !

Aber ind er Datei steht dann nur
@{User=meiers; Groups=System.Object}
@{User=horstr; Groups=System.Object}

Und nicht in welchen gruppen die User sind !
mayho33
mayho33 10.05.2021 aktualisiert um 13:20:51 Uhr
Goto Top
Zitat von @gismox2708:

Super erstmal vielen dank !

Aber ind er Datei steht dann nur
@{User=meiers; Groups=System.Object}
@{User=horstr; Groups=System.Object}

Und nicht in welchen gruppen die User sind !

Na dann so:
$Users = get-content "C:\Powershell\Userlist.txt"  

$prinzipales = @()

foreach ($User in $Users) {
    $Result = $(try {Get-ADUser $User} catch {$null})

    If ($Result -eq $Null) {
        write-host -foregroundcolor red User $User does not exist.
        return
    }
    Else {
        $ADResult = Get-ADPrincipalGroupMembership $Result | select name
        $PSReturn_ = New-Object -TypeName psobject
        $PSReturn_ | Add-Member -MemberType NoteProperty -Name User -Value $User
        
        $groups = ""  
        foreach ($adr in ($ADResult).name)
        {
            $groups +=  "$adr | "   
        }
        $PSReturn_ | Add-Member -MemberType NoteProperty -Name Groups -Value ($groups.TrimEnd(' |'))  
        $prinzipales += $PSReturn_
    }
}

#$prinzipales | Convert Set-Content -Path "C:\Powershell\Reslist.txt" -Force 
$prinzipales | Export-Csv "C:\Powershell\Reslist.csv" -NoTypeInformation -Delimiter ';' -Force  
gismox2708
gismox2708 10.05.2021 um 14:07:17 Uhr
Goto Top
Hallo

vielen Dank ! Rennt soweit ! >

Allerdings wenn ich mehr wie 15 User einlese, wird die csv datei nicht erstellt ! .
Und wenn der User nicht im AD existiert wird auch keine csv Datei erstellt !

Wie kann ich die beiden kleinen Fehler abstellen ?
148121
148121 10.05.2021, aktualisiert am 11.05.2021 um 07:42:19 Uhr
Goto Top
Ich würde es gleich so schreiben
get-content C:\Powershell\Userlist.txt | ?{Get-ADUser -Filter {SamAccountName -eq $_}} | select @{n='SamAccountName';e={$_}},@{n="Groups";e={(Get-AdPrincipalGroupMembership $_ | select -Expand Name) -join ","}} | export-csv .\users_membership.csv -Delimiter ";" -NoType -Encoding UTF8  
Gruß w.
mayho33
mayho33 10.05.2021 um 19:56:27 Uhr
Goto Top
Zitat von @148121:

Ich würde es gleich so schreiben
> get-content C:\Powershell\Userlist.txt | ?{Get-ADUser -Filter {SamAccountName -eq $_}} | @{n='SamAccountName';e={$_}},@{n="Groups";e={(Get-AdPrincipalGroupMembership $_ | select -Expand Name) -join ","}} | export-csv .\users_membership.csv -Delimiter ";" -NoType -Encoding UTF8  
> 
Gruß w.


Schöner Einzeiler! Als ISE-Noob würde ich da aber auf das F9-Problem hinweisen 😜
gismox2708
gismox2708 11.05.2021 um 07:12:03 Uhr
Goto Top
Super vielen Dank

aber im Einzeiler bekomme ich eine Fehelermeldung

zeile.ps1:1 char:95

back-to-top... -eq $_}} | @{n='SamAccountName';e={$_}},@{n="Groups";e={(Get-AdPrinc ...

back-to-top~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Expressions are only allowed as the first element of a pipeline.
+ CategoryInfo : ParserError: (face-smile , ParentContainsErrorRecordException
+ FullyQualifiedErrorId : ExpressionsMustBeFirstInPipeline
148121
Lösung 148121 11.05.2021 aktualisiert um 07:50:51 Uhr
Goto Top
Uups my fault, ist korrigiert, vor lauter Expressions das "select" vergessen.
gismox2708
gismox2708 11.05.2021 um 08:21:54 Uhr
Goto Top
Super das war es ! Vielen Dank für die HILFE