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-Key: 666580

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

Printed on: April 26, 2024 at 04:04 o'clock

Member: Doskias
Doskias May 10, 2021 at 09:47:32 (UTC)
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
Member: gismox2708
gismox2708 May 10, 2021 at 10:03:25 (UTC)
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 !
Member: mayho33
mayho33 May 10, 2021 updated at 10:09:44 (UTC)
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  
Member: gismox2708
gismox2708 May 10, 2021 at 10:22:56 (UTC)
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 !
Member: mayho33
mayho33 May 10, 2021 updated at 11:20:51 (UTC)
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  
Member: gismox2708
gismox2708 May 10, 2021 at 12:07:17 (UTC)
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 ?
Mitglied: 148121
148121 May 10, 2021, updated at May 11, 2021 at 05:42:19 (UTC)
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.
Member: mayho33
mayho33 May 10, 2021 at 17:56:27 (UTC)
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 😜
Member: gismox2708
gismox2708 May 11, 2021 at 05:12:03 (UTC)
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
Mitglied: 148121
Solution 148121 May 11, 2021 updated at 05:50:51 (UTC)
Goto Top
Uups my fault, ist korrigiert, vor lauter Expressions das "select" vergessen.
Member: gismox2708
gismox2708 May 11, 2021 at 06:21:54 (UTC)
Goto Top
Super das war es ! Vielen Dank für die HILFE