In der komplizierten Welt der IT ist die Verwaltung des Benutzerzugangs zu bestimmten Systemfunktionen von größter Bedeutung. Eine dieser Funktionen ist der Windows-Ausführungsdialog. Aber warum sollten IT-Fachleute den Zugriff darauf beschränken wollen? Dieser Guide befasst sich eingehend mit dem PowerShell-Skript zur Steuerung der Zugänglichkeit des Ausführungsdialogs und den Auswirkungen solcher Aktionen.
Überblick über den Windows-Ausführungsdialog
-
Was ist der Windows-Ausführungsdialog?
- Der Windows-Ausführungsdialog ist eine Funktion, mit der Benutzer schnell Programme starten, Ordner öffnen und Systembefehle ausführen können. Wenn Sie die Tastenkombination Windows + R drücken, erscheint ein kleines Dialogfeld, in das Sie direkt Befehle eingeben können.
-
Wie wird der Windows-Ausführungsdialog verwendet?
- Er wird hauptsächlich für den schnellen Zugriff verwendet. Anstatt durch mehrere Menüs oder Ordner zu navigieren, können Benutzer einfach einen Befehl oder einen Pfad in den Ausführen-Dialog eingeben, um sofort ein Programm zu starten oder ein Verzeichnis zu öffnen.
Gavin’s Meinung
Der Ausführungsdialog ist eine der ersten Anlaufstellen, wenn es darum geht, auf das System zuzugreifen oder Befehle auf dem erweiterten System auszuführen. Als primärer Punkt für die Ausführung von Befehlen und Programmen stellt die Sperrung dieses Bereichs eine kontrolliertere Umgebung dar und verringert das Risiko erheblich.
Obwohl dies nicht der einzige Ausführungspunkt für Befehle und Programme ist, wird er von Personen, die nicht unbedingt Erfahrung mit der Systemverwaltung haben, am häufigsten verwendet. Das Sperren dieser Funktion sollte in Kombination mit anderen Sicherheitsbeschränkungen (wie dem Verhindern des Zugriffs auf die Registrierung oder die Eingabeaufforderung) verwendet werden.
Sicherheitsaspekte der Deaktivierung des Windows-Ausführungsdialogs
Was sind die Risiken?
Wenn Sie den Ausführungsdialog deaktivieren, könnten Sie unbeabsichtigt die Produktivität beeinträchtigen. Einige fortgeschrittene Benutzer verlassen sich für schnelle Aufgaben und die Systemverwaltung auf den Ausführungsdialog. Zudem kann die Manipulation von Systemeinstellungen, wenn sie nicht korrekt durchgeführt wird, zu anderen unbeabsichtigten Problemen führen.
Was sind die Vorteile?
Der Hauptvorteil ist die erhöhte Sicherheit. Die Deaktivierung des Ausführungsdialogs kann unbefugte oder böswillige Aktionen verhindern, insbesondere von Benutzern, die sich mit der Systembedienung nicht so gut auskennen. Dadurch wird das Risiko versehentlicher Änderungen oder der Ausführung schädlicher Befehle verringert.
Wie können Sie die Risiken verringern?
Bevor Sie Änderungen vornehmen, sollten Sie unbedingt Folgendes tun:
- Kommunizieren Sie mit den Benutzern, insbesondere mit denen, die von der Änderung betroffen sein könnten.
- Stellen Sie alternative Methoden oder Werkzeuge für Aufgaben, die bisher über den Ausführungsdialog erledigt wurden, zur Verfügung.
- Stellen Sie sicher, dass es eine Möglichkeit gibt, die Änderungen bei Bedarf schnell rückgängig zu machen.
Hintergrund
Das mitgelieferte PowerShell-Skript ist ein robustes Tool für IT-Experten und Managed Service Provider (MSPs) zur Steuerung der Zugänglichkeit des Ausführungsdialogs. In Umgebungen, in denen die Sicherheit oberste Priorität hat, sind solche Werkzeuge unverzichtbar. Die Möglichkeit des Skripts, bestimmte Benutzer von diesen Beschränkungen auszuschließen, sorgt für zusätzliche Flexibilität und stellt sicher, dass der erforderliche Zugang nicht vollständig entzogen wird.
Das Skript
#Requires -Version 2.0 <# .SYNOPSIS Disables or enables the Run Dialog for all users and new users. .DESCRIPTION Disables or enables the Run Dialog for all users and new users, and there is an option to exclude users. Reboot is required to apply changes. .EXAMPLE -Disable Disables the Run Dialog for all users and new users. .EXAMPLE -Disable -ExcludeUsers "Test1", "Test2" Disables the Run Dialog for all users and new users, but excludes Test1 and Test2 users. .EXAMPLE -Enable Enables the Run Dialog for all users and new users. .EXAMPLE -Enable -ExcludeUsers "Test1", "Test2" Enables the Run Dialog for all users and new users, but excludes Test1 and Test2 users. .OUTPUTS None .NOTES General notes Release Notes: Initial Release By using this script, you indicate your acceptance of the following legal terms as well as our Terms of Use at https://www.ninjaone.com/terms-of-use. Ownership Rights: NinjaOne owns and will continue to own all right, title, and interest in and to the script (including the copyright). NinjaOne is giving you a limited license to use the script in accordance with these legal terms. Use Limitation: You may only use the script for your legitimate personal or internal business purposes, and you may not share the script with another party. Republication Prohibition: Under no circumstances are you permitted to re-publish the script in any script library or website belonging to or under the control of any other software provider. Warranty Disclaimer: The script is provided “as is” and “as available”, without warranty of any kind. NinjaOne makes no promise or guarantee that the script will be free from defects or that it will meet your specific needs or expectations. Assumption of Risk: Your use of the script is at your own risk. You acknowledge that there are certain inherent risks in using the script, and you understand and assume each of those risks. Waiver and Release: You will not hold NinjaOne responsible for any adverse or unintended consequences resulting from your use of the script, and you waive any legal or equitable rights or remedies you may have against NinjaOne relating to your use of the script. EULA: If you are a NinjaOne customer, your use of the script is subject to the End User License Agreement applicable to you (EULA). #> [CmdletBinding()] param ( [Parameter(Mandatory = $true, ParameterSetName = "Disable")] [Switch] $Disable, [Parameter(Mandatory = $true, ParameterSetName = "Enable")] [Switch] $Enable, [Parameter(Mandatory = $false, ParameterSetName = "Disable")] [Parameter(Mandatory = $false, ParameterSetName = "Enable")] [String[]] $ExcludeUsers ) begin { function Set-ItemProp { param ( $Path, $Name, $Value, [ValidateSet("DWord", "QWord", "String", "ExpandedString", "Binary", "MultiString", "Unknown")] $PropertyType = "DWord" ) # Do not output errors and continue $ErrorActionPreference = [System.Management.Automation.ActionPreference]::SilentlyContinue if (-not $(Test-Path -Path $Path)) { # Check if path does not exist and create the path New-Item -Path $Path -Force | Out-Null } if ((Get-ItemProperty -Path $Path -Name $Name)) { # Update property and print out what it was changed from and changed to $CurrentValue = Get-ItemProperty -Path $Path -Name $Name try { Set-ItemProperty -Path $Path -Name $Name -Value $Value -Force -Confirm:$false -ErrorAction Stop | Out-Null } catch { Write-Error $_ } Write-Host "$Path$Name changed from $CurrentValue to $(Get-ItemProperty -Path $Path -Name $Name)" } else { # Create property with value try { New-ItemProperty -Path $Path -Name $Name -Value $Value -PropertyType $PropertyType -Force -Confirm:$false -ErrorAction Stop | Out-Null } catch { Write-Error $_ } Write-Host "Set $Path$Name to $(Get-ItemProperty -Path $Path -Name $Name)" } $ErrorActionPreference = [System.Management.Automation.ActionPreference]::Continue } } process { $Path = "SoftwareMicrosoftWindowsCurrentVersionPoliciesExplorer" $Name = "NoRun" $Value = if ($Disable) { 1 }elseif ($Enable) { 0 }else { Write-Host "Either -Enable or -Disable is required to function." exit 0 } # Get each user profile SID and Path to the profile $UserProfiles = Get-ItemProperty "HKLM:SOFTWAREMicrosoftWindows NTCurrentVersionProfileList*" | Where-Object { $_.PSChildName -match "S-1-5-21-(d+-?){4}$" } | Select-Object @{Name = "SID"; Expression = { $_.PSChildName } }, @{Name = "UserHive"; Expression = { "$($_.ProfileImagePath)NTuser.dat" } }, @{Name = "UserName"; Expression = { "$($_.ProfileImagePath | Split-Path -Leaf)" } } | Where-Object { $ExcludeUsers -notcontains $_.UserName } # Add in the .DEFAULT User Profile $DefaultProfile = "" | Select-Object SID, UserHive, UserName $DefaultProfile.SID = ".DEFAULT" $DefaultProfile.UserHive = "C:UsersPublicNTuser.dat" try { # Fix for edge case where PSObject is missing the add operator $UserProfiles = { $UserProfiles | ForEach-Object { $_ } $DefaultProfile }.Invoke() } catch { Write-Host "Failed to update default profile, skipping." } # Loop through each profile on the machine Foreach ($UserProfile in $UserProfiles) { # Load User ntuser.dat if it's not already loaded If (($ProfileWasLoaded = Test-Path -Path "Registry::HKEY_USERS$($UserProfile.SID)") -eq $false) { Start-Process -FilePath "cmd.exe" -ArgumentList "/C reg.exe LOAD HKU$($UserProfile.SID) $($UserProfile.UserHive)" -Wait -WindowStyle Hidden } # Manipulate the registry $key = "Registry::HKEY_USERS$($UserProfile.SID)$($Path)" Set-ItemProp -Path $key -Name $Name -Value $Value # Unload NTuser.dat If ($ProfileWasLoaded -eq $false) { [gc]::Collect() Start-Sleep 1 Start-Process -FilePath "cmd.exe" -ArgumentList "/C reg.exe UNLOAD HKU$($UserProfile.SID)" -Wait -WindowStyle Hidden | Out-Null } } } end {}
Zugriff auf über 300 Skripte im NinjaOne Dojo
Detailansicht
Das Skript beginnt mit der Einstellung von Parametern, die es dem Benutzer ermöglichen, den Ausführungsdialog entweder zu deaktivieren oder zu aktivieren und sogar bestimmte Benutzer auszuschließen. Dann wird eine Funktion, Set-ItemProp, definiert, um die Erstellung oder Änderung von Registrierungsschlüsseln zu verwalten. Der Hauptprozess besteht darin, den Registrierungspfad für den Ausführungsdialog zu definieren, alle Benutzerprofile abzurufen und dann in einer Schleife jedes Profil zu durchlaufen, um die Registrierung entsprechend zu ändern.
Potenzielle Anwendungsfälle
Nehmen wir eine IT-Fachkraft, Sarah, an einer Universität. Um sicherzustellen, dass die Laborcomputer ausschließlich für akademische Zwecke verwendet werden, beschließt Sarah, den Ausführungsdialog zu deaktivieren und die Profile der Laborassistenten auszuschließen. Mit diesem Skript kann Alex dieses Gleichgewicht zwischen Sicherheit und Zugänglichkeit herstellen.
Vergleiche
Die Gruppenrichtlinie bietet zwar eine Möglichkeit zur Deaktivierung des Ausführungsdialogs, aber sie bietet möglicherweise nicht die Granularität, die dieses Skript bietet. Der direkte Ansatz dieses Skripts bietet mehr Flexibilität, insbesondere in größeren Organisationen.
FAQs
- Kann ich dieses Skript verwenden, um mehrere Benutzer auszuschließen?
Ja, mit dem Parameter -ExcludeUsers können mehrere Benutzer ausgeschlossen werden. - Ist nach der Ausführung des Skripts ein Neustart erforderlich?
Ja, ein Neustart stellt sicher, dass die Änderungen übernommen werden.
Empfehlungen
- Sichern Sie den aktuellen Registrierungsstatus, bevor Sie Änderungen vornehmen.
- Testen Sie das Skript zunächst in einer kontrollierten Umgebung.
- Halten Sie die Liste der ausgeschlossenen Benutzer auf dem neuesten Stand.
Abschließende Überlegungen
In der dynamischen Welt der IT bieten Tools wie NinjaOne eine zentralisierte Plattform für das IT-Management. Die Integration von Skripten wie dem hier vorgestellten stellt sicher, dass IT-Experten für jede Herausforderung gerüstet sind, insbesondere wenn es um die Verwaltung von Funktionen wie dem Windows-Ausführungsdialog geht.