脚本
@echo off
:: 检查是否以管理员权限运行
net session >nul 2>&1
if %errorLevel% NEQ 0 (
echo 请求管理员权限...
goto UACPrompt
)
goto :Menu
:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
del /f /q "%temp%\getadmin.vbs" >nul 2>&1
exit /b
:Menu
cls
echo.
echo ============= PowerShell 执行策略管理 =============
echo.
echo 1. Restricted - 默认,禁止运行脚本
echo 2. RemoteSigned - 允许本地脚本,远程脚本需签名
echo 3. Unrestricted - 允许所有脚本,有警告
echo 4. AllSigned - 所有脚本必须由受信任发布者签名
echo 5. Bypass - 不阻止任何,不输出
echo 6. Default - 恢复默认策略(Restricted)
echo 7. 退出
echo.
set /p choice=请选择(1-7):
if "%choice%"=="1" goto SetRestricted
if "%choice%"=="2" goto SetRemoteSigned
if "%choice%"=="3" goto SetUnrestricted
if "%choice%"=="4" goto SetAllSigned
if "%choice%"=="5" goto SetBypass
if "%choice%"=="6" goto SetDefault
if "%choice%"=="7" goto ExitScript
echo 无效的选择,请重新输入。
timeout /t 2 >nul
goto Menu
:SetRestricted
call :SetPolicy Restricted
goto Menu
:SetRemoteSigned
call :SetPolicy RemoteSigned
goto Menu
:SetUnrestricted
call :SetPolicy Unrestricted
goto Menu
:SetAllSigned
call :SetPolicy AllSigned
goto Menu
:SetBypass
call :SetPolicy Bypass
goto Menu
:SetDefault
call :SetPolicy Default
goto Menu
:SetPolicy
echo 设置执行策略为:%1...
:: 设置 64 位主注册表项
reg add "HKLM\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell" /v ExecutionPolicy /t REG_SZ /d %1 /f >nul 2>&1
:: 设置 32 位兼容注册表项(仅适用于 64 位系统)
reg add "HKLM\SOFTWARE\Wow6432Node\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell" /v ExecutionPolicy /t REG_SZ /d %1 /f >nul 2>&1
if "%1"=="Default" (
echo 已恢复为默认策略(Restricted)。
) else (
echo 已设置 PowerShell 执行策略为:%1
)
timeout /t 5 >nul
exit /b
:ExitScript
echo 正在退出...
timeout /t 2 >nul
exit
评论