分类:
2008-09-09 15:20:19
在 vista引进的诸多性功能中,用户帐户控制(UAC)是最重要的功能之一。使用用户帐户控制,即便是管理员用户也使用标准特权来运行大多数应用程序,但是针对特定管理任务和应用程序功能具有“提升权限的可能”。
在使用 Vista一段较长的时间后,根据需要来提升任务和应用程序的权限已渐成自然。不过,在Windows Vista中尝试提升某些类型的任务时,我也遇到许多不便之处,令人感到沮丧。
因此,本着以前的Windows?PowerToys的精神,我创建了一些脚本提升PowerToy来克服这些限制。您可以在位于TechNet的代码中找到我将要讨论的所有PowerToy。您还可以参阅2006年11月AlexHeaton的文章“用'用户帐户控制'实现非管理员操作之梦”,了解UAC是如何工作的(请参阅“更多资源”侧栏)。
Windows Vista的脚本提升PowerToy
提升命令PowerToy
第一件令人不快的事情是无法从命令行或“运行”对话框提升应用程序。因此在Microsoft内部进行了广泛咨询后,我从JohnStephens(Microsoft的软件设计工程师)那里得到了一个示例脚本,提供了我所需要的信息。事实上,如果您将动词“runas”传递给ShellExecuteAPI或其COM等效项(Shell.Application的ShellExecute方法),所启动的应用程序将提示进行提升(有关详细信息,请参阅侧栏)。这就允许我创建了第一个提升PowerToy—提升命令PowerToy。
此工具(由ElevateCommand.inf、elevate.cmd和elevate.vbs文件组成)将向您的系统添加一个elevate命令。这允许您从命令行、脚本或“运行”对话框中启动提示进行提升的应用程序。例如,以下命令将用记事本打开Win.ini(在提示进行提升之后):
elevatenotepadc:\Windows\Win.ini在WindowsScriptHost(WSH)、WindowsPowerShell?或其他脚本中使用elevate命令时,需要将脚本宿主可执行文件(如wscript、CScript或powershell)指定为该应用程序。例如,要运行vbs,您需要使用如下代码:
elevatewscript“C:\windows\system32\slmgr.vbs”–dli帮助文本对此进行了解释。使用带-?参数或不带任何参数的elevate命令可查看帮助文本。
以管理员身份运行脚本
另一个不便之处是对于大多数Windows脚本类型,没有“以管理员身份运行”上下文菜单选项(当您在资源管理器中右键单击文件时)。命令外壳脚本(那些带有.bat和.cmd文件扩展名的文件)是一个例外。因此我开始对此进行调查。
对于各种文件类型,许多上下文菜单选项都是通过注册表的HKEY_CLASSES_ROOT部分中的“object”类型的命令键控制的(有关详细信息,请参阅侧栏中的“动词和文件关联”)。事实是,如果该命令键名为runas,则所调用的命令将提示进行提升。这就使我可以创建以下PowerToy:
提升HTML应用程序PowerToy(ElevateHTA.inf)
提升WindowsPowerShell脚本PowerToy(ElevatePowerShellScript.inf)
提升WSH脚本PowerToy(ElevateWSHScript.inf、elevate.cmd、elevate.vbs)
这些PowerToy分别为HTA、WindowsPowerShell和Windows脚本宿主文件类型添加了一个“以管理员身份运行”资源管理器上下文菜单项(如图1所示)。
ElevateWSHScript.inf还会添加一个“使用命令提示符以管理员身份运行”菜单项。(请在安装前阅读ElevatePowerShellScript.inf中的说明。)
“以管理员身份运行”上下文菜单选项
[1]