Jump to content

PC Netzwerkabfrage mit Poweshell


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Moin Leute,

 

hoffe ich bin hier richtig und ihr könnt mir helfen. Versuche gerade in Powershell einzusteigen und ehrlich gesagt finde ich es noch etwas kryptisch. Habe allerdings auch keinerlei Vorkenntnisse

was Programmierung anbelangt.

Sitze jetzt vor folgendem Problem. Ich möchte über PS alle PCs im Netzwerk nach bestimmten Information abragen. Es handelt sich alles um WMI Abfragen. So z.B. PC Model, S/N, IPconfig usw. Die PCs werden aus einer Liste ausgelesen

und sollten dann in einer Tabelle Zeile für Zeile für den jeweiligen PC mit entsprechden Infos ausgegeben werden. Habe es nicht hinbekommen erst einen einzelnen PC mit allen Abfragen anzusteuern. Dementsprechend musste ich die WMI Befehle nacheinander ausführen. Habe jetzt also mehere "Listen". Also eine mit den S/N von allen PCs, eine mit den Modellen usw. Wie bekomme  ich diese jetzt so zusammengefügt, dass ich wie oben erwähnt eine Liste habe mit dem PCs und dahinter die entsprechenenden Werte? Momentan habe ich die einzelnen Werte für jeden PC in unterschiedlichen Zeilen.

Hoffe ihr habt ein Idee? Habe das, was ich bis jetzt habe mal eingefügt. Danke im voraus

$pcs = Get-Content C:\pc.txt
test-connection -computername $pcs  -count 1 -quiet
$cs = $pcs | foreach {get-wmiobject win32_Computersystem -computername $_} | select Name,Model
$bios = $pcs | foreach {get-wmiobject win32_bios -computername $_} | select serialnumber 
$ip = $pcs | foreach {Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE –ComputerName $_} | select IPAddress,DefaultIPGateway,Description,Index
$os = $pcs | foreach {get-wmiobject win32_Operatingsystem osarchitecture -computername $_} | select osarchitecture
$oscap = $pcs | foreach {get-wmiobject win32_Operatingsystem caption -computername $_} | select 
$s = $cs + $bios + $ip + $os + $oscap | select name,model,serialnumber,IPAddress,DefaultIPGateway,Description,Index,caption,osarchitecture | format-table 

 

Link zu diesem Kommentar

Hallo und Herzlich Willkommen,

 

als Tipps hätte ich für Dich:

  • Nutze Invoke-Command um nicht für jede Info eine eigene Verbindung herstellen zu müssen
  • Nutze bitte immer die explicite Schreibweise ( -Class und -Property ), das erhöht die Lesbarkeit und vereinfacht das Debugging
  • Führe, wenn es geht, die Skripte mit "AsJob" aus, damit du bei vielen Rechnern die Parallelisierung nutzen kannst.
Link zu diesem Kommentar

Hallo la-kro,

Willkommen im MCSE-Board. Ich habe Dir mal ein Gerüst gebaut und 2 Deiner Abfragen integriert. Die restlichen kannst Du Dir - analog zu den beiden die Du unten siehst - allein einbauen. (Wenn nicht - einfach wieder melden! ;-)

$pcs = Get-Content C:\pc.txt
foreach ($ComputerName in $pcs) {
    if (Test-Connection -ComputerName $ComputerName -Count 1 -Quiet) {
        $CimSession = New-CimSession -ComputerName $ComputerName
        $CS   = Get-CimInstance -ClassName Win32_ComputerSystem -CimSession $CimSession
        $BIOS = Get-CimInstance -ClassName Win32_BIOS -CimSession $CimSession
        [PSCustomObject]@{
            ComputerName = $ComputerName
            Model        = $CS.Model
            SerialNumber = $BIOS.SerialNumber
        }
    }
}

 

bearbeitet von BOfH_666
Link zu diesem Kommentar
vor 3 Minuten schrieb MurdocX:
  • Führe, wenn es geht, die Skripte mit "AsJob" aus, damit du bei vielen Rechnern die Parallelisierung nutzen kannst.

Das sollte dann aber auch noch mit ForEach Parallel kombiniert werden: https://devblogs.microsoft.com/powershell/powershell-foreach-object-parallel-feature/

 

