Powershell - Hardware auslesen mit mehreren Monitore und zwei weiteren Fragen
Hallo,
zuerst mal zur Erklärung: ich lerne indem ich herumprobiere und anhand von Beispielen aus dem Netz damit ich auch etwas habe das mir Spass macht und mitunter meine Arbeit etwas einfacher zu machen ohne das es von meinem Arbeitgeber vorgesehen ist.
Aktuell versuche ich von unseren Computer einige Hardwareinfos auszulesen was auch soweit funktioniert und ich auch verstanden habe was ich da mache .
Hilfe beziehungsweise Erklärungen würde ich bei folgenden benötigen
1. Frage: Monitore
es sind bei einigen Computer mehrere Monitore angeschlossen, bei meinem Script wird mir nur der letzte ausgelesene ausgegeben. Ich bräuchte aber alle in der Ausgabe pro Monitor mit Komma getrennt und wenn es nur zwei gibt das die Felder Monitor3 und 4 leer sind.
Bespiel:
..vorige Felder;Monitor1,Monitor2;Monitor3;Monitor4;..weiteren Felder
;Hersteller,Seriennummer,Type;Hersteller,Seriennummer,Type;Hersteller,Seriennummer,Type;Hersteller,Seriennummer,Type;.........
Ich habe schon gelesen das ich dafür ein Array anlegen muß. Was ich anhand der gefunden Beispiele nicht kapiert habe ist wo und wie genau muß ich es einfügen und dann auch so ausgeben.
Vielleicht kann mir das jemand erklären?
2. Frage: Bei den ersten Läufen wurde mir ohne Problem die Seriennummer, IP Adresse und Mac Adresse der Computer ausgelesen bei den letzten Versuchen auf einmal nicht mehr. Ist so etwas bekannt? Wenn ich es direkt absetze kommt noch immer etwas retour.
3. Frage: Manchmal (bei wiederholter Abfrage auch von dem gleichen Computer) kommt statt dem korrekten Wert auch nur "System.Object" - Kann mir das jemand erklären?
Ich danke schon mal allen alleine für die Geduld das alles zu lesen und schon mal im voraus für Tips und Erklärungen.
Mein jetziges Script:
zuerst mal zur Erklärung: ich lerne indem ich herumprobiere und anhand von Beispielen aus dem Netz damit ich auch etwas habe das mir Spass macht und mitunter meine Arbeit etwas einfacher zu machen ohne das es von meinem Arbeitgeber vorgesehen ist.
Aktuell versuche ich von unseren Computer einige Hardwareinfos auszulesen was auch soweit funktioniert und ich auch verstanden habe was ich da mache .
Hilfe beziehungsweise Erklärungen würde ich bei folgenden benötigen
1. Frage: Monitore
es sind bei einigen Computer mehrere Monitore angeschlossen, bei meinem Script wird mir nur der letzte ausgelesene ausgegeben. Ich bräuchte aber alle in der Ausgabe pro Monitor mit Komma getrennt und wenn es nur zwei gibt das die Felder Monitor3 und 4 leer sind.
Bespiel:
..vorige Felder;Monitor1,Monitor2;Monitor3;Monitor4;..weiteren Felder
;Hersteller,Seriennummer,Type;Hersteller,Seriennummer,Type;Hersteller,Seriennummer,Type;Hersteller,Seriennummer,Type;.........
Ich habe schon gelesen das ich dafür ein Array anlegen muß. Was ich anhand der gefunden Beispiele nicht kapiert habe ist wo und wie genau muß ich es einfügen und dann auch so ausgeben.
Vielleicht kann mir das jemand erklären?
2. Frage: Bei den ersten Läufen wurde mir ohne Problem die Seriennummer, IP Adresse und Mac Adresse der Computer ausgelesen bei den letzten Versuchen auf einmal nicht mehr. Ist so etwas bekannt? Wenn ich es direkt absetze kommt noch immer etwas retour.
PS C:\WINDOWS\system32> Get-WmiObject -Class win32_bios -ComputerName xxxxxxxx
SMBIOSBIOSVersion : N2JET85W (1.63 )
Manufacturer : LENOVO
Name : N999999W (1.63 )
SerialNumber : P999999D
Version : LENOVO - 1630
Ich danke schon mal allen alleine für die Geduld das alles zu lesen und schon mal im voraus für Tips und Erklärungen.
Mein jetziges Script:
$computers = Get-Content -Path $Computerliste
foreach ($computer in $computers) {
If (Test-Connection -ComputerName $computer -Count 3 -Quiet) {
$abfrageDescription = Get-ADComputer -Filter {name -Like $Computer} -Properties description
$abfrageBios = Get-WmiObject -Class win32_bios -ComputerName $Computer
$abfrageHardware = Get-WmiObject -Class Win32_computerSystem -ComputerName $Computer
$abfrageSysbuild = Get-WmiObject -Class Win32_WmiSetting -ComputerName $Computer
$abfrageOS = Get-WmiObject -Class Win32_OperatingSystem -ComputerName $Computer
$abfrageNetworks = Get-WmiObject -Class Win32_NetworkAdapterConfiguration -ComputerName $Computer | Where-Object {$_.IPEnabled}
**$abfragemonitor = Get-WmiObject -Class wmimonitorid -ComputerName $computer -Namespace root\wmi**
$abfragecpu = Get-WmiObject -Class Win32_Processor -ComputerName $computer
$abfrageusername = Get-ChildItem "\\$computer\c$\Users" | Sort-Object -Property LastWriteTime -Descending | Select-Object -Property Name, LastWriteTime -First 1
$abfragelastBoot = Get-ADComputer -Identity $Computer -Properties * | select LastLogonDate
$abfrageIPAddress = $Networks.IpAddress
$abfrageMACAddress = $Networks.MACAddress
$abfragesystemBios = $Bios.serialnumber
** $abfragemonitorManufacture = ($abfragemonitor.ManufacturerName -notmatch 0 | foreach {[char]$_}) -join ""
$abfragemonitorName = ($abfragemonitor.UserFriendlyName -notmatch 0 | foreach {[char]$_}) -join ""
$abfragemonitorSerial = ($abfragemonitor.SerialNumberID -notmatch 0 | foreach {[char]$_}) -join ""**
$OutputObj = New-Object -TypeName PSObject
$OutputObj | Add-Member -MemberType NoteProperty -Name ComputerName -Value $Computer.ToUpper()
$OutputObj | Add-Member -MemberType NoteProperty -Name Description -Value $abfrageDescription.Description
$OutputObj | Add-Member -MemberType NoteProperty -Name Manufacturer -Value $abfrageHardware.Manufacturer
$OutputObj | Add-Member -MemberType NoteProperty -Name Model -Value $abfrageHardware.Model
$OutputObj | Add-Member -MemberType NoteProperty -Name Processor_Type -Value $abfragecpu.Name
$OutputObj | Add-Member -MemberType NoteProperty -Name System_Type -Value $abfrageHardware.SystemType
$OutputObj | Add-Member -MemberType NoteProperty -Name Operating_System -Value $abfrageOS.Caption
$OutputObj | Add-Member -MemberType NoteProperty -Name Operating_System_Version -Value $abfrageOS.version
$OutputObj | Add-Member -MemberType NoteProperty -Name Operating_System_BuildVersion -Value $abfrageSysBuild.BuildVersion
$OutputObj | Add-Member -MemberType NoteProperty -Name Serial_Number -Value $abfragesystemBios
$OutputObj | Add-Member -MemberType NoteProperty -Name IP_Address -Value $abfrageIPAddress
$OutputObj | Add-Member -MemberType NoteProperty -Name MAC_Address -Value $abfrageMACAddress
$OutputObj | Add-Member -MemberType NoteProperty -Name Last_User -Value $abfrageusername.Name
$OutputObj | Add-Member -MemberType NoteProperty -Name User_Last_Login -Value $abfrageusername.LastWriteTime
** $OutputObj | Add-Member -MemberType NoteProperty -Name MonitorManufacturer -Value $abfragemonitorManufacture
$OutputObj | Add-Member -MemberType NoteProperty -Name MonitorName -Value $abfragemonitorName
$OutputObj | Add-Member -MemberType NoteProperty -Name MonitorSerial -Value $abfragemonitorSerial**
$OutputObj | Add-Member -MemberType NoteProperty -Name Last_ReBoot -Value $abfragelastboot.LastLogonDate
$OutputObj | export-csv -Path $Ausgabedatei -Append -Force
Clear-Variable abfrage*
}
Else {
$Computer | out-file -Append -Encoding Default $InAktive
}
}
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 584006
Url: https://administrator.de/forum/powershell-hardware-auslesen-mit-mehreren-monitore-und-zwei-weiteren-fragen-584006.html
Ausgedruckt am: 15.01.2025 um 10:01 Uhr
9 Kommentare
Neuester Kommentar
Hi,
am Rande:
Zeile 27: Warum nicht gleich das Objekt mit allen Eigenschaften erstellen, statt dieser vielen, vielen Add-Zeilen?
E.
am Rande:
Zeile 27: Warum nicht gleich das Objekt mit allen Eigenschaften erstellen, statt dieser vielen, vielen Add-Zeilen?
$OutputObj = New-Object -TypeName PSObject -Property @{
ComputerName = $Computer.ToUpper()
Description = $abfrageDescription.Description
Manufacturer = $abfrageHardware.Manufacturer
Model = $abfrageHardware.Model
... usw. ...
}
E.
2. Frage: Bei den ersten Läufen wurde mir ohne Problem die Seriennummer, IP Adresse und Mac Adresse der Computer ausgelesen bei den letzten Versuchen auf einmal nicht mehr. Ist so etwas bekannt? Wenn ich es direkt absetze kommt noch immer etwas retour.
Könnte es sein, dass Du vergessen hast, das Script voll eleviert auszuführen? ("als Administrator ausführen")
Das war nicht meine Frage.
Nee. Jetzt erst bin ich sicher, dass Du mich richtig verstanden hattest.