Zum Inhalt wechseln


Foto

Powershell Array-Ausgabe verändern, sortieren, korrigieren

Windows 7

  • Bitte melde dich an um zu Antworten
10 Antworten in diesem Thema

#1 Pikus1234

Pikus1234

    Newbie

  • 18 Beiträge

 

Geschrieben 30. Juni 2017 - 09:39

Hallo an die Gemeinde und Wissenden hier. Ich hab wieder eine Frage an Euch.

 

Ich möchte eine Hardwareinventur per Powershell bei mir aufbauen. 2 bekannte und gut funktionierende Scripte habe ich dazu gefunden und auf meine Bedürfnisse angepasst .

 

1.) PC Inventory

2.) EDID-Abfrage nach aktiven Monitoren des PC

 

Nun sollen diese Scripte entsprechend die Daten in CSV ausgeben, damit SIe weiterverarbeitet werden können.

Es ist dabei zu erwähnen, dass die PC aus einer txt.Datei ausgelesen, auf OnlineStatus geprüft und abgefragt werden.

 

Bei der Ausgabe der Monitore zum PC komme ich aber an meine Grenze, denn ich bekomme den dazugehörigen Monitor nicht dem PC zugeordnet.

Die Ausgabe in Powershell zeigt unter Computername immer alle Namen aus der o.g. Txt-Datei  {Name,Name....} an und ordnet diesen nicht den gefundenen Monitoren korrekt zu. Hier gebe ich sicherlich die Objekte in der Pipeline falsch aus bzw. sortiere Sie nicht korrekt.

 

Sicherlich ist die Lösung sooo einfach, aber ich komme (Anfänger pur) nicht auf die Lösung.

#######Ab hier werden die ermittelten PC´s aus der txt-Datei ausgelesen!
$computers = Get-Content -Path 'C:\livePCs.txt'
 