@la-kro Falls es sich um ein Netz mit Active-Directory handelt, würde ich mir keine "statische" PC Liste erstellen, sondern die PCs "live" aus dem AD holen.

Link zu diesem Kommentar
vor 18 Minuten schrieb testperson:

Das sollte dann aber auch noch mit ForEach Parallel kombiniert werden: https://devblogs.microsoft.com/powershell/powershell-foreach-object-parallel-feature/

Das ist definitiv ein interessantes Feature!

Übrigens bietet sich das Netzlaufwerk auch als einen guten Ablageort an, wenn du die Daten nicht direkt weiterverarbeiten muss. Mit Out-File und dem Computernamen als Dateinamen lässt sich das gut handeln.

Link zu diesem Kommentar

Hmmm ... ich kann mich natürlich auch irren (ich tue das ziemlich häufig), aber ist es für einen Anfänger nicht erstmal einfacher, die Befehle "ganz normal" - also sequenziell abzuarbeiten? ... zumal für Foreach-Object -Parallel auch Powershell 7 nötig ist, was noch nicht jeder nutzt. 

vor 39 Minuten schrieb MurdocX:

Mit Out-File und dem Computernamen als Dateinamen lässt sich das gut handeln.

... und hier würd ich auch eher ein Export-Csv empfehlen. Wenn's schon mal strukturierte Daten sind  ....  ;-) 

Link zu diesem Kommentar
vor 9 Minuten schrieb BOfH_666:

Hmmm ... ich kann mich natürlich auch irren (ich tue das ziemlich häufig), aber ist es für einen Anfänger nicht erstmal einfacher, die Befehle "ganz normal" - also sequenziell abzuarbeiten? ... zumal für Foreach-Object -Parallel auch Powershell 7 nötig ist, was noch nicht jeder nutzt. 

Da bin ich bei dir. Meine "Ergänzung" galt auch eher "dem anderen Jan". :)

Link zu diesem Kommentar
vor 2 Stunden schrieb BOfH_666:

Hmmm ... ich kann mich natürlich auch irren (ich tue das ziemlich häufig), aber ist es für einen Anfänger nicht erstmal einfacher, die Befehle "ganz normal" - also sequenziell abzuarbeiten? ... zumal für Foreach-Object -Parallel auch Powershell 7 nötig ist, was noch nicht jeder nutzt. 

... und hier würd ich auch eher ein Export-Csv empfehlen. Wenn's schon mal strukturierte Daten sind  ....  ;-) 

Danke erstmal für das Feedback. Ihr habt recht, das Foreach Parallel kann ich leider nicht nehmen. Geht erst anscheinend ab Version 3. Benutzte teilweise noch Version 2. Werde mal etwas rum experimentieren

Link zu diesem Kommentar
vor 9 Minuten schrieb la-kro:

 Benutzte teilweise noch Version 2. 

Die solltest Du aber DRINGENDS in Rente schicken. Du hast also noch Windows 7 im Einsatz. Das solltest Du auch DRINGENDS in Rente schicken. Auf den Clients, die Du per WMI/CIM abfragen möchtest, muss übrigens nicht unbedingt eine aktuelle Powershell laufen. Die Abfragen laufen ja eben über WMI/CIM und nicht über Powershell.  ;-) 

Link zu diesem Kommentar

Schau mal hier:

 

WMF 5.1: PowerShell 5.1 für Windows 7 / 8.1, Server 2008 R2 und 2012 (R2)

https://www.windowspro.de/wolfgang-sommergut/wmf-51-powershell-51-fuer-windows-7-81-server-2008-2012-r2

 

Windows Management Framework 5.1 | Microsoft

https://www.microsoft.com/en-us/download/details.aspx?id=54616

 

Dort kannst du deine Version auf die semiaktuelle 5.1 hochheben :-) 

Link zu diesem Kommentar
vor 10 Minuten schrieb MurdocX:

Dort kannst du deine Version auf die semiaktuelle 5.1 hochheben :-) 

Ich hätt' ja wieder einfach ein Upgrade auf Windows 10 empfohlen. Da ist die 5.1 sowieso schon mit dabei. Alles andere verlängert doch nur das Leiden.  :aetsch2: :grin3:

 

Hat einer von Euch noch Kunden, die wirklich noch Windows 8.1 im Einsatz haben?

bearbeitet von BOfH_666
Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...