[PowerShell] Aufruf einer Exe mit Argument funktioniert nicht mehr

UberJaeger

Lt. Junior Grade
🎅Rätsel-Elite ’24
Registriert
Sep. 2005
Beiträge
472
Hallo,

ich habe mir vor einiger Zeit ein kleines Script geschrieben mit Powershell das mir von meinem Raidcontroller Temperaturdaten ausliest. Das funktioniert auch seit Jahren einwandfrei. Jetzt habe ich aber ein Update gemacht von der Controller-Software. Also auch von dem cmd-tool um die Temperaturen auszulesen und jetzt funktioniert mein Script nicht mehr, da es wohl irgendwie Administrationsrechte braucht. Aber auch wenn ich es als Administrator ausführe geht es nicht.

Im Prinzip rufe ich die exe immer schon so auf:

$smart = arcconf.exe getsmartstats 1

Ich speichere das Ergebnis das mir die exe zurückgibt direkt in eine Variable um dann den String so zu zerhackstücken das ich die Temperaturen der HDDs übrig habe.

Die exe liegt dabei im gleichen Verzeichnis wie das Script. Jetzt kommt aber seit dem Update diese Meldung in Powershell wenn ich in der Powershell ISE bin und das Script laufen lasse:

arcconf.exe : Die Benennung "arcconf.exe" wurde nicht als Name eines Cmdlet, einer Funktion, einer Skriptdatei oder eines ausführbaren Programms erkannt. Überprüfen Sie
die Schreibweise des Namens, oder ob der Pfad korrekt ist (sofern enthalten), und wiederholen Sie den Vorgang.

Wenn ich via Rechtsklick -> Als Admin ausführen auf die Powershell mache und dann die arcconf.exe aufrufe, geht es. Wenn ich das Powershell script auch so aufrufe, geht es nicht. Das heisst, ich muss irgendwas im Code ändern, so dass das Script irgendwie auf Admin-ebene läuft. Habe da auch ein paar Sachen im Netz gefunden aber das funktioniert nicht bzw. ich bin zu blöd da ich schon seit Jahren nix mehr mit Powershell gemacht habe und total raus bin aus dem Thema :)

Freue mich über jede Hilfe. Danke.
 
Zuletzt bearbeitet:
Gehts mit einer Umleitung ? :

Code:
arcconf.exe getsmartstats 1 > test.txt
$test = Get-Content test.txt
 
bananajoe2k4 schrieb:
Probier mal:

Code:
$smart = ./arcconf.exe getsmartstats 1

habe ich auch getestet, dann öffnen sich ganz viele fenster und das script schlägt beim nächsten schritt fehl und nichts steht in der $smart variable

leipziger1979 schrieb:
Gehts mit einer Umleitung ? :

Code:
arcconf.exe getsmartstats 1 > test.txt
$test = Get-Content test.txt

die Umleitung will ich ja eigentlich vermeiden, es muss direkt gehen, es hat sich ja nichts geändert, die arcconf.exe gibt mir wenn ich die powershell als admin ausführe mit .\arcconf.exe die entsprechenden werte zurück, aber eben nicht mehr einfach nur mit arcconf.exe -argument, dann sagt er mir das ich das mit dem .\ davor machen soll, aber im script selbst funktioniert das dann wieder nicht.
Ergänzung ()

Also mit dem .\ davor scheint schon die lösung zu sein. Aber irgendwie muss ich das Script dann richtig mit Adminrechten aufrufen. Wenn ich die powershell mit rechtsklick->als admin starten ausführe und dort dann zum pfad vom script springe und das script direkt ausführe, dann funkioniert das script einwandfrei. Wenn ich aber die Verknüpfung zu dem script mit rechtsklick-> admin starte, dann geht es nicht.
Ergänzung ()

Wenn ich jetzt in der Powershell ISE den pfad in der konsole auf den scriptpfad ändere, dann kann ich das script auf einmal ohne Probleme ausführen. Also muss ich im script irgendwie was hinzufügen das den pfad der arcconf.exe irgendwie richtig setzt ? Verstehe ich nicht.
 
Zuletzt bearbeitet:
Am einfachsten und sichersten ist es, absolute Pfade zu verwenden.

Code:
$prog = "C:\path\to\programm.exe"
$test = &$prog arg1 arg2
 
Ja habe ich jetzt auch mal ausprobiert und es geht direkt. Aber das ist doch eigentlich unschön, man möchte das doch dynamisch. Also klar, für meine Zwecke werde ich das jetzt so anpassen, aber "gut" ist ja dann anders.
 
Dann schieb deine Exe in einen Ordner, der in $PATH enthalten ist, dann kannst du es direkt ausführen, oder modifiziere $PATH mit dem Script-directory.
 
Habe es jetzt so gemacht:

$smart = &$PSSCriptRoot\arcconf.exe getsmartstats 1


Danke für die Hilfe.
 
Zuletzt bearbeitet:
Zurück
Oben