foreach ($computer in $computers) {
    $Bios = Get-WmiObject win32_bios -Computername $Computer
    $Hardware = Get-WmiObject Win32_computerSystem -Computername $Computer

    $systemBios = $Bios.serialnumber

$OutputObj  = New-Object -Type PSObject
$OutputObj | Add-Member -MemberType NoteProperty -Name ComputerName -Value $Computer.ToUpper()
$OutputObj | Add-Member -MemberType NoteProperty -Name Serial_Number -Value $systemBios

#####Nun werden diese Daten in eine CSV gespeichert und weiter zu den Monitoren....
###################### ab hier werden Infos über die angeschlossenen Monitore gesammelt 

 $computer = Get-Content -Path 'C:\livePCs.txt'
 $ActiveMonitors = Get-WmiObject -Namespace root\wmi -Class wmiMonitorID -ComputerName $computer
    $monitorInfo = @()
    $Serial_Number = $systemBios
    $ComputerName  = $Computer
    $i= 1
     foreach ($monitor in $ActiveMonitors)
     {
     $mon = $null
     $mon = New-Object PSObject
     $manufacturer = $null
     $dspserial = $null
     $name = $null
     $week = $null
     $year = $null

    $monitor.ManufacturerName | foreach {$manufacturer += [char]$_}
    $monitor.SerialNumberID   | foreach {$dspserial += [char]$_}
    $monitor.UserFriendlyName | foreach {$name += [char]$_}

    $mon | Add-Member NoteProperty ComputerName $Computer.ToUpper()
    $mon | Add-Member NoteProperty Serial_Number $systemBios
    $mon | Add-Member NoteProperty Manufacturer $manufacturer
    $mon | Add-Member NoteProperty SerialNumber $dspserial
    $mon | Add-Member NoteProperty Name $name
    $mon | Add-Member NoteProperty Week $monitor.WeekOfManufacture
    $mon | Add-Member NoteProperty Year $monitor.YearOfManufacture
    $mon.SerialNumber = $dspserial.trim()
    $monitorInfo += $mon
    $i++
    }
#Hier sieht man im Output, wenn es mehr als 1 PC ist, dass die Ausgabe falsch ist und #zwar exakt die Ausgabe der PC-Daten zum Array der Monitore. 
#Wer kann helfen die Zuordnung mit anschließendem Export zu CSV zu komplettieren.

 Write-Output $monitorInfo 

#Ausgabe ist:
# Die Monitore sind stimmig = nur die PC und Seriennummer-Zuordnung ist fehlerhaft

#ComputerName : {xxxxxxx, xxxxxxxxx} 
#PCSerial     : xxxxxxxx - nur 1 Seriennummer des 1. PC leider 
#Manufacturer : GSM             
#SerialNumber : 609NTUW6W678    
#Name         : 22MB65       
#Week         : 9
#Year         : 2016
 
#ComputerName : {xxxxxxx, xxxxxxxxx}
#PCSerial     : xxxxxxxx - nur 1 Seriennummer des 1. PC leider (wieder dieselbe S/N)
#Manufacturer : GSM             
#SerialNumber : 609NTAB6W680    
#Name         : 22MB65       
#Week         : 9
#Year         : 2016

Ich hoffe hier hat jemand das Problem erkannt und kann mir helfen die Ausgabe der Daten zu korrigieren, Nämlich zu jeden erkannten Monitor muss der korrekte PC mit Seriennummer zugeordnet werden. Natürlich wäre es noch schöner wenn die Ausgabe-CSV der PC Daten mit der Ausgabe der Monitordaten nur ergänzt würde. Aber da bin ich gänzlich gescheitert und hab das erst mal verworfen, weil mir das KnowHow fehlt. Trotz Google war nichts zu machen.

 

MfG Pikus

 



#2 BOfH_666

BOfH_666

    Junior Member

  • 132 Beiträge

 

Geschrieben 30. Juni 2017 - 09:58

Pikus,

 

es wäre einfacher und schneller, wenn Du beide Abfragen, also PC und Monitore, in einer Schleife erledigst. Du musst Dir dabei nur überlegen, wie Du damit umgehst, wenn ein PC mehr als einen Monitor angeschlossen hast. Wieviele Monitore kann ein PC in Deiner Infrastruktur denn maximal haben?


Bearbeitet von BOfH_666, 30. Juni 2017 - 09:58.

live long and prosper!

PS:> (79,108,97,102|%{[char]$_})-join''

#3 Pikus1234

Pikus1234

    Newbie

  • 18 Beiträge

 

Geschrieben 30. Juni 2017 - 10:05

Ja das würde ich gern in einer Schleife erledigen und gleich mit den Daten in eine CSV schreiben lassen. Leider fehlt mir dazu das KnowHow. Meine Versuche mittels Google und meinem Verständnis das umzusetzen habe ich nach 2 Tagen intensiven Testens aufgegeben. Deswegen bin ich doch jetzt auf Hilfe von Euch angewiesen.

 

Maximal können in unserer Struktur 3 Displays am PC verwendet sein. (Die evtl. mit angeschlossenen Beamer werden hier nicht betrachtet.)



#4 BOfH_666

BOfH_666

    Junior Member

  • 132 Beiträge

 

Geschrieben 30. Juni 2017 - 12:11

Hmmm ... ok ... bestimmt nicht der eleganteste oder effizienteste Code, aber als Inspirationsquelle sollte es genügen, hoffe ich.

$ComputerList = Get-Content -Path 'C:\livePCs.txt'
 
$Inventory = foreach ($ComputerName in $ComputerList) {
    $SessionOption = New-CimSessionOption -Protocol Dcom
    $CIMSession = New-CimSession -ComputerName $ComputerName
    $Bios = Get-CimInstance -ClassName win32_bios -CimSession $CIMSession
    $Hardware = Get-CimInstance -ClassName  Win32_computerSystem  -CimSession $CIMSession
    [ARRAY]$MonitorList = Get-WmiObject -Class WMIMonitorID -Namespace root\wmi -ComputerName $ComputerName

    [PSCustomObject]@{
        ComputerName = $ComputerName.ToUppper()
        SystemBios = $Bios.serialnumber
        Monitor1Manufacturer     = If($MonitorList[0]){($MonitorList[0].ManufacturerName -notmatch '^0$' | ForEach-Object {[CHAR]$_}) -join ''}Else{'N/A'}
        Monitor1UserFriendlyName = If($MonitorList[0]){($MonitorList[0].UserFriendlyName -notmatch '^0$' | ForEach-Object {[CHAR]$_}) -join ''}Else{'N/A'}
        Monitor1SerialNumberID   = If($MonitorList[0]){($MonitorList[0].SerialNumberID -notmatch '^0$'   | ForEach-Object {[CHAR]$_}) -join ''}Else{'N/A'}
        Monitor2Manufacturer     = If($MonitorList[1]){($MonitorList[1].ManufacturerName -notmatch '^0$' | ForEach-Object {[CHAR]$_}) -join ''}Else{'N/A'}
        Monitor2UserFriendlyName = If($MonitorList[1]){($MonitorList[1].UserFriendlyName -notmatch '^0$' | ForEach-Object {[CHAR]$_}) -join ''}Else{'N/A'}
        Monitor2SerialNumberID   = If($MonitorList[1]){($MonitorList[1].SerialNumberID -notmatch '^0$'   | ForEach-Object {[CHAR]$_}) -join ''}Else{'N/A'}
        Monitor3Manufacturer     = If($MonitorList[2]){($MonitorList[2].ManufacturerName -notmatch '^0$' | ForEach-Object {[CHAR]$_}) -join ''}Else{'N/A'}
        Monitor3UserFriendlyName = If($MonitorList[2]){($MonitorList[2].UserFriendlyName -notmatch '^0$' | ForEach-Object {[CHAR]$_}) -join ''}Else{'N/A'}
        Monitor3SerialNumberID   = If($MonitorList[2]){($MonitorList[2].SerialNumberID -notmatch '^0$'   | ForEach-Object {[CHAR]$_}) -join ''}Else{'N/A'}
    }
}
$Inventory

... das lässt sich natürlich noch beliebig erweitern oder verbessern.  ... na probier erst mal   ;)

