eingebundenes Powershell macht plötzlich Probleme

  • Hallo allerseits,

    nach längerer Pause melde ich mich wieder mal zu Wort mit einem äusserst hartnäckigem Problem. Es sollen über verrschiedene Button bestimmte Powershellbefehle abgearbeitet werden, diese zunächst ins Temp geschrieben werden. Leider weigert sich das PS so zu arbeiten, das merkwürdige, vor ein paar Tagen, hatte es noch funktioniert. Vielleicht sieht ja jemand was da falsch eingebunden wurde, würde mich freuen, unten steht der PS Fehler der zurückgegeben wird. Der Befehl selber einzeln in PS funktioniert jeweils


    lg


    Casi


    Aufruf im Mainloop:

    AutoIt
    Case $AllDomPCButton
                Local $psCommand = 'Get-ADComputer -Filter "OperatingSystem -like ''*Windows 10*''" | Select-Object -ExpandProperty Name'
                ConsoleWrite("Generierter PowerShell-Befehl: " & $psCommand & @CRLF)
                ShowDomPCs($psCommand, 'alldompc.txt')
    
            Case $AllDomPCsWithAButton
                Local $psCommand = 'Get-ADComputer -Filter {Name -like "A*"} | Select-Object -ExpandProperty Name'
                ConsoleWrite("Generierter PowerShell-Befehl: " & $psCommand & @CRLF)
                ShowDomPCs($psCommand, 'alldompcA.txt')

    die Funktion die dan aufgerufen wird:


    PS Meldung:

    Code
    Get-ADComputer : Fehler beim Analysieren der Abfrage: "OperatingSystem -like Windows 10*" Fehlermeldung: "syntax
    error" an folgender Position: "23".
    In Zeile:1 Zeichen:1
    + Get-ADComputer -Filter 'OperatingSystem -like Windows 10*' | Select-O ...
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : ParserError: (:) [Get-ADComputer], ADFilterParsingException
        + FullyQualifiedErrorId : ActiveDirectoryCmdlet:Microsoft.ActiveDirectory.Management.ADFilterParsingException,Micr
       osoft.ActiveDirectory.Management.Commands.GetADComputer
  • Folgender Unterschied ist mir aufgefallen:
    Du definierst den auszuführenden Befehl als "*Windows 10*" in der Fehlermeldung steht dann aber nur "Windows 10*" ohne den * am Beginn.
    Kann es sein, dass PS Platzhalter wie von Dir verwendet nicht unterstützt?

    P.S.
    Alternativ könntest Du aber auch meine AD UDF verwenden.
    Vorteile:

    • Läuft schneller (da die Umgebung für PS nicht eingerichtet werden muss)
    • Kann auf jedem PC ausgeführrt werden, da die AD Cmdlets nicht benötigt werden
    • Du brauchst Dich nicht mit temporären Dateien rumschlagen, die Ergebnisse stehen Dir direkt im Skript als Array, Variable etc. zur Verfügung.
  • , danke für drin Feedback,

    wie gesagt neulich bekam ich mit dem String noch die Ergebnisse. Aber vielen Dank für Deine UDF, werde ich mir mal anschauen. Trotzdem muss es doch einen Grund haben, ' Zeichen zuviel oder zu wenig oder "" , irgendwas in der Art muss es ja sein


    lg und schönes Pfingstwochenende noch

    Einmal editiert, zuletzt von casi4712 (18. Mai 2024 um 16:43)

  • Dein zweites query hat ein etwas anderes Format. Der Filter ist in {} eingebunden. Funktioniert dieser Filter?
    Falls ja, dann musst Du den ersten Filter entsprechend anpassen.

    P.S.
    Hast Du dir das Verzeichnis in dem das Skript abgelegt ist, bereits angesehen? Dort liegen - bei entsprechender Einstellung von SciTE - ältere Versionen des Skripts. Auch im Unterverzeichnis "Backup" kannst Du fündig werden.

  • der zweite hat noch nicht fubktioniert, der erste aber, obwohl nix verändert wurde, solitär in ps gehen beide, also dass was in temp geschrieben wird

  • ich sehe das Problem in den doppelten Hochkomma

    Code
    'Get-ADComputer -Filter "OperatingSystem -like ''*Windows 10*''"

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • die Fehlerbeschreibung zeigt doch ganz deutlich auf die Position, mit der der Parser ein Problem hat:

    Code
    Get-ADComputer : Fehler beim Analysieren der Abfrage: "OperatingSystem -like Windows 10*" Fehlermeldung: "syntax
    error" an folgender Position: "23".
    In Zeile:1 Zeichen:1
    + Get-ADComputer -Filter 'OperatingSystem -like Windows 10*' | Select-O ...
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    das Hochkomman nach Windows 10*'

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • Ich würde auch die AD Variante bevorzugen.

    Hier mal ein Beispiel:



    Gruß Marcel

  • tja keine Ahnung ob mit oder ohne zusätzliche ' ging so nicht, jetzt funktioniert es mit dieser Variante, wenn auch unschön.



    ja Ad Variante klingt erst mal gut, aber soclhe Filterabfragen, da hab ich leider nichts zu gesehen, bei den Beispielen, bin ja gern bereit auch neues aufzunehmen.


    lg und schönen Abend noch

  • Respekt, ist ne tolle udf, dann nehme ich mal an wenn ich alle Rechner haben will die mit A beginnen, dann muss ich das so machen:

    Aber ist das auch mit folgendem Powershellscript so einfach möglich, dieses fragt zunächst sämtliche Rechner ab und erzeugt dann parallel jobs um hier zu überprüfen, ob diese derzeit an der Domäne sind, mit meiner Methode konnte ich das leider bislang nicht einbinden, ich nehme an es lag an der abschliessenden Bedingung:


    so danke schonmal und ein schönes Wochenende

    2 Mal editiert, zuletzt von casi4712 (24. Mai 2024 um 01:11)

  • Du kannst in der LDAP Abfrage gleich nur die Computer filtern die mit A beginnen:

    Code
    ; Hole die Objekte aus der OU, die mit "A" beginnen
    $aObjects = _AD_GetObjectsInOU($sOU, "(&(objectcategory=Computer)(name=A*))", 2, "cn,operatingsystem,pwdlastset")
  • ah ok, hab ichs wieder mal zu kompliziert gemacht, gibt es für diese UDF vielleicht eine Dokumentation, wäre zumindest interessant. Bezüglich meines Scriptteils was aktive PC finden soll, habe ich bislang folgendes, aber das hängt irgendie, obwohl das Powershell alleine funktioniert. Vielleicht sihet ja da jemand den Fehler:



    lg und ein schönes Wochenende

    2 Mal editiert, zuletzt von casi4712 (24. Mai 2024 um 17:41)

  • gibt es für diese UDF vielleicht eine Dokumentation?

    Die UDF kommt mit einer CHM Hilfe (analog zu AutoIt-Befehlen auch mit Beispielen).
    Weitere Details zur UDF findest Du im engl. Wiki.

    Wenn Du die Advanced Help installierst, dann bekommst Du per F1 (im SciTE-Editor) die Hilfe zu jenem AD-Befehl auf dem der Cursor gerade steht. Dies gilt für weitere UDFs von mir.
    Steht der Cursor auf einem unbekannten Begriff, dann wird mit diesen Begriff die AutoIt-Hilfe aufgerufen.

  • Lt. Doku führt Test-Connection einen Ping aus.
    Wenn Du die Foren (deutsches und englisches) durchsuchst, wirst Du einige Lösungen finden, wie gleichzeitig mehrere Hosts gepingt werden können.

  • okidoki werde ich mir mal anschauen, macht natürlich nur Sinn wenn dass auch entsprechend parallel abegerabeitet wird, wie in meinem PS, sonst wird es wohl ewig dauern;)


    lg und schönes Weekend

  • Das von Musashi empfohlene Skript kann in der Default-Einstellung bis zu 20 Hosts gleichzeitig anpingen.
    Siehe:

    Code
    Local $MAX_PROCESS = 20 ; A maximum number of processes (25)
  • Nichtsdestotrotz würde mich mal interessieren warum mit meinem Powershellansatz die txt datei nicht in das Temp verzeichnis geschrieben wird, die temp PS Datei alleine funktioniert jedenfalls:


    denke fehlt wieder nur ein '' oder so, vielleicht siehts ja jemand, denke das wär erst mal ok für mich


    lg und schönen Sonntag

    2 Mal editiert, zuletzt von casi4712 (26. Mai 2024 um 02:47)