Windows; besteht die Möglichkeit ein Script oder eine Batch zu schreiben dass folgendes kann?

2 Antworten

Das An/Aus -schalten der Netzwerkerkennung bzw. Datei-/Druckerfreigabe bekommt man recht leicht mit dem Befehl netsh erledigt.

dabei ist zu beachten, das Namen für Regeln oder Regelgruppen lokalisiert sind. das heist, die meist englischen Anleitungen aus dem Netz klappen auf einem deutschen System nicht ohne weiteres

  • "Network Discovery" heißt auf einem deutschsprachigen System "Netzwerkerkennung"
  • "File and Printer Sharing" ist auf deutschen Systemen "Datei- und Druckerfreigabe"

...an diesem Umstand ist schon so mancher "Jungadminuístrator" gescheitert...

hier die eingedeutschten Batch-Befehlszeilen

 rem Netzwerkerkennung  ausschalten
netsh advfirewall firewall set rule group="Datei- und Druckerfreigabe" new enable=no
 rem Datei- und Druckerfreigaben deaktivieren
netsh advfirewall firewall set rule group="Netzwerkerkennung" new enable=no

...zum Einschalten entsprechend enable=yes

Die 128Bit-Dateifreigabe-Verschlüsselung ist Standard und braucht eigentlich nicht explizit festgelegt werden. Diese wird über die Werte "NtlmMin*" im Registryschlüssel "HKLM\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0" festgelegt.

 rem 128Bit verschlüsselung für  alle  verbindungen (eigentlich Standard unter  windows ab 8.1)
set "RegPath=HKLM\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0
reg  add "%regpath%" /v NtlmMinServerSec /t REG_DWORD /d 0x20000000 /f
reg  add "%regpath%" /v NtlmMinClientSec /t REG_DWORD /d 0x20000000 /f

der Wert für 40/56 Bitverschüsselung wäre 0x80000000

...und nur das Kennwortgeschützte freigeben aktiviert ist

...wenn Dateifreigaben generel deaktiviert sein sollen, gibt es auch kein "Nur kennwortgeschützte Freigaben". Ergo Quatsch.

da du die Sache als Admin ausführen musst lassen wir die Batch auch selbständig als Admin starten.

demo.cmd

@echo off
chcp 65001 >nul & rem Umlaute anzeigen


 rem prüfen ob  wir im Adminmodus sind... wenn  ja mit :adminTasks weitermachen.
net session >nul 2>&1 && goto :adminTasks
 rem starte  diese Batch als Admin...
powershell -c "Start-Process -Verb runas '%~f0' "
exit /b


:adminTasks
 rem Netzwerkerkennung  ausschalten
netsh advfirewall firewall set rule group="Datei- und Druckerfreigabe" new enable=no
 rem Datei- und Druckerfreigaben deaktivieren
netsh advfirewall firewall set rule group="Netzwerkerkennung" new enable=no

 rem 128Bit verschlüsselung für  alle  verbindungen (eigentlich Standard unter  windows ab 8.1)
set "RegPath=HKLM\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0
reg  add "%regpath%" /v NtlmMinServerSec /t REG_DWORD /d 0x20000000 /f
reg  add "%regpath%" /v NtlmMinClientSec /t REG_DWORD /d 0x20000000 /f
pause
Woher ich das weiß:eigene Erfahrung – Ich mach das seit über 30 Jahren

Knowingbase 
Beitragsersteller
 09.05.2025, 15:39

ich werde mir das später ansehen und auf dich zurückkommen.

Knowingbase 
Beitragsersteller
 10.05.2025, 10:49
@Knowingbase

Frage 01:

kann in dem Skript auch irgendwie eingebaut werden dass eine Mitteilung erfolgt sofern die Einstellungen activiert werden?

Frage 02:

Kann das Visuell auf einer Art gestaltet werden in dem das Konsolenfenster irgendwie in der Tasklmanager verschwindet?

Knowingbase 
Beitragsersteller
 10.05.2025, 11:11
@Knowingbase

zu Frage 01... also wenn die Einstellungen die durch das Script verändert wurden, durch etwas anderes erneut geändert werden?

Erzesel  11.05.2025, 15:44
@Knowingbase

Leider konnte ich nicht schneller antworten...