Achso ... Du brauchst Powershell 3.0 wenn ich mich nicht irre ...  


live long and prosper!

PS:> (79,108,97,102|%{[char]$_})-join''

#5 MurdocX

MurdocX

    Board Veteran

  • 546 Beiträge

 

Geschrieben 01. Juli 2017 - 10:18

Hmmm ... ok ... bestimmt nicht der eleganteste oder effizienteste Code, aber als Inspirationsquelle sollte es genügen, hoffe ich.

 

... das lässt sich natürlich noch beliebig erweitern oder verbessern.  ... na probier erst mal   ;)

Achso ... Du brauchst Powershell 3.0 wenn ich mich nicht irre ...  

 

$SessionOption u. $Hardware finden bleiben unbenutzt in deinem Script  :p

 

Ein ähnliches Script habe ich auch mal geschrieben  :)  Sieht soweit ganz gut aus. 

 

@Pikus:

Dafür das du nicht viel von Powershell verstehst, sieht das Script oben aber leicht komplex aus  ;)


Mit freundlicher Unterstützung
Jan


#6 BOfH_666

BOfH_666

    Junior Member

  • 132 Beiträge

 

Geschrieben 01. Juli 2017 - 11:56

$SessionOption u. $Hardware finden bleiben unbenutzt in deinem Script  :p

 

.... outsch .. das kommt davon wenn man aus 3 Scripten eins machen will ...  Danke für's  "Debuggen"  .... aber dann hat ja Pikus jetzt quasi gleich noch ein bissl Verbesserungspotential .... na ma kukn, ob er sich nochmal meldet.


live long and prosper!

PS:> (79,108,97,102|%{[char]$_})-join''

#7 Pikus1234

Pikus1234

    Newbie

  • 18 Beiträge

 

Geschrieben 03. Juli 2017 - 12:06

Hallo Ihr Beiden,

 

Natürlich melde ich mich nochmal. Und auch nachdem ich eure Gedanken umsetzen konnte. Heute komme ich leider nicht mehr dazu , und werde mich morgen wieder meinem Script widmen können.

Natürlich sieht der Code recht komplex aus. Aber nicht vergessen......Copy and Paste by Google. Deshalb sieht´s  besser aus als es ist. Ich verstehe im Groben ja auch was da passiert.

