Powershell - Script wird als System ausgeführt, jedoch nicht korrekt

  • PowerShell

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von asusdk.

    Powershell - Script wird als System ausgeführt, jedoch nicht korrekt

    Hallo Ihr lieben,

    ich habe in der Arbeit die Aufgabe erhalten einen Powershell script zu entwickeln, der eine Datei Downloadet und anschließend ausführt, es handelt sich hierbei um ein Setup für eine CloudPhone Software.

    Führe ich das Script auf einem PC von Hand aus, oder zumindest als der aktuell angemeldete User (Wenn er Adminrechte hat) funktioniert es einwandfrei.

    Jedoch wollen wir den Script über unsere Verwaltungssoftware ausführen, diese wiederrum startet den Script auf dem Ziel-PC als System.
    Der Download funktioniert, Die Datei wird im gewählten Verzeichnis geschrieben, aber das Setup wird anscheinend nicht durchgeführt.

    Hat evtl. jemand eine zündende Idee was hier falsch läuft ?

    Spoiler anzeigen

    Quellcode

    1. $InstallerDownloadDirectory = "C:\CloudyaInstaller\"
    2. If (Test-Path $InstallerDownloadDirectory){}
    3. else
    4. {mkdir $InstallerDownloadDirectory}
    5. cd $InstallerDownloadDirectory #Das aktuelle Arbeitsverzeichnis per Umgebungsvariable in den Downloadsordner wechseln
    6. $NewInstallerURL = " -- Downloadlink --" #Die Variable "$NewInstallerURL" mit der Download-URL des neuen Installers füllen
    7. $NewInstallerLokalFile = "cloudya.exe" #Die Variable "$NewInstallerLokalFile" mit dem Dateinamen des Installers füllen (Hier kann auch ein beliebiger Pfad gesetzt werden)
    8. Start-BitsTransfer -Source $NewInstallerURL -Destination $NewInstallerLokalFile #Den Download des Installers per BITS (Background Intelligent Transfer Service) starten und auf beendigung desselben warten
    9. start-process $NewInstallerLokalFile
    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If
    Ohne Infos zu dem Installer wird das so nichts, die meisten Installer starten ohne Parameter das GUI und der User führt das dann aus.
    Das kann natürlich nicht funktionieren, also musst du schauen ob der Installer "silent" Parameter hat und die entsprechend festlegen (Installationsort etc.)
    Der Installer benötigt keine Usereingabe, das Problem scheint aktuell zu sein, dass wenn der Installer vom System gestartet wird, er entsprechende Pfade erwartet, die aber nicht vorhanden sind, wenn er nicht als Benutzer gestartet wird. Ich würde also eine Möglichkeit benötigen, in einem Powershell-Script, das als System ausgeführt wird, das Setup für einen Benutzer auszuführen, der selbst keine Adminrechte hat.
    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If
    Ich wiederhole einfach nochmal:

    slice schrieb:

    Ohne Infos zu dem Installer wird das so nichts, die meisten Installer starten ohne Parameter das GUI und der User führt das dann aus.
    Das kann natürlich nicht funktionieren, also musst du schauen ob der Installer "silent" Parameter hat und die entsprechend festlegen (Installationsort etc.)


    PS: Auch das klicken auf irgendwelche Buttons ist ein User input.
    Und woher sollen wir das wissen?
    Auf den Rest des Textes gehst du auch kein Stück ein.

    Mein Tipp: Mehr Infos oder frag beim Hersteller nach!

    slice schrieb:

    Und woher sollen wir das wissen?
    Auf den Rest des Textes gehst du auch kein Stück ein.


    Du hast mich nun 2 Mal darauf hingewiesen, dass du wissen möchtest welche UserEingaben vonnöten sind, ich habe 2 Mal gesagt: Keine
    Ich weiß also nicht, was ich nun falsch gemacht haben soll?

    Ich muss lediglich wissen, wie ich eine Datei als ein anderer Benutzer starten kann, sobald das gelingt, läuft alles wie es soll.

    Zur Info: Es handelt sich hierbei um die Cloudya-Software von NFON, Online konnte ich keinerlei Informationen zum Installer finden, aber wie gesagt, sollte ich ihn entsprechend gestartet bekommen, würde ja alles passen.


    ​Welche Rechte sind denn auf dem Zielrechner vorhanden?


    Der Zielrechner wird mit einem Nicht-Admin Konto benutzt, er hat aber sowohl einen Lokalen AdminAccount, auf den ich auch zugreifen dürfte.
    Der Script selbst wird allerdings über ein Verwaltungstool gestartet, in diesem wird alles als "System" ausgeführt, also quasi ohne Benutzer, und genau das führt zur beschriebenen Problematik.
    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If
    Mir ging es in Post #6 nicht darum ob ein Userinput benötigt wird, sondern wie das Setup abläuft.
    Wenn du es bei dir als User startest, öffnet sich vermutlich die UAC von Windows und danach?
    Erscheint dann ein GUI das dir den Fortschritt oder sonst irgendetwas anzeigt?
    Hast du geschaut ob der "Installer" irgendwelche Startparameter annimmt (zb. /silent, /h oder /log "C:\path\to\file.log") oder sonstiges?

    Das starten als anderer Benutzer bringt dir ja auch nicht wirklich etwas, denn dem fehlen (laut dir) die Admin Rechte.
    Klar könntest du das mit dem lokalen Admin Account installieren, dafür müsste aber irgendwoher das Passwort kommen und das könnte ein ziemliches Sicherheitsproblem darstellen.
    Es öffnet sich ein GUI die einfach nur eine Progressbar anzeigt, versuche die exe mit -s oder -silent zu starten haben am Verhalten der exe nichts verändert, werden also vermutlich nicht akzeptiert, -h /h /? usw. habe ich versucht um herauszufinden, ob ich Antwort der exe bekomme bezüglich akzeptierter parameter, soweit leider ohne Erfolg. Den Lokalen Admin zu benutzen wäre sogar erlaubt, die Zugangsdaten liegen mir auch vor, nur konnte ich bislang nicht rausfinden wie ich das bewerkstelligen könnte
    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If
    Das ist natürlich doof, ich würde da einfach mal beim Hersteller anfragen, eventuell haben die auch MSI Pakete?

    Um eine Anwendung in PS als ein anderer Benutzer auszuführen könntest du dich an folgendem orientieren !!!!!! ABER !!!!!! das ist absolut unsicher.
    Das Passwort für den lokalen Admin Account steht einfach in einem Skript - absolutes no-go
    - Jeder Benutzer der in irgendeiner Art zugriff auf das Skript hat, kann das Kennwort lesen
    - Passwörter gehören niemals nie irgendwo in Plaintext gespeichert

    Ich verstehe dass das eine absolut unsichere Lösung ist und damit die IT-Landschaft gefährde

    Quellcode

    1. $username = 'DOMAINorPCNAME\IamAnAdminAccount'
    2. $password = ConvertTo-SecureString -String "Ich bin ein nicht sicheres Passwort" -AsPlainText -Force
    3. $cred = New-Object System.Management.Automation.PSCredential($username, $password)
    4. Start-Process "C:\Path\To.exe" -Credential $cred ...

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „slice“ ()

    strange, wenn ich es so versuche, bekomme ich immer die Meldung das das System die heruntergeladene Datei nicht finden könne, ohne credentials läufts durch.... echt zum Verzweifeln.... hab sogar noch das Workingdirectory mit anzugeben versucht, same result....

    Nachtrag, das Problem konnte ich umgehen in dem ich keine Relativen sondern absolute Pfade verwendet habe, jetzt sagt er mir trotzdem das ich nicht die benötigten rechte habe, obwohl ich sogar sehen kann das er den Adminaccount verwendet, es ist zum verzweifeln
    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „asusdk“ ()

    ich hatte mal ein ähnliches Problem.

    ich hab zb Starface installieren wollen über Powershell Script
    da hat mir das Tool chocolatey geholfen. das kanst du gut in PS integieren
    Ich konnte das Problem umgehen, ich hab einen zweiten Script geschrieben, den ich als System ausführe um die UAC für den angemeldeten Benutzer abzuschalten, dann kann ich mein InstallScript als angemeldeter Benutzer ausführen, und dann schalte ich die UAC wieder an
    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If