PowerShell - Werte werden nicht ausgegeben und Formatierung Ausgabe
Hallo,
diese Abfrage im PS-Fenster (Windows PowerShell ISE)...
...gibt im PS-Fenster dieses Ergebnis zurück:
Die gleiche Abfrage, nur mit Umleitung in eine Datei...
...gibt in der Datei das aus:
Nun verwundert es mich, dass einige Werte nicht angezeigt werden, die aber definitiv hinterlegt sind (Beschreibung und MAC-Adresse). Woran kann das liegen?
Eine Frage noch zur Formatierung. Ist es möglich die Ausgabe in eine Datei so zu formatieren, dass die Ausgabe der Attribute pro Objekt in einer Zeile mit Trennzeichen ";" getrennt ausgegeben werden?
Solch eine Ausgabe in eine Datei meine ich:
(Dieser Beitrag beruht auf meinem vorherigen Beitrag vom gestrigen Tage: AD-Abfrage Attribute mittels Batch.)
Gruß
Torsten
diese Abfrage im PS-Fenster (Windows PowerShell ISE)...
Import-Module ActiveDirectory
Get-ADComputer -ldapfilter "((name=*))" -Properties Location | Where-Object {$_.Location -eq "TEST"} | select name,description,macaddress,location | format-list
...gibt im PS-Fenster dieses Ergebnis zurück:
name : PC-001
description :
macaddress : {}
location : Test
Die gleiche Abfrage, nur mit Umleitung in eine Datei...
Import-Module ActiveDirectory
Get-ADComputer -ldapfilter "((name=*))" -Properties Location | Where-Object {$_.Location -eq "TEST"} | select name,description,macaddress,location | Export-CSV C:\Users\Administrator.FOOD-SRV001.001\Desktop\PS-Test.txt | format-list
...gibt in der Datei das aus:
#TYPE Selected.Microsoft.ActiveDirectory.Management.ADComputer
"name","description","macaddress","location"
"BIOS-NB012",,"Microsoft.ActiveDirectory.Management.ADPropertyValueCollection","Test"
Nun verwundert es mich, dass einige Werte nicht angezeigt werden, die aber definitiv hinterlegt sind (Beschreibung und MAC-Adresse). Woran kann das liegen?
Eine Frage noch zur Formatierung. Ist es möglich die Ausgabe in eine Datei so zu formatieren, dass die Ausgabe der Attribute pro Objekt in einer Zeile mit Trennzeichen ";" getrennt ausgegeben werden?
Solch eine Ausgabe in eine Datei meine ich:
PC-001;Meine Beschreibung;40-16-7E-A7-1C-06;Test
PC-002;Meine Beschreibung;34-17-EB-9F-E1-53;Test
(Dieser Beitrag beruht auf meinem vorherigen Beitrag vom gestrigen Tage: AD-Abfrage Attribute mittels Batch.)
Gruß
Torsten
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 285747
Url: https://administrator.de/forum/powershell-werte-werden-nicht-ausgegeben-und-formatierung-ausgabe-285747.html
Ausgedruckt am: 22.12.2024 um 19:12 Uhr
16 Kommentare
Neuester Kommentar
Moin Torsten,
also ich habe hier in den Computer-Objekten kein solch ein Attribut MacAddress, habt Ihr das dem AD-Schema hinzugefügt ? Zusätzlich musst du die zusätzlich abzufragenden Properties auch explizit angeben oder -Properties * verwenden um alle abzufragen, sonst werden sie nicht mit aufgelistet und nur ein paar Default-Werte abgefragt!
Manche Objekte muss man hier auch manchmal expandieren wenn sie nicht als String ausgegeben werden:
Grüße Uwe
p.s. die ISE hat Parameter IntelliSense und Parametervervollständigung, einfach mal ausprobieren...dann siehst du welche Parameter ein Befehl aktzeptiert.
also ich habe hier in den Computer-Objekten kein solch ein Attribut MacAddress, habt Ihr das dem AD-Schema hinzugefügt ? Zusätzlich musst du die zusätzlich abzufragenden Properties auch explizit angeben oder -Properties * verwenden um alle abzufragen, sonst werden sie nicht mit aufgelistet und nur ein paar Default-Werte abgefragt!
Manche Objekte muss man hier auch manchmal expandieren wenn sie nicht als String ausgegeben werden:
Import-Module ActiveDirectory
Get-ADComputer -Filter * -Properties * | ?{$_.Location -eq "TEST"} | select name,description,@{n="macaddress";e={$_.macaddress.toString()}},location | Export-CSV "C:\Users\Administrator.FOOD-SRV001.001\Desktop\PS-Test.txt" -NoType -Delimiter ";" -Encoding UTF8
Eine Frage noch zur Formatierung. Ist es möglich die Ausgabe in eine Datei so zu formatieren, dass die Ausgabe der Attribute pro Objekt in einer Zeile mit Trennzeichen ";" getrennt ausgegeben werden?
Ist in meinem Code selbstverständlich schon umgesetzt -NoType entfernt die Typeninfo , -Delimiter setzt das Trennzeichen, und -Encoding UTF8 sorgt dafür das Sonderzeichen und Umlaute korrekt in die Datei wandern.Grüße Uwe
p.s. die ISE hat Parameter IntelliSense und Parametervervollständigung, einfach mal ausprobieren...dann siehst du welche Parameter ein Befehl aktzeptiert.
Zitat von @goodbytes:
Aber weshalb wird dieser String nicht angezeigt? Es kommt nur: "Microsoft.ActiveDirectory.Management.ADPropertyValueCollection".
Wenn ich es richtig sehe müsste ich den gewüschten String irgendwie aus der Collection, die ja ein Array ist, extrahieren, oder? Aber wie?
Bin gerade auf Dienstreise und kein Zugriff auf mein TestAD. Aber versuchs mal soAber weshalb wird dieser String nicht angezeigt? Es kommt nur: "Microsoft.ActiveDirectory.Management.ADPropertyValueCollection".
Wenn ich es richtig sehe müsste ich den gewüschten String irgendwie aus der Collection, die ja ein Array ist, extrahieren, oder? Aber wie?
Import-Module ActiveDirectory
Get-ADComputer -Filter * -Properties * | ?{$_.Location -eq "TEST"} | select name,description,@{n="macaddress";e={$_.macaddress -join ","}},location | Export-CSV "C:\Users\Administrator.FOOD-SRV001.001\Desktop\PS-Test.txt" -NoType -Delimiter ";" -Encoding UTF8
Bin leider erst nächste Woche wieder voll einsatzbereit
Eine Frage noch, kann ich die erste Zeile mit den Attributbezeichnungen irgendwie in der Ausgabe unterdrücken?
Meinst du die Überschriften der Spalten ? Denn die Typeninformationen werden schon durch den Parameter -NoType unterdrückt, das hatte ich schon.Berücksichtigt!Möchtest du hingegen die Überschriften der Spalten nicht geht das so:
Import-Module ActiveDirectory
Get-ADComputer -Filter * -Properties * | ?{$_.Location -eq "TEST"} | select name,description,@{n="macaddress";e={$_.macaddress -join ","}},location | ConvertTo-CSV -NoType -Delimiter ";" -Encoding UTF8 | select -skip 1 | Set-Content "C:\Users\Administrator.FOOD-SRV001.001\Desktop\PS-Test.txt" -UTF8
Ich mach das immer so ...
Grüße Uwe
@echo off
set "location=Lager"
Powershell -ExecutionPolicy ByPass -command "&{Import-Module ActiveDirectory; Get-ADComputer -Filter * -Properties * | ?{$_.Location -eq '%location%'} | select name,@{n='macaddress';e={$_.macaddress -join ','}},description | ConvertTo-CSV -NoType -Delimiter ';' | select -skip 1 | Set-Content 'C:\mac-list.txt' -Encoding UTF8}"
Grüße Uwe
Zitat von @goodbytes:
Also kann ich den PS-String nicht in einen eigenen Abschnitt stecken und
mittels "more +8 %0 | powershell -command - " aufrufen, weil ich die Variable nicht in den String bekomme...
Solltest du wie oben auch einfach mit der Variablen machen können. Variable einsetzen wird ja dann beim parsen derr Batch im Code ersetzt.Also kann ich den PS-String nicht in einen eigenen Abschnitt stecken und
mittels "more +8 %0 | powershell -command - " aufrufen, weil ich die Variable nicht in den String bekomme...
Mache das halt lieber als Einzeiler
Wenn ich den Code von dir so ausführe bekomme ich aber einen Fehler zurück:
Hatte noch einen kleinen Fehler drin sorry ... ist oben korrigiert.Ach so, kann man eigentlich die Ausgabe der Anführungszeichen in die Exportdatei irgendwie unterdrücken?
Kann man... Sei aber gewarnt: Wenn du in deinen Daten ein Semikolon drin haben solltest bekommst du natürlich Probleme ! Die haben schon ihren Zweck, gerade wenn man ein Feld mit den Namen "Description" exportiert!(Get-ADComputer -Filter * -Properties * | ?{$_.Location -eq 'Test'} | select name,@{n='macaddress';e={$_.macaddress -join ','}},description | ConvertTo-CSV -NoType -Delimiter ';' | select -skip 1) -replace '"','' | Set-Content 'C:\mac-list.txt' -Encoding UTF8
Wo ist da nur der Fehler?
Da Fehlt ein ^ vor der letzten Pipe@echo off
set "raum=Test"
Powershell -ExecutionPolicy ByPass -command "Import-Module ActiveDirectory; (Get-ADComputer -Filter * -Properties * | ?{$_.Location -eq '%raum%'} | select name,@{n='macaddress';e={$_.macaddress -join ','}},description | ConvertTo-CSV -NoType -Delimiter ';' | select -skip 1) -replace '\"','' ^| set-content -Path 'C:\maclist.txt'"
pause