Ich habe die einzelnen Schritte versucht in der PS.exe nachzuvollziehen. Da fehlt mir schon ein großes Stück wissen. Ich betreibe hier also Learning by Doing.

Daher bin ich für jede gute Erklärung und Erkenntnis im Rahmen dessen glücklich. Aber ich bin lernwillig und fähig. Werde über die Fortschritte berichten und bestimmt wieder "anstrengende Fragen" haben, wo ich einfach auf Eure Hilfe hoffe. Mehr dazu wie gesagt ab Morgen.

 

Vielen Dank :thumb1:  :ph34r:



#8 BOfH_666

BOfH_666

    Junior Member

  • 132 Beiträge

 

Geschrieben 03. Juli 2017 - 12:13

na das klingt doch supi ....  dann denke ich, würde es sich für Dich bestimmt lohnen, Dir die Basics von Powershell mal "geordnet, strukturiert und didaktisch vernünftig aufbereitet" überzuhelfen. ;-)

 

Hier sind ein paar Ressourcen verlinkt, die Dir einen guten Einstieg ermöglichen sollten. Besonders die beiden "Jump Starts", die in Jeffrey's Post verlinkt sind, sind sehr zu empfehlen.

 

https://powershell.o...sing-csv-files/


live long and prosper!

PS:> (79,108,97,102|%{[char]$_})-join''

#9 Pikus1234

Pikus1234

    Newbie

  • 18 Beiträge

 

Geschrieben 04. Juli 2017 - 11:29

Link ist gespeichert und wird natürlich eingehend gesichtet. Nebenbei schau ich ja auch von Peter Kriegel die Youtube-Reihe "German Powershell Basis Video Tutorial. Also Stück für Stück wird's werden.

 

Nun zum Script = Stand heute:

 

Ich habe deinen Sciptvorschlag eingebaut und bin zu einem fast akzeptablen Ergebnis gelangt. Eine CimSession kann ich in unserem Netzwerk nicht eröffnen, weil die Ports wahrscheinlich nicht geöffnet sind, oder Dienste nicht entsprechend konfiguriert sind. Wie auch immer, es war keine Kommunikation über diesen Weg möglich. Ich habe weiter über den WMI der Rechner die Daten abgefragt.

 

Mein vorläufig funktionierend fertiges Script. Nur der CSV-Export funktioniert nur korrekt, wenn ich es in 2 Dateien speichern lasse. Ich hätte gern nur 1 CSV-Datei. Daran arbeite ich jetzt noch.

#  *** THIS SCRIPT IS PROVIDED WITHOUT WARRANTY, USE AT YOUR OWN RISK ***
 
$testcomputers = "PCHostName1", "PCHostname2" #oder Get-Content -Path 'C:\computers.txt'
$exportLocation = 'C:\pcInventoryPC.csv'
$exportLocation1 = 'C:\pcInventoryMon.csv'
 
# PC Connection Test bevor die PC´s ihre Inventur bekommen (Wenn online = speichern in live-PCs.txt Start Inventory, wenn offline = Gespeichert in dead.pcs.txt = keine Aktion)
foreach ($computer in $testcomputers) {
  if (Test-Connection -ComputerName $computer -Quiet -count 2){
    Add-Content -value $computer -path C:\livePCs.txt 
  }else{
    Add-Content -value $computer -path C:\deadPCs.txt 
  }
}
 
 
# Nun wissen wir welche PC online sind
# Prozedur mit der Inventory
 
