itchley
Goto Top

Funktion in Skript ausführen

Moin zusammen,

ich wandle nun seit ein paar Wochen alte Batch-Skripte nach PowerShell um und hänge nun seit einigen Stunden an einem kleinen Problem. Bin also Anfänger in Sachen PowerShell und egal was ich zu meinem Problem gelesen und ausprobiert habe...es will nicht so wie ich will.
Im Skript soll eine Funktion genutzt werden, aber egal wie ich es anstelle, entweder wirft es mir Fehlermeldungen
& : Die Benennung "C:\Dokuwerkzeug\conf\SnmpWalk.exe -r:12 -t:1 -v:2c -c:divis -o:.1.3.6.1.2.1.1.1.0" 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.
In D:\Dropbox\DIVIS\Entwicklung Dokuvorlage\Dokupowerwerkzeug\Werkzeug.ps1:724 Zeichen:6
+                 &$WalkBefehl
+                  ~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (C:\Dokuwerkzeug...3.6.1.2.1.1.1.0:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException
aus oder der Befehl wird einfach nur als Text dahin geschrieben ohne die Funktion aufzurufen.

So sieht der entsprechende Teil dazu aus, die Pause unten ist nur da, um zu sehen ob es geht oder nicht und wird weiter nach unten wandern bis alles da ist.

$Walk = "C:\Dokuwerkzeug\conf\SnmpWalk.exe"  
$Walk_Typ = "-o:.1.3.6.1.2.1.1.1.0"  
$WalkIP = "-r:"  
$WalkWartezeit = "-t:1"  
$WalkVersion = "-v:2c"  
$WalkCommunity = "-c:sivid"  
$Kunde = Read-Host -Prompt $151
do{
	$Sp0rt = Read-Host -Prompt $152
}while(!(Test-Path $Sp0rt))
do{ 
    ## _____________________________________________________________________________________________ Suche nach der Portbelegung
	$WalkBefehl = "$Walk $WalkIP$Netzbereich$Start $WalkWartezeit $WalkVersion $WalkCommunity $Walk_Typ"  
	&$WalkBefehl
	pause
}until ($Ende -lt $Start)

Ich danke schonmal und wünsche einen guten Start in die Woche

Gruß
Itchley

Content-Key: 7651702834

Url: https://administrator.de/contentid/7651702834

Printed on: May 5, 2024 at 06:05 o'clock

Mitglied: 7426148943
Solution 7426148943 Jun 26, 2023 updated at 09:54:44 (UTC)
Goto Top
Moin.
Nee das geht so nicht, ausgeführt wird ja erst mal nur der Befehl/die Exe selbst wie in der CMD auch, wenn du alles inklusive Parameter in Anführungszeichen setzt sucht er nach einer ausführbaren Datei mit all den Parametern, die er verständlicherweise nicht finden kann. Ist übrigens in der CMD genauso, wenn du da auch die Parameter in den Anführungszeichen inkludierst wirft er dir auch den selben Fehler wie du hier sehen kannst.
screenshot

Was geht sind folgende Varianten
&"C:\Dokuwerkzeug\conf\SnmpWalk.exe" "-r:12" "-t:1" "-v:2c" "-c:divis" "-o:.1.3.6.1.2.1.1.1.0"  
Oder mit Start-Process
Start-Process "cmd.exe" -Argumentlist "/c `"C:\Dokuwerkzeug\conf\SnmpWalk.exe`" -r:12 -t:1 -v:2c -c:divis -o:.1.3.6.1.2.1.1.1.0" -wait  
Wobei man bei Start-Process die einzelnen Parameter als Alternative auch als Array übergeben kann, statt als einen einzigen String.

p.s. "pause" ist kein nativer Powershell-Befehl, der geht zwar auch in der PS, wenn du aber wirklich nach natives Powershell ohne CMD-Reste übersetzen willst, nimmst du stattdessen Read-Host oder [void][console]::ReadKey() (Achtung, letzteres funktioniert nicht in der ISE da dort kein Console-Host läuft).

Zeppel
Member: Itchley
Itchley Jun 26, 2023 at 09:52:51 (UTC)
Goto Top
@7426148943

Besten Dank für Deine Hilfe


Bei der Funktion Start-Process startet die PS die exe komplett, funktioniert also nicht so wie gewünscht.
Die Variante "&" hingegen konnte ich nun so anpassen, das es klappt und nutzt aus der exe den Command-Anteil:
&$Walk -r:$Netzbereich$Start -v:2c -c:$WalkCommunity -os:$Walk_Typ -t:1
In all den Versuchen wollte ich wohl zu viel in ein Ding packen und hab mir selbst ins Knie geschossen. Der Befehl war zu Beginn meiner Versuche in etwa so wie oben geschrieben, da kannte ich das mit dem "&" aber noch nicht und hab dann immer mehr in ein komplettes Ding gepackt.

[void][console]::ReadKey()
Danke für den Tipp, hab ich sofort angepasst. Die ISE wurde mir letzte Woche schon für nicht so gut erklärt, nutze daher nur noch Notepad++

Ich versuche es so sauber wie möglich mit PS zu lösen und bin für solche Tipps auch sehr dankbar.

Beste Grüße
Itchley
Mitglied: 7426148943
7426148943 Jun 26, 2023 updated at 09:56:14 (UTC)
Goto Top
Zitat von @Itchley:
Bei der Funktion Start-Process startet die PS die exe komplett, funktioniert also nicht so wie gewünscht.
Hatte das noch nachträglich korrigiert, muss natürlich an den cmd Interpreter übergeben werden, dann klappt das auch, sorry.
Member: Kraemer
Kraemer Jun 26, 2023 at 11:14:13 (UTC)
Goto Top
Zitat von @Itchley:

Die ISE wurde mir letzte Woche schon für nicht so gut erklärt, nutze daher nur noch Notepad++
sieh dir mal Visual Studio Code an. Mit installierter PS-Sprachunterstützung hilft die Software aktiv beim sauberen Coden.
Member: TK1987
TK1987 Jun 26, 2023 at 13:46:42 (UTC)
Goto Top
Moin,

Zitat von @Kraemer:
Zitat von @Itchley:
Die ISE wurde mir letzte Woche schon für nicht so gut erklärt, nutze daher nur noch Notepad++
sieh dir mal Visual Studio Code an. Mit installierter PS-Sprachunterstützung hilft die Software aktiv beim sauberen Coden.
Das macht Notepad++ auch face-wink. Imho sind die Shortcuts bei N++ aber deutlich besser und beschleunigen das Skripten enorm.

Der einzige wirkliche Vorteil den VS Code bringt, ist das Debuggen mittels Breakpoints (sofern man dies bei einer Skriptsprache denn benötigt).

Just my 2 cents.

Gruß Thomas
Member: Itchley
Itchley Jun 26, 2023 at 19:39:09 (UTC)
Goto Top
Danke für Eure Hilfe...die nächste Frage kommt auch schon

Ich werde das mit dem Start-Process im nächsten Kapitel meines Skripts mal ausprobieren face-smile