Windows; besteht die Möglichkeit ein Script oder eine Batch zu schreiben dass folgendes kann?
Hallo,
besteht die Möglichkeit ein Script oder ein Batch zu schreiben das folgendes kann?
Die erweiterten Netzwerkfreigabeeinstellungen so zu ändern dass alles deaktiviert ist, die Dateifreigabeverbindung auf 128 Bit eingestellt ist, und nur das Kennwortgeschützte freigeben aktiviert ist.
Also als eine Art Script auf das per Doppelklickt aktiviert die einstellungen vornimmt.
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
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?
zu Frage 01... also wenn die Einstellungen die durch das Script verändert wurden, durch etwas anderes erneut geändert werden?
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.
ich werde mir das später ansehen und auf dich zurückkommen.