$computers = Get-Content -Path 'C\livePCs.txt'
 
    $Inventory = foreach ($computer in $computers) {
    $Bios = Get-WmiObject win32_bios -Computername $computer
    $Hardware = Get-WmiObject Win32_computerSystem -Computername $computer
    $Sysbuild = Get-WmiObject Win32_WmiSetting -Computername $computer
    $OS = Get-WmiObject Win32_OperatingSystem -Computername $computer
    $Networks = Get-WmiObject Win32_NetworkAdapterConfiguration -ComputerName $computer |   Where-Object {$_.IPEnabled}
    $driveSpace = Get-WmiObject win32_volume -computername $Computer -Filter 'drivetype    = 3' | 
    Select-Object PScomputerName, driveletter, label, @{LABEL='GBfreespace';EXPRESSION={'{0:N2}' -f($_.freespace/1GB)} } |
    Where-Object { $_.driveletter -match 'C:' }
    $cpu = Get-WmiObject Win32_Processor  -computername $computer
    $username = Get-ChildItem "\\$computer\c$\Users" | Sort-Object LastWriteTime -Descending | Select-Object Name, LastWriteTime -first 1
    $totalMemory = [math]::round($Hardware.TotalPhysicalMemory/1024/1024/1024, 2)
    $lastBoot = $OS.ConvertToDateTime($OS.LastBootUpTime) 
    $IPAddress  = $Networks.IpAddress[0]
    $MACAddress  = $Networks.MACAddress
    $systemBios = $Bios.serialnumber
    [ARRAY]$MonitorList = Get-WmiObject -Class WMIMonitorID -Namespace root\wmi -ComputerName $computer
        [PSCustomObject]@{
        ComputerName = $computer
        PCSerial = $Bios.serialnumber
        Monitor1Hersteller     = If($MonitorList[0]){($MonitorList[0].ManufacturerName -notmatch '^0$' | ForEach-Object {[CHAR]$_}) -join ''}Else{'N/A'}
        Monitor1Typ            = If($MonitorList[0]){($MonitorList[0].UserFriendlyName -notmatch '^0$' | ForEach-Object {[CHAR]$_}) -join ''}Else{'N/A'}
        Monitor1Seriennummer   = If($MonitorList[0]){($MonitorList[0].SerialNumberID -notmatch '^0$'   | ForEach-Object {[CHAR]$_}) -join ''}Else{'N/A'}
        Monitor2Hersteller     = If($MonitorList[1]){($MonitorList[1].ManufacturerName -notmatch '^0$' | ForEach-Object {[CHAR]$_}) -join ''}Else{'N/A'}
        Monitor2Typ            = If($MonitorList[1]){($MonitorList[1].UserFriendlyName -notmatch '^0$' | ForEach-Object {[CHAR]$_}) -join ''}Else{'N/A'}
        Monitor2Seriennummer   = If($MonitorList[1]){($MonitorList[1].SerialNumberID -notmatch '^0$'   | ForEach-Object {[CHAR]$_}) -join ''}Else{'N/A'}
        Monitor3Hersteller     = If($MonitorList[2]){($MonitorList[2].ManufacturerName -notmatch '^0$' | ForEach-Object {[CHAR]$_}) -join ''}Else{'N/A'}
        Monitor3Typ            = If($MonitorList[2]){($MonitorList[2].UserFriendlyName -notmatch '^0$' | ForEach-Object {[CHAR]$_}) -join ''}Else{'N/A'}
        Monitor3Seriennummer   = If($MonitorList[2]){($MonitorList[2].SerialNumberID -notmatch '^0$'   | ForEach-Object {[CHAR]$_}) -join ''}Else{'N/A'}
        }
 
    $OutputObj  = New-Object -Type PSObject
    $OutputObj | Add-Member -MemberType NoteProperty -Name ComputerName -Value $Computer.ToUpper()
    $OutputObj | Add-Member -MemberType NoteProperty -Name Manufacturer -Value $Hardware.Manufacturer
    $OutputObj | Add-Member -MemberType NoteProperty -Name Model -Value $Hardware.Model
    $OutputObj | Add-Member -MemberType NoteProperty -Name Processor_Type -Value $cpu.Name
    $OutputObj | Add-Member -MemberType NoteProperty -Name System_Type -Value $Hardware.SystemType
    $OutputObj | Add-Member -MemberType NoteProperty -Name Operating_System -Value $OS.Caption
    $OutputObj | Add-Member -MemberType NoteProperty -Name Operating_System_Version -Value $OS.version
    $OutputObj | Add-Member -MemberType NoteProperty -Name Operating_System_BuildVersion -Value $SysBuild.BuildVersion
    $OutputObj | Add-Member -MemberType NoteProperty -Name Serial_Number -Value $systemBios
    $OutputObj | Add-Member -MemberType NoteProperty -Name IP_Address -Value $IPAddress
    $OutputObj | Add-Member -MemberType NoteProperty -Name MAC_Address -Value $MACAddress
    $OutputObj | Add-Member -MemberType NoteProperty -Name Last_User -Value $username.Name
    $OutputObj | Add-Member -MemberType NoteProperty -Name User_Last_Login -Value $username.LastWriteTime
    $OutputObj | Add-Member -MemberType NoteProperty -Name C:_FreeSpace_GB -Value $driveSpace.GBfreespace
    $OutputObj | Add-Member -MemberType NoteProperty -Name Total_Memory_GB -Value $totalMemory
    $OutputObj | Add-Member -MemberType NoteProperty -Name Last_ReBoot -Value $lastboot
    $OutputObj | Export-Csv $exportLocation -Append -NoTypeInformation -Force
}
$Inventory
    $Inventory | Export-Csv $exportLocation1 -Append -NoTypeInformation -Force

