christines
Goto Top

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 face-smile.

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

$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
     }
     }

Content-Key: 584006

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

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

Member: emeriks
emeriks Jul 02, 2020 updated at 15:12:13 (UTC)
Goto Top
Hi,
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.
Member: emeriks
emeriks Jul 02, 2020 at 15:13:54 (UTC)
Goto Top
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?
Bei dem Wert? Welchen?
Member: emeriks
emeriks Jul 02, 2020 updated at 15:15:10 (UTC)
Goto Top
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")
Member: ChristineS
ChristineS Jul 03, 2020 at 04:58:30 (UTC)
Goto Top
Hallo. Bei den ersten Läufen (als ich noch die Seriennummer usw. bekommen habe) eben zum Beispiel bei der Seriennummer, es waren aber unterschiedlich.
Member: ChristineS
ChristineS Jul 03, 2020 at 04:59:43 (UTC)
Goto Top
Nein, ich habe es immer mit dem gleichen User mit Adminrechten gestartet.
Member: ChristineS
ChristineS Jul 03, 2020 at 05:03:27 (UTC)
Goto Top
Für mich persönlich ist es leichter zu verstehen was passiert wenn ich es zuerst mal so sehe. Wenn ich dann alles kapiert habe und alles so läuft wie ich mir das vorstelle kümmere ich mich um die Möglichkeit es umzugestalten.
Member: emeriks
emeriks Jul 03, 2020 at 06:25:20 (UTC)
Goto Top
Zitat von @ChristineS:
Nein, ich habe es immer mit dem gleichen User mit Adminrechten gestartet.
Das war nicht meine Frage.
Member: ChristineS
ChristineS Jul 03, 2020 at 07:12:13 (UTC)
Goto Top
Es war nicht deine Frage, aber ich habe es als es funktioniert nicht extra mit "als Administrator ausführen" gestartet und danach auch nicht.
Ich starte die PowerShell ISE immer gleich. Und auch wenn ich es mit "als Administrator ausführen" gibt es keinen Unterschied, es wird trotzdem nichts zurückgeliefert.
Oder meinst du etwas anderes?
Member: emeriks
emeriks Jul 03, 2020 at 07:34:47 (UTC)
Goto Top
Zitat von @ChristineS:
Oder meinst du etwas anderes?
Nee. Jetzt erst bin ich sicher, dass Du mich richtig verstanden hattest.