PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Regel ein/ausschalte als Admin...


EQO
24.01.2011, 12:50
Hallo,
Ich schalte ein bzw. schalte aus per Batch eine Firewall Regel von Windows 7 64Bit, diese funktioniert mehr, oder weniger gut, ich möchte sie etwas verändern. (Batch wird mit Rechtsklick und als Administrator ausgeführt.)

Momentan, prüfe ich ob mein USB Stick angeschlossen ist, wenn ja wird die Regel auf enabled gesetzt, ansonsten wird sie disabled.

@ECHO OFF
::Dieses Batch prueft, ob eine Firewall Regel de/aktiviert ist
::Existiert sie, wird true zurückgegeben, andernfalls false.

IF exist "z:" (
ECHO true, and rule will be enabled
netsh.exe advfirewall firewall set rule name="Freigabe" new enable=yes
) else (
ECHO false, and rule will be disabled
netsh.exe advfirewall firewall set rule name="Freigabe" new enable=no
)

echo Das Programm wird nun Beendet!

Es ist möglich per
netsh.exe advfirewall firewall show rule name="Freigabe"
den Status der Regel xyz zu prüfen.

Ich wollte fragen ob man mit der Ausgabe vielleicht arbeiten kann und anstelle, wie bei mir Laufwerk Z: zu prüfen, mit der Ausgabe zu arbeiten und zwar mit:
Aktiviert: Ja bzw. Nein
leider weiß ich nicht, wie ich das verarbeiten kann, da stoß mein Batch wissen schon an die grenzen :mauer:

Vielen Danke für die Hilfe schon mal in voraus :)


MiK
24.01.2011, 23:16
versteh ich nicht. mit welcher ausgabe willst du arbeiten ?
die ausgabe von netsh.exe ?
powershell ?

-------
ich habe mal kurz was getestet. in der powershell scheint es sehr einfach zu funktionieren. und zwar ist in der variable $? das "ergebnis" des letzten befehls.
>netsh.exe advfirewall firewall show rule name="Anmeldedienst"
..... rule gefunden
>$?
true
>netsh.exe advfirewall firewall show rule name="testmest"
..... nicht gefunden
>$?
false


für batch gibt es ERRORLEVEL, womit es möglich ist, den abschluß-"fehlercode" des letzten befehls zu testen, falls dieser überhaupt gesetzt wird

German
25.01.2011, 02:03
Hmm, wenn ich es richtig verstanden habe, geht es nicht darum ob die Regel existiert, sondern darum ob sie aktiviert ist.

Ungetestet in den Browser geschrieben:

for /f "tokens=2" %%a in ('netsh.exe advfirewall firewall show rule name="Freigabe" ^|findstr /b /c:"Aktiviert"') do (
if "%%a"=="Ja" (
ECHO true, and rule will be enabled
netsh.exe advfirewall firewall set rule name="Freigabe" new enable=yes
) else (
ECHO false, and rule will be disabled
netsh.exe advfirewall firewall set rule name="Freigabe" new enable=no
)
)

MiK
25.01.2011, 12:04
ah ok, falsch verstanden.

EQO
25.01.2011, 16:55
Hallo,


for /f "tokens=2" %%a in ('netsh.exe advfirewall firewall show rule name="Freigabe" ^|findstr /b /c:"Aktiviert"') do (
if "%%a"=="Ja" (
ECHO true, and rule will be enabled
netsh.exe advfirewall firewall set rule name="Freigabe" new enable=yes
) else (
ECHO false, and rule will be disabled
netsh.exe advfirewall firewall set rule name="Freigabe" new enable=no
)
)

vielen Danke, leider tut sich da rein gar nichts :(

sry, wenn ich mich falsch Ausgedrückt habe, ja ich möchte die Regel auf Aktiviert prüfen und dann bei Ja, auf disabled stellen und bei Nein, auf enabled.

German
25.01.2011, 18:00
Dann ist die Bedingung natürlich verkehrt.
Probier mal
if "%%a"=="Nein" (

EQO
25.01.2011, 19:34
Hi,
leider funktioniert auch damit nicht, ich bekomme nicht einmal das echo raus, es tut sich gar nichts :confused:

C:\Users\User\Desktop>firewall.bat
C:\Users\User\Desktop>

German
25.01.2011, 19:56
Ich sehe schon. Das Verarbeiten des StdOut in einer FOR /F Schleife ist manchmal etwas tricky. Bestimmte Zeichen muss man escapen, sonst geht nix. In diesem Fall habe ich wohl das "=" übersehen (naja, war halt wirklich ungetestet ;)).

Neuer Versuch im ganzen Batch:

@echo off &setlocal
for /f "tokens=2" %%a in ('netsh.exe advfirewall firewall show rule name^="Freigabe" ^|findstr /b /c:"Aktiviert"') do (
if "%%a"=="Nein" (
ECHO enabled: "%%a", and rule will be enabled
netsh.exe advfirewall firewall set rule name="Freigabe" new enable=yes
) else (
ECHO enabled: "%%a", and rule will be disabled
netsh.exe advfirewall firewall set rule name="Freigabe" new enable=no
)
)
pause

EQO
25.01.2011, 20:05
Hallo,
Dankeschön jetzt läuft das, so wie ich mir das vorgestellt habe :)

German
25.01.2011, 20:13
Gern geschehen und danke fürs "Danke" :)