可信发布者证书安装
Trusted Publisher Certificate installation
有什么方法可以添加证书 使用 cmd/shell/bat 在 windows 10 中无管理员权限 .
我有一个命令可以在“受信任的发布者”中静默添加证书:
certutil -addstore "TrustedPublisher" my_certificate.cer
但此命令需要管理员命令提示符 运行。
根据下面问题的评论,这批应该可以满足您的需求:
@echo off
setlocal EnableExtensions EnableDelayedExpansion
REM Check admin mode, auto-elevate if required.
openfiles > NUL 2>&1 || (
REM Not elevated. Do it.
echo createObject^("Shell.Application"^).shellExecute "%~dpnx0", "%*", "", "runas">"%TEMP%\%~n0.vbs"
cscript /nologo "%TEMP%\%~n0.vbs"
goto :eof
)
del /s /q "%TEMP%\%~n0.vbs" > NUL 2>&1
REM Can't be here without elevation.
certutil -addstore "TrustedPublisher" my_certificate.cer
goto :eof
批处理将自动请求提升,然后在提升的 cmd
中执行您的命令,然后终止。
工作原理:
openfiles
是 Windows 10 附带的标准程序(例如,对于 Windows 7,我以前用 fsutils
来代替)。
这个程序有一个特殊性:它需要提升,没有参数没有任何危害,和returns没有提升的合适的错误代码。
因此,当您在 没有提升 的情况下启动它时,它会打印一条错误消息和 returns 1。
使用 elevation,它打印东西和returns 0。
因为我们不关心它显示什么,它的 stdout
和 stderr
都被发送到 NUL
.
因此,当我们 NOT 提升时,||
运算符将执行括号内的代码。否则,它会跳过它并转到紧随其后的 del
行 - 此行旨在清理用于提升的临时文件,我将在下面解释。
所以,我们没有提升。目的是在 %TEMP%
文件夹中创建一个非常小的 VBS 脚本。为了不混淆同时启动的多个批次,我们将这个临时文件命名为当前批次文件名(即“%TEMP%%~n0.vbs”部分)。
VBS 包含一个命令:它将在批处理文件本身(不是 VBS)上调用“ShellExecute”,并带有所有可见参数(它们在创建 VBS 文件时被扩展,它们不会传递给VBS 然后再次使用 BAT)使用 runas
关键字 - 这就是魔法。
此关键字执行此操作(请参阅 Microsoft documentation):
runas Launches an application as Administrator. User Account Control (UAC) will prompt the user for consent to run the application elevated or enter the credentials of an administrator account used to run the application.
不幸的是,我们不能直接从批处理中调用此函数(至少不是没有一些丑陋的技巧),但是从 VBS 中这样做非常容易和理解。 VBS 也是 Windows 的标准配置。
因此,我们现在启动 VBS,并使用 goto :eof
终止 non-elevated 批处理。 VBS 启动,并重新启动批处理,但带有提升(和 UAC 提示)。批处理再次启动,具有所有以前的命令行参数,将检测到它已经提升。
我们现在只需要使用 del
命令清理临时 VBS 文件,我们可以继续我们的批处理,确保我们处于提升的过程中。
有什么方法可以添加证书 使用 cmd/shell/bat 在 windows 10 中无管理员权限 .
我有一个命令可以在“受信任的发布者”中静默添加证书:
certutil -addstore "TrustedPublisher" my_certificate.cer
但此命令需要管理员命令提示符 运行。
根据下面问题的评论,这批应该可以满足您的需求:
@echo off
setlocal EnableExtensions EnableDelayedExpansion
REM Check admin mode, auto-elevate if required.
openfiles > NUL 2>&1 || (
REM Not elevated. Do it.
echo createObject^("Shell.Application"^).shellExecute "%~dpnx0", "%*", "", "runas">"%TEMP%\%~n0.vbs"
cscript /nologo "%TEMP%\%~n0.vbs"
goto :eof
)
del /s /q "%TEMP%\%~n0.vbs" > NUL 2>&1
REM Can't be here without elevation.
certutil -addstore "TrustedPublisher" my_certificate.cer
goto :eof
批处理将自动请求提升,然后在提升的 cmd
中执行您的命令,然后终止。
工作原理:
openfiles
是 Windows 10 附带的标准程序(例如,对于 Windows 7,我以前用 fsutils
来代替)。
这个程序有一个特殊性:它需要提升,没有参数没有任何危害,和returns没有提升的合适的错误代码。
因此,当您在 没有提升 的情况下启动它时,它会打印一条错误消息和 returns 1。
使用 elevation,它打印东西和returns 0。
因为我们不关心它显示什么,它的 stdout
和 stderr
都被发送到 NUL
.
因此,当我们 NOT 提升时,||
运算符将执行括号内的代码。否则,它会跳过它并转到紧随其后的 del
行 - 此行旨在清理用于提升的临时文件,我将在下面解释。
所以,我们没有提升。目的是在 %TEMP%
文件夹中创建一个非常小的 VBS 脚本。为了不混淆同时启动的多个批次,我们将这个临时文件命名为当前批次文件名(即“%TEMP%%~n0.vbs”部分)。
VBS 包含一个命令:它将在批处理文件本身(不是 VBS)上调用“ShellExecute”,并带有所有可见参数(它们在创建 VBS 文件时被扩展,它们不会传递给VBS 然后再次使用 BAT)使用 runas
关键字 - 这就是魔法。
此关键字执行此操作(请参阅 Microsoft documentation):
runas Launches an application as Administrator. User Account Control (UAC) will prompt the user for consent to run the application elevated or enter the credentials of an administrator account used to run the application.
不幸的是,我们不能直接从批处理中调用此函数(至少不是没有一些丑陋的技巧),但是从 VBS 中这样做非常容易和理解。 VBS 也是 Windows 的标准配置。
因此,我们现在启动 VBS,并使用 goto :eof
终止 non-elevated 批处理。 VBS 启动,并重新启动批处理,但带有提升(和 UAC 提示)。批处理再次启动,具有所有以前的命令行参数,将检测到它已经提升。
我们现在只需要使用 del
命令清理临时 VBS 文件,我们可以继续我们的批处理,确保我们处于提升的过程中。