Se Demo×
×

Se NinjaOne i aktion!

Så här inaktiverar eller aktiverar du Windows Run Dialog med PowerShell

cuadro de diálogo Ejecutar de Windows

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 = "\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer"
    $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:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\*" |
        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:\Users\Public\NTuser.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

Få tillgång till

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.

Nästa steg

För att bygga upp ett effektivt och handlingskraftigt IT-team krävs en centraliserad lösning som fungerar som ett centralt redskap för att leverera IT-tjänster. NinjaOne gör det möjligt för IT-teams att övervaka, hantera, säkra och stödja alla sina enheter, oavsett var de befinner sig, utan behovet av en komplex infrastruktur på plats.

Lär dig mer om NinjaOne endpoint-hantering, ta en live tour, eller starta en gratis provperiod av NinjaOne.

Du kanske även gillar dessa inlägg

Redo att bli en IT-ninja?

Ta reda på hur NinjaOne kan hjälpa dig att förenkla din IT-hantering.

By clicking the “I Accept” button below, you indicate your acceptance of the following legal terms as well as our 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 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).