我已经制作了一个power shell脚本,它用我的私钥加载pageant (一个windows身份验证代理)。简而言之,脚本不超过以下两行:
$tool = "pageant.exe"
&$tool $files.ToArray()
$files
是一个字符串列表,它包含必须加载的所有私钥。
我对脚本的工作没有问题,因为当我在powershell控制台上执行它时,它的工作做得很好。
每当我登录到我的帐户时,我都想执行这个脚本--我通过使用组策略编辑器(gpedit.msc)添加一个powershell登录脚本组策略来执行这个脚本,脚本也会执行,并且实际上确实加载了pageant.exe工具。
但是,使用pageant.exe工具(putty和plink)的工具不起作用。它不识别选美身份验证代理。
因此,我的第一个问题是,从我自己的powershell控制台启动脚本与从组策略(登录脚本)启动脚本有什么区别?
我也有一些调查,我看到了一些差异。首先,当我从自己的控制台启动脚本时,已启动的选美工具在我的任务管理器中有一个UAC虚拟化标志。此属性在从登录脚本组策略启动时不会被标记。
第二件事是,当我禁用UAC时,脚本从登录脚本组策略执行工作。所以我认为这与UAC有关,但我不知道如何解决这个问题。当UAC也启用时,我希望脚本能够工作。
第二个问题是什么? UAC虚拟化标志是什么?它如何影响进程的工作?的第三个(也是最后一个问题)是如何让我的脚本工作?
发布于 2011-11-28 20:10:50
为了完整起见,我给自己的问题加上了答案。
发布于 2011-11-26 19:53:27
它看起来是UAC虚拟化。此标志意味着所有对受保护系统区域的写入尝试都被重定向到用户配置文件:C:\Users\<username>\AppData\Local\VirtualStore
中的C:\Users\<username>\AppData\Local\VirtualStore
。当UAC被禁用时,此重定向将被关闭。
启用UAC后,任何向Program写入的尝试,例如,都将被重定向到VirtualStore中的相应目录。稍后,当程序读取文件时,它们也会从重定向目录中看到它们。
但是,您的登录脚本在没有启用虚拟化的情况下运行,因此它修改/读取文件的尝试不会转到重定向的VirtualStore,而是直接转到Program。
因此,您必须使您的所有各方在没有虚拟化目录的情况下工作。如果可执行文件有清单,最好声明与Windows 7的兼容性,那么虚拟化将被关闭。但是,如果它试图写入Program,它可能在没有虚拟化的情况下不能正常工作。
注:对HKLM的注册表写入也被虚拟化。
发布于 2011-11-28 17:25:35
有许多方法可以关闭UAC虚拟化;最简单的方法是在与exe相同的文件夹中包含外部清单(在您的例子中,它将被命名为pageant.exe.manifest)。这可能会抑制提升,但您的写作可能会失败。虚拟化正在影响您,这意味着pageant.exe必须写入受保护的区域,如果没有虚拟化或提升,您将被拒绝访问。
因此,我要做的是将组策略排除在外。设置运行在登录处(触发器选项卡,单击新建,更改顶部下拉列表)运行的调度任务(单击“开始”并键入“任务”以启动任务调度程序,然后单击右侧的“创建任务”)以运行脚本(“操作”选项卡,单击“新建”),并将其提升(“常规”选项卡,检查“以最高权限运行”)。您必须同意UAC一次来设置提升的任务。然后你就完成了,pageant.exe会写到其他应用程序可以读取它的受保护区域。
如果在设置好这个之后,其他应用程序继续从虚拟商店读取,而不是真正的应用程序,只需删除虚拟存储中的文件/文件夹即可。
https://stackoverflow.com/questions/8279684
复制相似问题