#Wenn jetzt noch beide CSV-Dateien in eine zusammenverarbeitet werden können, ohne dass #die Daten verlorengehen (noClobber, Add-Content etc.) dann würde ich sagen = Super!

Write-Host "Script beendet"

Soweit meine Gedanken und Umsetzung zur Thematik.

 

Abschließend ist diese Inventory natürlich noch nicht, denn weitere noch fehlende Hardware ist:

angeschlossene Scanner und lokale Drucker mit Ihren Daten : Hersteller, Modell, Seriennummer.

Aber das wird nach ersten Recherchen wohl verdammt schwierig. Hilfe ist natürlich auf jeden Fall erwünscht.

 

:thumb1:  :thumb1:  :)



#10 BOfH_666

BOfH_666

    Junior Member

  • 132 Beiträge

 

Geschrieben 04. Juli 2017 - 13:40

Du machst Dir's gern selbst ein bissl schwer, oder?   ;)

#  *** THIS SCRIPT IS PROVIDED WITHOUT WARRANTY, USE AT YOUR OWN RISK ***
 
$testcomputers = "PCHostName1", "PCHostname2" #oder Get-Content -Path 'C:\computers.txt'
$exportLocation = 'C:\pcInventoryPC.csv'
 
# PC Connection Test bevor die PC´s ihre Inventur bekommen (Wenn online = speichern in live-PCs.txt Start Inventory, wenn offline = Gespeichert in dead.pcs.txt = keine Aktion)
foreach ($computer in $testcomputers) {
  if (Test-Connection -ComputerName $computer -Quiet -count 1){
    Add-Content -value $computer -path C:\livePCs.txt 
  }else{
    Add-Content -value $computer -path C:\deadPCs.txt 
  }
}
 
# Nun wissen wir welche PC online sind
# Prozedur mit der Inventory
 
$computers = Get-Content -Path 'C\livePCs.txt'
 
