Pc Modell auslesen und mit IF then verknpfen

  • Hallo,

    habe ein kleines Problem wo ich derzeit nicht weiter komme.

    Ich muss ein PC Modell auslesen und dieses Vergleichen.

    Testweise hatte ich die Ausgabe einer MSg Box versucht fenster geht auf es steht aber nichts drin.

    Die Datei wird auch nicht angelegt.

    Kann mir hier vielleicht jemand helfen?

    Vielen Dank

    Mike

  • Wenn die Datei gar nicht erst erstellt wird ist doch relativ offensichtlich, dass es nicht mit dem AutoIt-Skriptteil zu tun hat (ich habs jetzt gar nicht durchgelesen, könnte also trotzdem fehlerhaft sein, aber das hat keinen Zusammenhang mit dem geschilderten Problem).

    Ich arbeite momentan sehr viel mit WMI und so spontan fällt mir folgendes ein:

    • Möglicherweise ist auf dem Zielgerät WMI deaktiviert.
    • Eher aber ist einfach der Befehl den du verwendest falsch/unvollständig. Über google habe ich folgendes gefunden:
    Code
    %windir%\System32\wbem\WMIC.exe /node:"ComputerNameORIpAddress" ComputerSystem Get Model, Manufacturer

    Das sieht deinem Ansatz in etwa ähnlich. Ich vermute mal, dir fehlen einfach noch gewisse angaben. Hast du den Befehl so wie du ihn im Skript hast schon mal direkt im cmd versucht? Vielleicht sagt er dir dann ja gleich, was fehlt.

    Bild1: Ich beim debuggen

  • WMI kann man direkt in AutoIt ansprechen.
    Irgendwelche Umstände über Konsolentools deren Ausgabe in Dateien geschrieben werden und dann wieder ausgelesen werden müssen braucht es nicht:

    Hier mal als Einzeiler:

    [autoit]

    $Modell = ObjGet("winmgmts:\\localhost\root\CIMV2").ExecQuery("SELECT Model FROM Win32_ComputerSystem", "WQL", 0).ItemIndex(0).Model

    [/autoit][autoit][/autoit][autoit]

    MsgBox(0, "Computermodell", $Modell)

    [/autoit]
  • Hallo zusammen,

    danke für den Ansatz.

    Ich bin ein Stück weiter gekommen.
    Leider stimmt hier noch immer etwas nicht.
    Sofern ich die Ausgabe aus der Msg Box vor der IF Abfrage habe funktioniert die Ausgabe.

    In der IF Abfrage wird nur der Fehler ausgegeben.

    Kann mir nochmal jemand helfen ?

    AutoIt
    $Modell = ObjGet("winmgmts:\\localhost\root\CIMV2").ExecQuery("SELECT Model FROM Win32_ComputerSystem", "WQL", 0).ItemIndex(0).Model
     
       IF $Modell = "ESPRIMO E7935" Then
          MsgBox(0, "Computermodell", $Modell)
          Else
             MsgBox(0, "Fehler", "PC -Modell nicht erkannt")
    
    
    EndIf

    Vielen Dank

    Mike

  • Teste mal vor der IF-Abfrage mit 'MsgBox(0,"",StringLen($Modell))' ob die Länge passt.
    Manchmal haben die ermittelten Zeichenfolgen Leerzeichen am Anfang/Ende oder in der Mitte 2 Leerzeichen, statt einem. Wäre möglicherweise ein Grund...

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

  • Hi,

    danke für die Info.

    Habe es mal anders versucht:

    Mir ist nur aufgefallen, dass die MSG Box schmaler ist Inhalt identisch.

    Mfg

    Mike

  • Oder

    [autoit]

    StringStripWS()

    [/autoit]

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

  • Hallo zusammen,

    danke für die Unterstützung.

    Ich bekomme es nicht in dieses Script eingebaut.

    Wie müsste das Script lauten, damit die Leerzeichen entfernt werden hinter dem Wert?

    Spoiler anzeigen
    [autoit]

    Modell_1 = "ESPRIMO E7935"
    $Modell = ObjGet("winmgmts:\\localhost\root\CIMV2").ExecQuery("SELECT Model FROM Win32_ComputerSystem", "WQL", 0).ItemIndex(0).Model
    MsgBox(0, "Computermodell",$Modell )
    MsgBox(0, "Computermodell",$Modell_1 )
    $result = StringCompare($Modell, $Modell_1)
    MsgBox(0, "Ergebnis des Stringvergleichs (Modus 0):", $result)
    If $Modell == $Modell_1 Then
    Msgbox(0,"info", "Ist gleich")
    Else
    Msgbox(0,"info", "Ist nicht gleich")
    EndIf

    [/autoit]

    Danke

    Gruße

    Mike

  • Zeile 5 ändern in:

    [autoit]

    $result = StringCompare(StringStripWS($Modell, 3), $Modell_1)

    [/autoit]

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

    Einmal editiert, zuletzt von Micha_he (2. April 2015 um 13:14)

  • Hi,

    bekomme die Meldung, dass es nicht die gleichen Werte sind.

    Sprich zeile 10.

    Bei erfolg sollte zeile 8 augegeben werden,


    Irgendwo ist da noch ein Fehler, den ich nicht finde.

    Sofern ich $Modell mir in die zwischenablage speichere hinter zeile 5 habe ich noch immer die Leerzeichen drin.

    Viele Grüße

    Mike

  • Du hast so viele Vergleiche in deinem Beispiel, das ich nicht gesehen habe, das Du 2x verschieden vergleichst (Zeile 5 & 7)

    Ändere am besten Zeile 2 in:

    [autoit]

    $Modell = StringStripWS(ObjGet("winmgmts:\\localhost\root\CIMV2").ExecQuery("SELECT Model FROM Win32_ComputerSystem", "WQL", 0).ItemIndex(0).Model, 3)

    [/autoit]

    und vergiss meinen Post #12...
    (Wobei dann eigentlich die Zeilen 3-6 unnötig sind ;-))

    Edit: Eklärung warum $Modell hinter Zeile 5 immer noch Leerzeichen enthält - StringCompare() und auch das von mir hinzugefügte StringStripWS() verändern die Variable $Modell die Du als Parameter mitgibst, NICHT !
    StringCompare() macht nur einen Vergleich und gibt einen Integerwert zurück und bei StringStripWS() müsstest Du es mit $Modell = StringStripWS($Modell, 3) der Ausgangsvariablen wieder zuweisen, damit Du es später weiterverarbeiten kannst.

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

    7 Mal editiert, zuletzt von Micha_he (2. April 2015 um 13:16)

  • Schau einfach mal in die AutoIt-Hilfe unter StringStripWS().

    Dort findest Du das gefragte. Der Befehl entfernt Leerzeichen (WS=WhiteSpace) vorn (1), hinten (2), mehrere zwischen Wörtern (4) und alle (8) oder Kombinationen aus den Einzelwerten. In deinem Anwendungsfall also vorn & hinten = 1+2 ! Egal wie lang der String in der Variablen ist.

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

  • Hi,

    super Danke.

    Bin schon ein ganzes Stück weiter.

    Hänge nur hier was.

    Abhänge Installation der Modelle zugehörig funktioniert ja.
    Wie bekomme ich den Abbruch hin?

    Oder ist da in der If Abfrage schon ein Fehler?


    [autoit]


    If $Modell == $Modell_1 Then
    ;Installation
    If $Modell == $Modell_2 Then
    ;Installation
    Else
    ;Abbruch
    Endif

    [/autoit]


    Viele Grüße

    Mike

  • In Deinem Anwendungsfall wäre die Verwendung von Switch wohl besser/übersichtlicher:

    [autoit]


    Switch $Modell ; diese Veriable wird geprüft
    Case $Modell_1 ; und dann mit dieser verglichen
    ;Installation für Modell 1
    Case $Modell_2
    ;Installation für Modell 2
    Case Else
    ;Installation für alle anderen Modelle
    EndSwitch

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    ; und hier geht der normale Ablauf nach einer Installation weiter...

    [/autoit]

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"