[Powershell] Ausgabe einer Variable

timo2607

Lieutenant
Registriert
Feb. 2011
Beiträge
725
Hallo liebe Community,

ich habe ein kleines Problem bezüglich der formatierten Ausgabe einer Variable.

Aktuell lese ich alle User eines ADs inkl. Eigenschaften aus und speichere dieses in einer Variable:

$AllUser = Get-ADUser -Filter * -SearchBase "OU-Struktur" -Properties *

Das funktioniert auch soweit und kann mit den Informationen arbeiten. Nun möchte ich diese Informationen allerdings formatiert ausgeben und formatiert in eine CSV übergeben. Leider gelingt mir das nicht wirklich, da die CVS aussieht als wenn diese unkryptisch wäre.

Ich habe es auch schon via New-Object probiert und mit anschließenden Add-Member. Das funktionierte in der Theorie gut, leider wird der Inhalt der Liste dann nicht untereinander weggeschrieben sondern als Array von links nach Rechts.

Hat jemand einen Rat, so langsam verzweifel ich ein wenig :(

Viele Grüße
Timo
 
Hallo,

erstmal vielen Dank. Ich habe nun die Foreach Schleife eingebaut die wie folgt aussieht:

[array]$AllUser = Get-ADUser -Filter * -SearchBase "OU-Struktur" -Properties *
Write-Host "Es wurden"$AllUser.count"AD-Objekte gefunden"

$compare_table = New-Object -TypeName System.Object

foreach ($user in $AllUser) {
Add-Member -inputObject $compare_table -MemberType NoteProperty -Name Kürzel -Value "$user.Surname"
Add-Member -inputObject $compare_table -MemberType NoteProperty -Name Given -Value "$user.GivenName"
}

}

Nun schreibt er mir folgenden Fehler :(.
Add-Member : Es kann kein Element mit dem Namen "Kürzel" hinzugefügt werden, da bereits ein Element mit diesem Namen vorhanden ist. Um das Element trotzdem zu
überschreiben, fügen Sie dem Befehl den Force-Parameter hinzu.
In C:\Users\msgadm\Desktop\ComapareAD_PMT.ps1:33 Zeichen:5
+ Add-Member -inputObject $compare_table -MemberType NoteProperty -Name Kürzel ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (System.Object:PSObject) [Add-Member], InvalidOperationException
+ FullyQualifiedErrorId : MemberAlreadyExists,Microsoft.PowerShell.Commands.AddMemberCommand

Add-Member : Es kann kein Element mit dem Namen "Given" hinzugefügt werden, da bereits ein Element mit diesem Namen vorhanden ist. Um das Element trotzdem zu
überschreiben, fügen Sie dem Befehl den Force-Parameter hinzu.
In C:\Users\msgadm\Desktop\ComapareAD_PMT.ps1:34 Zeichen:5
+ Add-Member -inputObject $compare_table -MemberType NoteProperty -Name Given ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (System.Object:PSObject) [Add-Member], InvalidOperationException
+ FullyQualifiedErrorId : MemberAlreadyExists,Microsoft.PowerShell.Commands.AddMemberCommand

ich denke einfach, der kann die Tabelle mit dem Namen nicht wieder schreiben, da diese ja bereits exisitiert.
 
Gleiches Problem :(
 
Existiert das CSV schon?

Ansonsten
Code:
Get-ADUser -Filter * -SearchBase 'xy' | Export-CSV "C:\path\zu\meeinem.csv"
 
Also ich bin nun etwas weiter gekommen :)

Wie folgt habe ich das nun zusammengebaut:

$compare_table = New-Object System.Object

foreach ($user in $AllUser) {

Add-Member -inputObject $compare_table -MemberType NoteProperty -Name Kürzel -Value "$($user.Name)" -force
Add-Member -inputObject $compare_table -MemberType NoteProperty -Name Given -Value "$($user.GivenName)" -force
Add-Member -inputObject $compare_table -MemberType NoteProperty -Name MemberDL -Value "$($user.MemberOf -match "DL_Stufe_")" -force
Add-Member -inputObject $compare_table -MemberType NoteProperty -Name MemberV -Value "$($user.MemberOf -match "V_Stufe_")" -force
$compare_table
$compare_table | Export-Csv -NoTypeInformation C:\temp\test_new.csv

Das wird mir beim Durchlaufen des ADs auch wunderbar alles angezeigt in der Shell. Will ich das nun in eine csv exportieren sehe ich iwie nur ein einziges Objekt und nicht die 100+. Seht ihr wo das Problem liegt?
 
timo2607 schrieb:
Seht ihr wo das Problem liegt?

Ja, du hast auch nur ein Object, da:

Code:
$compare_table = New-Object System.Object

Warum machst du das so kompliziert? Warum nicht einfach:

Code:
$AllUser | Export-CSV c:\bla.blupp.txt
 
expironec schrieb:
Ja, du hast auch nur ein Object, da:

Code:
$compare_table = New-Object System.Object

Warum machst du das so kompliziert? Warum nicht einfach:

Code:
$AllUser | Export-CSV c:\bla.blupp.txt


Hallo und sorry für die späte Antwort.
Das Problem ist, dass das nicht die einzigen Informationen sein sollen die in diese Tabelle gespeichert werden.
Da kommen noch zugehörige AD Gruppen mit rein, dann eine Abfrage aus der SQL DB, welches eine weite Zeile einnehmen soll.

Eventuell geht das ja auch, dann weiß ich leider nur nicht wie :(

Gruß
Timo
 
OK, dann basierend auf deinem Code sollte das so aussehen:

Code:
$arr = @()

foreach ($user in $AllUser) 
{
    $obj = New-Object psobject

    Add-Member -inputObject $obj -MemberType NoteProperty -Name "Kürzel" -Value "$($user.Name)"
    Add-Member -inputObject $obj -MemberType NoteProperty -Name "Given" -Value "$($user.GivenName)"
    Add-Member -inputObject $obj -MemberType NoteProperty -Name "MemberDL" -Value "$($user.MemberOf -match "DL_Stufe_")"
    Add-Member -inputObject $obj -MemberType NoteProperty -Name "MemberV" -Value "$($user.MemberOf -match "V_Stufe_")"

    $arr += $obj
}

$arr | Export-Csv C:\temp\test_new.csv
 
expironec schrieb:
OK, dann basierend auf deinem Code sollte das so aussehen:

Code:
$arr = @()

foreach ($user in $AllUser) 
{
    $obj = New-Object psobject

    Add-Member -inputObject $obj -MemberType NoteProperty -Name "Kürzel" -Value "$($user.Name)"
    Add-Member -inputObject $obj -MemberType NoteProperty -Name "Given" -Value "$($user.GivenName)"
    Add-Member -inputObject $obj -MemberType NoteProperty -Name "MemberDL" -Value "$($user.MemberOf -match "DL_Stufe_")"
    Add-Member -inputObject $obj -MemberType NoteProperty -Name "MemberV" -Value "$($user.MemberOf -match "V_Stufe_")"

    $arr += $obj
}

$arr | Export-Csv C:\temp\test_new.csv

So klappt es, dankeeeee :)
 
Zurück
Oben