Als ich Deine Kommentare laß, dachte ich mir: "Paranoia oder Virus?".

Normalerweise gibt es keinen Grund diese Werte zu änden und schon garnicht diese fortlaufend zu überwachen. Wenn sich diese Werte ohne Dein zutun selbstständig ändern, wäre dies äußerst bedenklich, da irgendeine Software über die nötigen Adminrecht hierzu verfügt.

Mit reinem Batchscript würde eine Überprüfung des Zustands der betreffenden Regeln (110 an der Zahl !) extrem kompliziert.

Ich verwende im folgenden einen trickreichen Mix aus Batch und Powershell um die Unzulänglichkeiten der beider Sprachen zu kompensieren.

Das Script fragt in Endlosschleife den Zustand aller anfänglich deaktivierten Regeln. Die schleife wird erst beendet, wenn eine Veränderung registriert wird. Dies ist alles andere als Resourcenschonend.. Hierfür werden permanent ca. 10% der Prozessorleistung benötigt!

Zudem könnte ein Schadprogramm in den 3..8 Sekunden, welche eine Prüfanfrage benötigt bis eine evtl Warnung ausgelöst wird, einiges an Schaden anrichten. Ergo ist die ganze Aktion nicht wirklich Sinnreich🤪🙄

auch wenn es Quatsch ist:

elevated_Hybrid_Demo.cmd

<# : Batch Abschnitt ,Batch sieht in dieser Zeile die Eingabe aus der Datei # an ein SprungLabel, Powershell sieht den begin eines Kommentars. 
@echo off
 rem prüfen ob  wir im Adminmodus sind... wenn  ja mit :adminTasks weitermachen.
net session >nul 2>&1 && goto :adminTasks
 rem starte  diese Batch als Admin...
start "" /min powershell  -WindowStyle hidden -c "Start-Process -Verb runas '%~f0' "
exit /b

:adminTasks
#um das Powershellfenster  automatisch  in die Taskleiste  zu minimieren  ändere -windowstyle von  "normal" zu "minimized"
start ""  powershell -WindowStyle normal "&([Scriptblock]::Create((gc '%~f0' -enc UTF8 -raw )))"
exit /b
: End of batch section and Powershell comment#>
#begin Powershellscript

$Null= 'Datei- und Druckerfreigabe','Netzwerkerkennung'|
    %{netsh advfirewall firewall set rule group="$_" new enable=no}  #einfach  mit netsh ausschalten  ist schneller als Disable-NetFirewallRule
$Null = 'NtlmMinClientSec','NtlmMinServerSec'|
    %{reg  add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0" /v "$_" /t REG_DWORD /d 0x20000000 /f }

$AllRulesDisabled = $True
while ($AllRulesDisabled){
     # jede Betroffene Regel einzeln ermitteln und  deren Zustand in einem Array speichern
    $AllAffectedRules   = 'Datei- und Druckerfreigabe','Netzwerkerkennung'|
        %{Get-NetFirewallRule -DisplayGroup $_}
     #Tricky: einfach  feststellen ob keine der Regeln den Wert Enabled = True hat
     #ändert  sich der Status auch nur  einer der 110 ist  der Rückgabewert des Filters nicht mehr $Null
    $AllRulesDisabled = $Null -eq ($AllAffectedRules|?{ $_.Enabled -eq 'True'})
    Write-Host "Teste..." -fo Yellow
    if ($AllRulesDisabled) {Write-Host "Alles beroffenen Regeln unverändert." -fo Green}
}


Write-Host "mindestens eine Regel wurde geändert!:"  -fo Red
$AllAffectedRules|?{ $_.Enabled -eq 'True'}|ft 


#Messagebox anzeigen:
Add-Type -AssemblyName PresentationCore,PresentationFramework
[System.Windows.MessageBox]::Show("Etwas  wurde  geändert", "Blubb", "OK", "Warning")
'...beendet...'
pause

Für solche Aufgaben eignet sich vor allem PowerShell und alles im wesentlichen mit Set-NetFirewallRule und Set-ItemProperty festgelegt werden kann. Zusätzlich noch ein Batch-File, mit dem dann das PowerShell-Script schnell als Admin ausgeführt wird.

Woher ich das weiß:Berufserfahrung – Full-Stack Developer