Jump to content

Recommended Posts

Moin,

 

danke erstmal an alle. Leider kann ich die Win7 Rechner nicht aussortierten (liegt nicht in meiner Hand). Allerdings gibt es auch schon Win10 Rechner im Netz ;) Das Script sollte ja für alles funktionieren.

Einfach das Powershell bei den Win 7ern geht leider auch nicht. Soweit funktioniert das Script von @BOfH_666 ganz gut. Allerdings mussdte ich CIMsession/Instance herausnehmen. Das gibt es offentsichtlich in Powershell 2.0 noch nicht :crying:. Habe es dann durch die ganz normalen WMI Abfragen ersetzt. Funktioniert auch soweit. Habe jetzt das Einlesen der IPadressen von den PC`s geändert. Diese stehen in einer XML Datei. Wenn ich jetzt die Adressen, welche in dem Array gespeichert sind, dan muss ich sie ja immer mit $variable.address abrufen. Das funktioniert auch soweit, nur das er anscheined das PScustonobejct vollständig ignoriert. Die Variablen für das Customobject enthalten aber genau die Werte, welche sie enthalten sollten. Woran kann das liegen. Habe ja nur in der aktuell laufenden Variable der Schleife ein .address angehängt. Ohne das .address funktioniert es gar nicht und die Variable enthält auch komplett flasche Werte (Host, anstelle der IP Adresse)

Habe den Code mal angehängt.

[XML]$a = get-content c:/hosts.xml
$a.hosts.valueservers.valueserver.host
$pcs = $a.hosts.valueservers.valueserver.host
foreach ($pc in $pcs) {
    if (Test-Connection -ComputerName $pc.address -Count 1 -Quiet) {
       Write-host Information of $pc.address -Foregroundcolor blue -Backgroundcolor white 
        $CS   = Get-wmiobject Win32_ComputerSystem -Computername $pc.address
        $BIOS = Get-wmiobject Win32_BIOS -Computername $pc.address
        $IP = Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE –ComputerName $pc.address
        $OS = get-wmiobject win32_Operatingsystem osarchitecture -computername $pc.address
        $Win = get-wmiobject win32_Operatingsystem caption -computername $pc.address
        $Mon = get-wmiobject wmimonitorid -computername $pc.address -namespace root\wmi|foreach-object{($_.SerialnumberID|foreach-object{[char]$_}) -join „“}
        $prog= Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\* | select-object Displayname 
           [PSCustomObject]@{
            ComputerName            = $Cs.Name
            Model                   = $CS.Model
            SerialNumber            = $BIOS.SerialNumber
            "Monitor Serial"        = $Mon
            "OS Version"            = $Win.caption
            "OS 32/64bit"           = $OS.Osarchitecture
            IPAddress               = $IP.IPAddress
            Gateway                 = $IP.DefaultGateway
            "NWcard index"          = $IP.Index
            Framework               = $prog    
        }
    }
}

 

Share this post


Link to post
Share on other sites
vor 30 Minuten schrieb la-kro:

Allerdings mussdte ich CIMsession/Instance herausnehmen. Das gibt es offentsichtlich in Powershell 2.0 noch nicht :crying:

Ich leiste mir den Luxus Windows 7 und Powershell vor Version 5.1 nicht mehr zu supporten.  ;-) 

 

Ohne Deine XML-Datei zu sehen, können wir dazu schwerlich was Intelligentes beitragen. Eine CSV-Datei wäre aber vermutlich deutlich einfacher zu handhaben. ;-);-) 

vor 30 Minuten schrieb la-kro:

$prog= Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\* | select-object Displayname 

 

Diese Zeile fragt den lokalen PC ab, auf dem das Script läuft ... und das wieder und wieder bei jedem Schleifendurchlauf. ;-) 

Share this post


Link to post
Share on other sites

Moin

 

Ob nicht ein fertiges Produkt ein Weg wäre auf die Mühe der Programmierung zu verzichten?

Share this post


Link to post
Share on other sites
vor einer Stunde schrieb BOfH_666:

Ich leiste mir den Luxus Windows 7 und Powershell vor Version 5.1 nicht mehr zu supporten.  ;-) 

 

Ohne Deine XML-Datei zu sehen, können wir dazu schwerlich was Intelligentes beitragen. Eine CSV-Datei wäre aber vermutlich deutlich einfacher zu handhaben. ;-);-) 

Diese Zeile fragt den lokalen PC ab, auf dem das Script läuft ... und das wieder und wieder bei jedem Schleifendurchlauf. ;-) 

Dachte ich mir schon ;)

Share this post


Link to post
Share on other sites
vor einer Stunde schrieb lefg:

Ob nicht ein fertiges Produkt ein Weg wäre auf die Mühe der Programmierung zu verzichten?

Was für eine ketzerische Frage .... !!!  ;-)  :pfui1: :aetsch2:  .... das ist keine Mühe, das ist ein Vergnügen!!!   :aetsch3:

vor 17 Minuten schrieb la-kro:

Dachte ich mir schon ;)

Was jetzt?  

 

Magst Du uns die XML zeigen oder stellst Du auf CSV um oder noch ganz was anderes? Du kannst die Registry auch remote abfragen. Dafür musst Du dann aber Invoke-Command benutzen, weil Get-ItemProperty selbst nicht remoting-fähig ist. 

Edited by BOfH_666

Share this post


Link to post
Share on other sites
vor 11 Minuten schrieb BOfH_666:

Was für eine ketzerische Frage .... !!!  ;-)  :pfui1: :aetsch2:  .... das ist keine Mühe, das ist ein Vergnügen!!!   :aetsch3:

Was jetzt?  

 

Magst Du uns die XML zeigen oder stellst Du auf CSV um oder noch ganz was anderes? Du kannst die Registry auch remote abfragen. Dafür musst Du dann aber Invoke-Command benutzen, weil Get-ItemProperty selbst nicht remoting-fähig ist. 

Meinte wegen dem Auslesen der "Installed Programs". Habe die XML mal angehängt.

hosts.xml

Share this post


Link to post
Share on other sites

Du versuchst die XML mit dem Pfad c:/hosts.xml einzulesen ... funktioniert das? Ich würde nur zur Sicherheit einen Backslash benutzen. ;-)

 

Und Deine XML ist falsch. Die Werte müssen in den Tags stehen, nicht in den Namen/Beschreibungen ... ich hab das mal angepasst und hier angehängt. Dann sollte es auch $PC sein und nicht $PC.Address.

 

... 'kannst Du dann so überprüfen ... 

foreach ($pc in $a.hosts.valueservers.valueserver.host){
    "Adresse: '$($pc)'"
}

 

hosts.xml

Share this post


Link to post
Share on other sites
vor 4 Minuten schrieb BOfH_666:

Du versuchst die XML mit dem Pfad c:/hosts.xml einzulesen ... funktioniert das? Ich würde nur zur Sicherheit einen Backslash benutzen. ;-)

 

Und Deine XML ist falsch. Die Werte müssen in den Tags stehen, nicht in den Namen/Beschreibungen ... ich hab das mal angepasst und hier angehängt. Dann sollte es auch $PC sein und nicht $PC.Address.

 

... 'kannst Du dann so überprüfen ... 


foreach ($pc in $a.hosts.valueservers.valueserver.host){
    "Adresse: '$($pc)'"
}

 

hosts.xml 270 B · 1 download

Das ist ja ärgerlich. Dann liegt das an der XML Datei das er das nicht richtig auslesen kann? Die kann ich leider nicht ändern. Gehört zu unserer Systemsoftware und ist von der Entwicklung so vorgegeben. Glaub ich mache das denn einfach mit ner CSV Datei. Ist zwar nicht so schön, aber anscheinend wesentlich einfacher

Share this post


Link to post
Share on other sites
vor einer Stunde schrieb la-kro:

Das ist ja ärgerlich. Dann liegt das an der XML Datei das er das nicht richtig auslesen kann? Die kann ich leider nicht ändern. Gehört zu unserer Systemsoftware und ist von der Entwicklung so vorgegeben. 

Hmmmm ... ich bin jetzt auch nicht der XML-Profi ... vielleicht kommt hier noch ein anderer Kollege und kann das lösen ... ich schau mir das später nochmal an .... 

 

Edit:

 

Ich weiß schon, warum ich immer Kopfschmerzen kriege, wenn ich mich mit XML beschäftigen muss ... das ist einfach nicht Admin-Hirne gemacht ... ;-)  ... aber wenn man dann erstmal wieder weiß, wie's geht, geht's wieder ne Weile.

 

[XML]$a = get-content c:/hosts.xml
$a.hosts.valueservers.valueserver.host
$IPListe = $a.hosts.valueservers.valueserver.host.GetEnumerator().address
foreach ($IP in $IPListe) {
    if (Test-Connection -ComputerName $IP -Count 1 -Quiet) {
        Write-Verbose "Information of $IP"
        $CS   = Get-WmiObject -Class Win32_ComputerSystem -ComputerName $IP
        $IP   = Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE –ComputerName $IP
        $OS   = Get-WmiObject -Class win32_Operatingsystem -ComputerName $IP
        $Mon  = Get-WmiObject -Class wmimonitorid -ComputerName $IP -Namespace root\wmi | ForEach-Object { ($_.SerialnumberID | foreach-object { [char]$_ }) -join '' }
        $BIOS = Get-WmiObject -Class Win32_BIOS -ComputerName $IP
        
        $reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $IP)
        $regkey = $reg.OpenSubkey("SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall")
        $prog = 
        foreach ($SubKeyName in $regkey.GetSubKeyNames()) {
            $SubKey = $reg.OpenSubkey("SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$SubKeyName")
            $SubKey.GetValue("DisplayName")
        }
        [PSCustomObject]@{
            ComputerName     = $Cs.Name
            Model            = $CS.Model
            SerialNumber     = $BIOS.SerialNumber
            "Monitor Serial" = $Mon
            "OS Version"     = $OS.caption
            "OS 32/64bit"    = $OS.Osarchitecture
            IPAddress        = $IP.IPAddress
            Gateway          = $IP.DefaultGateway
            "NWcard index"   = $IP.Index
            Framework        = $prog    
        }
    }
}

Ich weiß ja nicht, warum Du die ganzen UnInstall-Keys aus der Registry auslesen möchtest, aber es könnte sein, dass da deutlich mehr ausgelesen wird als Du erwartest. Auf einem normalen System kommt da gern mal Einiges zusammen. Und Du liest im Zweifel nur den 64- oder 32-bit-Schlüssel aus - je nach Zielsystem.

 

Na dann probier mal, ob das so läuft.

 

Und Ubrigens: Was benutzt Du als Code-Editor? Meine DRINGENDE Empfehlung wäre, VSCode und die ganzen Hilfen zu benutzen, die VSCode mitbringt. Das würde die Qualität und Lesbarkeit Deines Codes deutlich verbessern, denke ich.

Edited by BOfH_666

Share this post


Link to post
Share on other sites
vor 1 Stunde schrieb BOfH_666:

Hmmmm ... ich bin jetzt auch nicht der XML-Profi ... vielleicht kommt hier noch ein anderer Kollege und kann das lösen ... ich schau mir das später nochmal an .... 

 

Edit:

 

Ich weiß schon, warum ich immer Kopfschmerzen kriege, wenn ich mich mit XML beschäftigen muss ... das ist einfach nicht Admin-Hirne gemacht ... ;-)  ... aber wenn man dann erstmal wieder weiß, wie's geht, geht's wieder ne Weile.

 


[XML]$a = get-content c:/hosts.xml
$a.hosts.valueservers.valueserver.host
$IPListe = $a.hosts.valueservers.valueserver.host.GetEnumerator().address
foreach ($IP in $IPListe) {
    if (Test-Connection -ComputerName $IP -Count 1 -Quiet) {
        Write-Verbose "Information of $IP"
        $CS   = Get-WmiObject -Class Win32_ComputerSystem -ComputerName $IP
        $IP   = Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE –ComputerName $IP
        $OS   = Get-WmiObject -Class win32_Operatingsystem -ComputerName $IP
        $Mon  = Get-WmiObject -Class wmimonitorid -ComputerName $IP -Namespace root\wmi | ForEach-Object { ($_.SerialnumberID | foreach-object { [char]$_ }) -join '' }
        $BIOS = Get-WmiObject -Class Win32_BIOS -ComputerName $IP
        
        $reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $IP)
        $regkey = $reg.OpenSubkey("SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall")
        $prog = 
        foreach ($SubKeyName in $regkey.GetSubKeyNames()) {
            $SubKey = $reg.OpenSubkey("SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$SubKeyName")
            $SubKey.GetValue("DisplayName")
        }
        [PSCustomObject]@{
            ComputerName     = $Cs.Name
            Model            = $CS.Model
            SerialNumber     = $BIOS.SerialNumber
            "Monitor Serial" = $Mon
            "OS Version"     = $OS.caption
            "OS 32/64bit"    = $OS.Osarchitecture
            IPAddress        = $IP.IPAddress
            Gateway          = $IP.DefaultGateway
            "NWcard index"   = $IP.Index
            Framework        = $prog    
        }
    }
}

Ich weiß ja nicht, warum Du die ganzen UnInstall-Keys aus der Registry auslesen möchtest, aber es könnte sein, dass da deutlich mehr ausgelesen wird als Du erwartest. Auf einem normalen System kommt da gern mal Einiges zusammen. Und Du liest im Zweifel nur den 64- oder 32-bit-Schlüssel aus - je nach Zielsystem.

 

Na dann probier mal, ob das so läuft.

 

Und Ubrigens: Was benutzt Du als Code-Editor? Meine DRINGENDE Empfehlung wäre, VSCode und die ganzen Hilfen zu benutzen, die VSCode mitbringt. Das würde die Qualität und Lesbarkeit Deines Codes deutlich verbessern, denke ich.

Danke. Ich probiere den VScode Editor und das Script mal aus. Mit den Programmen auslesen hast du recht, auch mit den 32/64bit. Hatte das nur erstmal so zum Testen eingefügt. Evtl muss ich mir da mal was anderes einfallen lassen. Habe gesehen du hast Enumerator beim XML lesen eingefügt. Höre ich zum ersten Mal. Bin ja aber auch neu ;)

Share this post


Link to post
Share on other sites

Noch ne Kleinigkeit: Wenn Du hier im Forum antwortest, musst Du nicht immer den kompletten Vor-Beitrag zitieren. Lösch doch bitte einfach alles aus dem Zitat raus, was nicht nötig ist ... im Zweifel das gesamte Zitat. Das macht Deine Antworten leichter lesbar.

 

Danke schon mal. ;-) 

Share this post


Link to post
Share on other sites
vor 2 Stunden schrieb BOfH_666:

Hmmmm ... ich bin jetzt auch nicht der XML-Profi ... vielleicht kommt hier noch ein anderer Kollege und kann das lösen ... ich schau mir das später nochmal an .... 

 

Edit:

 

Ich weiß schon, warum ich immer Kopfschmerzen kriege, wenn ich mich mit XML beschäftigen muss ... das ist einfach nicht Admin-Hirne gemacht ... ;-)  ... aber wenn man dann erstmal wieder weiß, wie's geht, geht's wieder ne Weile.

 


[XML]$a = get-content c:/hosts.xml
$a.hosts.valueservers.valueserver.host
$IPListe = $a.hosts.valueservers.valueserver.host.GetEnumerator().address
foreach ($IP in $IPListe) {
    if (Test-Connection -ComputerName $IP -Count 1 -Quiet) {
        Write-Verbose "Information of $IP"
        $CS   = Get-WmiObject -Class Win32_ComputerSystem -ComputerName $IP
        $IP   = Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE –ComputerName $IP
        $OS   = Get-WmiObject -Class win32_Operatingsystem -ComputerName $IP
        $Mon  = Get-WmiObject -Class wmimonitorid -ComputerName $IP -Namespace root\wmi | ForEach-Object { ($_.SerialnumberID | foreach-object { [char]$_ }) -join '' }
        $BIOS = Get-WmiObject -Class Win32_BIOS -ComputerName $IP
        
        $reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $IP)
        $regkey = $reg.OpenSubkey("SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall")
        $prog = 
        foreach ($SubKeyName in $regkey.GetSubKeyNames()) {
            $SubKey = $reg.OpenSubkey("SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$SubKeyName")
            $SubKey.GetValue("DisplayName")
        }
        [PSCustomObject]@{
            ComputerName     = $Cs.Name
            Model            = $CS.Model
            SerialNumber     = $BIOS.SerialNumber
            "Monitor Serial" = $Mon
            "OS Version"     = $OS.caption
            "OS 32/64bit"    = $OS.Osarchitecture
            IPAddress        = $IP.IPAddress
            Gateway          = $IP.DefaultGateway
            "NWcard index"   = $IP.Index
            Framework        = $prog    
        }
    }
}

Ich weiß ja nicht, warum Du die ganzen UnInstall-Keys aus der Registry auslesen möchtest, aber es könnte sein, dass da deutlich mehr ausgelesen wird als Du erwartest. Auf einem normalen System kommt da gern mal Einiges zusammen. Und Du liest im Zweifel nur den 64- oder 32-bit-Schlüssel aus - je nach Zielsystem.

 

Na dann probier mal, ob das so läuft.

 

Und Ubrigens: Was benutzt Du als Code-Editor? Meine DRINGENDE Empfehlung wäre, VSCode und die ganzen Hilfen zu benutzen, die VSCode mitbringt. Das würde die Qualität und Lesbarkeit Deines Codes deutlich verbessern, denke ich.

Das funktioniert so leider nicht. Die Variablen sind auch leer :ohje2:

Share this post


Link to post
Share on other sites

Bitte nicht immer wieder alles komplett zitieren!

 

Was funktioniert nicht, welche Variablen sind leer?  Bitte im Hinterkopf behalten: Wir können Deinen Bildschirm nicht sehen und auch Deine Gedanken (leider) nicht lesen.  ;-) 

Edited by BOfH_666

Share this post


Link to post
Share on other sites
vor 6 Stunden schrieb BOfH_666:

Was für eine ketzerische Frage .... !!!  ;-)  :pfui1: :aetsch2:  .... das ist keine Mühe, das ist ein Vergnügen!!! 

 

Ja, das hatte ich auch mal so. :thumb1:

Share this post


Link to post
Share on other sites

Mir sind das hier definitiv zu viele Vollzitate und zu wenige zielgerichtete Einzelprobleme.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


Werbepartner:



×
×
  • Create New...