I den komplicerade IT-världen är det av yttersta vikt att hantera användarnas åtkomst till vissa systemfunktioner. En sådan funktion är Windows Run Dialog. Men varför skulle IT-personal vilja begränsa åtkomsten? Den här guiden ger en djupdykning i PowerShell-skriptet som är utformat för att styra tillgängligheten i Run Dialog och konsekvenserna av sådana åtgärder.
Översikt över dialogrutan Kör i Windows
-
Vad är Windows kördialog?
- Windows kördialog är en funktion som ger användarna ett snabbt sätt att starta program, öppna mappar och utföra systemkommandon. Om du trycker på Windows + R visas en liten dialogruta där du kan skriva in kommandon direkt.
-
Hur används kördialogen i Windows?
- Den används främst för snabb åtkomst. Istället för att navigera genom flera menyer eller mappar kan användarna helt enkelt skriva in ett kommando eller en sökväg i kördialogen för att direkt starta ett program eller öppna en katalog.
Gavins synpunkt
Kördialogen är en av de viktigaste platserna att besöka om man vill få åtkomst till eller köra kommandon på det större systemet. Eftersom det är den primära punkten för utförande av kommandon och program innebär låsning av detta en mer kontrollerad miljö och avsevärt minskade risker.
Även om detta inte är den enda exekveringspunkten för kommandon och program, är det den som oftast används av personer som inte nödvändigtvis har erfarenhet av systemadministration. Låsning av detta bör användas i kombination med andra säkerhetsrestriktioner (som att förhindra åtkomst till registret eller kommandotolken).
Säkerhetsimplikationer av att inaktivera kördialogen i Windows
Vilka är riskerna?
Genom att inaktivera kördialogen kan du oavsiktligt hindra produktiviteten. Vissa avancerade användare förlitar sig på kördialogen för snabba uppgifter och systemhantering. Om det inte görs på rätt sätt kan manipulering av systeminställningar dessutom leda till andra oavsiktliga problem.
Vilka är fördelarna?
Den främsta fördelen är ökad säkerhet. Om du inaktiverar kördialogen kan du förhindra obehöriga eller skadliga åtgärder, särskilt från användare som kanske inte är så insatta i systemdrift. Det minskar risken för oavsiktliga ändringar eller utförande av skadliga kommandon.
Hur kan ni minska riskerna?
Innan du genomför några förändringar är det viktigt att:
- Kommunicera med användarna, särskilt de som kan påverkas av förändringen.
- Tillhandahålla alternativa metoder eller verktyg för uppgifter som tidigare utfördes med hjälp av kördialogen.
- Se till att det finns ett sätt att snabbt återställa ändringarna om det behövs.
Bakgrund
Det PowerShell-skript som tillhandahålls är ett robust verktyg för IT-proffs och Managed Service Providers (MSP) för att kontrollera tillgängligheten i Run Dialog. I miljöer där säkerhet har högsta prioritet blir sådana verktyg oumbärliga. Skriptets förmåga att exkludera specifika användare från dessa begränsningar ger ytterligare flexibilitet och säkerställer att nödvändig åtkomst inte helt dras in.
Manus
#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 {}
Få tillgång till över 300 skript i NinjaOne Dojo
Detaljerad uppdelning
Skriptet börjar med att ställa in parametrar, så att användare antingen kan inaktivera eller aktivera kördialogen och även exkludera specifika användare. En funktion, Set-ItemProp, definieras sedan för att hantera skapande eller ändring av registernycklar. Den huvudsakliga processen består i att definiera registersökvägen för kördialogen, hämta alla användarprofiler och sedan loopa igenom varje profil för att ändra registret i enlighet med detta.
Potentiella användningsområden
Tänk dig en IT-expert, Sarah, på ett universitet. För att säkerställa att labbdatorerna endast används för akademiska ändamål beslutar Sarah att inaktivera kördialogen, vilket utesluter labbassistenternas profiler. Detta skript gör det möjligt för Alex att uppnå denna balans mellan säkerhet och tillgänglighet.
Jämförelser
Grupprinciper kan användas för att inaktivera kördialogen, men kanske inte med samma noggrannhet som detta skript. Det här scriptets direkta tillvägagångssätt ger mer flexibilitet, särskilt i större organisationer.
Vanliga frågor
- Kan jag använda detta skript för att utesluta flera användare?
Ja, det går att utesluta flera användare med parametern -ExcludeUsers. - Krävs en omstart efter att skriptet har körts?
Ja, en omstart säkerställer att ändringarna tillämpas.
Rekommendationer
- Säkerhetskopiera det aktuella registret innan du gör ändringar.
- Testa skriptet i en kontrollerad miljö först.
- Håll listan över uteslutna användare uppdaterad.
Avslutande tankar
I den dynamiska IT-världen erbjuder verktyg som NinjaOne en centraliserad plattform för IT-hantering. Genom att integrera skript som det som diskuterats säkerställer man att IT-proffs är rustade för att hantera alla utmaningar, särskilt när det gäller att hantera funktioner som Windows Run Dialog.