$Inventory = foreach ($computer in $computers) {
        $Bios = Get-WmiObject win32_bios -Computername $computer
        $Hardware = Get-WmiObject Win32_computerSystem -Computername $computer
        $Sysbuild = Get-WmiObject Win32_WmiSetting -Computername $computer
        $OS = Get-WmiObject Win32_OperatingSystem -Computername $computer
        $Networks = Get-WmiObject Win32_NetworkAdapterConfiguration -ComputerName $computer | Where-Object {$_.IPEnabled}
        $driveSpace = Get-WmiObject win32_volume -computername $Computer -Filter 'drivetype    = 3' |
            Select-Object PScomputerName, driveletter, label, @{LABEL='GBfreespace';EXPRESSION={'{0:N2}' -f($_.freespace/1GB)} } |
                Where-Object { $_.driveletter -match 'C:' }
        $cpu = Get-WmiObject Win32_Processor  -computername $computer
        $username = Get-ChildItem "\\$computer\c$\Users" | Sort-Object LastWriteTime -Descending | Select-Object Name, LastWriteTime -first 1
        [ARRAY]$MonitorList = Get-WmiObject -Class WMIMonitorID -Namespace root\wmi -ComputerName $computer

        [PSCustomObject]@{
            ComputerName           = $Computer.ToUpper()
            Manufacturer           = $Hardware.Manufacturer
            Model                  = $Hardware.Model
            Processor_Type         = $cpu.Name
            System_Type            = $Hardware.SystemType
            Operating_System       = $OS.Caption
            Operating_System_Version = $OS.version
            Operating_System_BuildVersion = $SysBuild.BuildVersion
            Serial_Number          = $Bios.serialnumber
            IP_Address             = $Networks.IpAddress[0]
            MAC_Address            = $Networks.MACAddress
            Last_User              = $username.Name
            User_Last_Login        = $username.LastWriteTime
            'C:_FreeSpace_GB'      = $driveSpace.GBfreespace
            Total_Memory_GB        = [math]::round($Hardware.TotalPhysicalMemory/1024/1024/1024, 2)
            Last_ReBoot            = $OS.ConvertToDateTime($OS.LastBootUpTime)
            Monitor1Hersteller     = If($MonitorList[0]){($MonitorList[0].ManufacturerName -notmatch '^0$' | ForEach-Object {[CHAR]$_}) -join ''}Else{'N/A'}
            Monitor1Typ            = If($MonitorList[0]){($MonitorList[0].UserFriendlyName -notmatch '^0$' | ForEach-Object {[CHAR]$_}) -join ''}Else{'N/A'}
            Monitor1Seriennummer   = If($MonitorList[0]){($MonitorList[0].SerialNumberID -notmatch '^0$'   | ForEach-Object {[CHAR]$_}) -join ''}Else{'N/A'}
            Monitor2Hersteller     = If($MonitorList[1]){($MonitorList[1].ManufacturerName -notmatch '^0$' | ForEach-Object {[CHAR]$_}) -join ''}Else{'N/A'}
            Monitor2Typ            = If($MonitorList[1]){($MonitorList[1].UserFriendlyName -notmatch '^0$' | ForEach-Object {[CHAR]$_}) -join ''}Else{'N/A'}
            Monitor2Seriennummer   = If($MonitorList[1]){($MonitorList[1].SerialNumberID -notmatch '^0$'   | ForEach-Object {[CHAR]$_}) -join ''}Else{'N/A'}
            Monitor3Hersteller     = If($MonitorList[2]){($MonitorList[2].ManufacturerName -notmatch '^0$' | ForEach-Object {[CHAR]$_}) -join ''}Else{'N/A'}
            Monitor3Typ            = If($MonitorList[2]){($MonitorList[2].UserFriendlyName -notmatch '^0$' | ForEach-Object {[CHAR]$_}) -join ''}Else{'N/A'}
            Monitor3Seriennummer   = If($MonitorList[2]){($MonitorList[2].SerialNumberID -notmatch '^0$'   | ForEach-Object {[CHAR]$_}) -join ''}Else{'N/A'}
        }  ### End PSCustomObject
} ### End Foreach Computer

$Inventory
  
$Inventory | Export-Csv $exportLocation -NoTypeInformation -Force

... den Rest darfst Du gern selbst noch ein bissl verbessern.


Bearbeitet von BOfH_666, 04. Juli 2017 - 14:46.

live long and prosper!

PS:> (79,108,97,102|%{[char]$_})-join''

#11 Pikus1234

Pikus1234

    Newbie

  • 18 Beiträge

 

Geschrieben 05. Juli 2017 - 07:24   Lösung

:schreck:  :D  :jau:  so einfach kann es sein..... Ich sagte ja "Anfänger" grinsss. Da hab ich die Macht der geschweiften Klammern unterschätzt. Vielen Dank natürlich für den erfahrenen Weitblick.

Jetzt bin ich tatsächlich hochauf und zufrieden mit dem Ergebnis.

 

Also weiter im Text und schauen wie Drucker und Scanner sich finden lassen. Vielen Dank. Neue Fragen werden kommen.

:thumb1:  :thumb1: :thumb1:  :thumb1:  





Auch mit einem oder mehreren der folgenden Tags versehen: Windows 7