none
Zählen in einer Schleife RRS feed

  • Frage

  • Hallo,

    habe folgendes Problem. Ich will alle Monitore eines Rechners mit bestimmten Daten auslesen. Das klappt. Im gleichen Zug sollte ich das Ergebnis einer Variable zuordnen. Also für jedes Ergebnis eine gesonderte Variable. In dem Code sollte in der if Schleife eine Zeile rein die das Ergebnis in die Variable $Bildschirm1, $Bildschirm2, $Bildschirm3 füllt.

    Klingt nicht schwer, aber irgendwie habe ich ein Brett vorm Kopf.

    # Die Funktion ist nur für die Umwandlung des ASCII Codes aus dem wmi object
    function Decode {
        If ($args[0] -is [System.Array]) {
            [System.Text.Encoding]::ASCII.GetString($args[0])
        }
        Else {
            "Not Found"
        }
    }

    $testarray =  Get-WmiObject WmiMonitorID -Namespace root\wmi

    for ($i=0; $i -lt $testarray.count; $i++) {
        $Monitor = $testarray
        $Name = Decode $Monitor.UserFriendlyName -ne 0
        $Serial = Decode $Monitor.SerialNumberID -ne 0
        $woche = $Monitor.WeekOfManufacture
        $jahr = $Monitor.YearOfManufacture
        $Bildschirm = "$Name : $Serial $woche / $jahr "
        }


    Dienstag, 20. April 2021 12:53

Antworten

  • Hallo Schallplatte,

    formatierst Du Deinen Code hier im Forum bitte als Code? Es ist das zweite Symbol von rechts in der Berarbeitungsleiste. ;-)

    In dem Code sollte in der if Schleife eine Zeile rein die das Ergebnis in die Variable $Bildschirm1, $Bildschirm2, $Bildschirm3 füllt.

    Klingt nicht schwer, aber irgendwie habe ich ein Brett vorm Kopf.

    Auch wenn das so möglich ist, macht es in PowerShell normalerweise wenig oder keinen Sinn. Was willst Du denn eigentlich am Ende erreichen? Also was würdest Du dann mit den Variablen anstellen wollen?

    Die Hilfsfunktion ist vielleicht nicht unbedingt nötig:

    $MonitorList = Get-WmiObject WmiMonitorID -Namespace root\wmi
    $Result = 
    foreach ($Monitor in $MonitorList) {
        [PSCustomObject]@{
            ManufacturerName  = if ($Monitor.ManufacturerName) { [System.Text.Encoding]::ASCII.GetString($Monitor.ManufacturerName) } else { 'n/a' }
            Name              = if ($Monitor.UserFriendlyName) { [System.Text.Encoding]::ASCII.GetString($Monitor.UserFriendlyName) } else { 'n/a' }
            Serial            = if ($Monitor.SerialNumberID  ) { [System.Text.Encoding]::ASCII.GetString($Monitor.SerialNumberID) }   else { 'n/a' }
            ProductCodeID     = if ($Monitor.ProductCodeID   ) { [System.Text.Encoding]::ASCII.GetString($Monitor.ProductCodeID) }    else { 'n/a' }
            WeekOfManufacture = $Monitor.WeekOfManufacture
            Year              = $Monitor.YearOfManufacture
        }
    }
    $Result 
    
    Ich finde, so ist der Code ein wenig einfacher zu lesen.  ;-)

    Live long and prosper!

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

    Dienstag, 20. April 2021 23:39