Windows 7 使用powershell脚本作为启动外部程序的登录脚本(组策略)?

Windows 7 使用powershell脚本作为启动外部程序的登录脚本(组策略)?,windows-7,powershell,uac,group-policy,pageant,Windows 7,Powershell,Uac,Group Policy,Pageant,我制作了一个powershell脚本,用于加载pageant(一个windowssh身份验证代理) 用我的私钥。简言之,脚本只包含以下两行内容: $tool = "pageant.exe" &$tool $files.ToArray() $files是一个字符串列表,其中包含必须加载的所有私钥 我对脚本的工作没有问题,因为当我从powershell执行脚本时,它的工作非常完美 控制台 每当我登录到我的帐户时,我都希望执行此脚本,我通过添加powershell登录脚本来执行此操作 使用组

我制作了一个powershell脚本,用于加载pageant(一个windowssh身份验证代理) 用我的私钥。简言之,脚本只包含以下两行内容:

$tool = "pageant.exe"
&$tool $files.ToArray()
$files
是一个字符串列表,其中包含必须加载的所有私钥

我对脚本的工作没有问题,因为当我从powershell执行脚本时,它的工作非常完美 控制台

每当我登录到我的帐户时,我都希望执行此脚本,我通过添加powershell登录脚本来执行此操作 使用组策略编辑器(gpedit.msc)执行组策略时,脚本也会执行,并且实际上会加载pageant.exe工具

但是,使用pageant.exe工具(putty和plink)的工具不起作用。它无法识别选美验证 特工

因此,我的第一个问题是,从我自己的powershell控制台启动脚本和启动脚本有什么区别 是否来自组策略(登录脚本)

我也做了一些调查,我看到了一些不同之处。首先,当我从自己的控制台启动脚本时,启动的pageant工具在我的任务管理器中有一个UAC虚拟化标志。此属性在启动时未标记 从登录脚本组策略

第二件事是,当我禁用UAC时,脚本不会从登录脚本组策略中工作。所以我认为这与UAC有关,但我不知道如何解决这个问题。我希望UAC启动时脚本能够正常工作 也启用了


第二个问题是什么是UAC虚拟化标志,它如何影响流程的工作?第三个问题,也是最后一个问题是如何让我的脚本工作?

看起来问题是UAC虚拟化。此标志表示所有对受保护系统区域的写入尝试都将重定向到用户配置文件中的VirtualStore:
C:\Users\\AppData\Local\VirtualStore
。禁用UAC时,将关闭此重定向

启用UAC后,任何写入程序文件的尝试(例如)都将重定向到VirtualStore中相应的目录。稍后,当程序读取这些文件时,它们也会从重定向的目录中看到它们

但是,您的登录脚本在未启用虚拟化的情况下运行,因此它修改/读取文件的尝试不会转到重定向的VirtualStore,而是直接转到程序文件

因此,您必须让所有参与方在没有虚拟化目录的情况下工作。如果可执行文件具有清单,最好声明与Windows 7的兼容性,则虚拟化将关闭。但是,如果它试图写入程序文件,在没有虚拟化的情况下可能无法正常工作


注意:对HKLM的注册表写入也被虚拟化。

有许多方法可以关闭UAC虚拟化;最简单的方法是将外部清单(在您的情况下,它将被命名为pageant.exe.manifest)包含在与exe相同的文件夹中。这可能会抑制提升,但您的写入可能会失败。虚拟化正在影响您这一事实意味着pageant.exe必须写入受保护的区域,如果没有虚拟化或提升,您将被拒绝访问

因此,我要做的是将集团政策排除在外。设置在登录时运行的计划任务(单击开始并键入Task以启动Task scheduler,然后单击右侧的Create Task)(触发器选项卡,单击新建,更改顶部下拉列表)以运行脚本(操作选项卡,单击新建)并运行提升的任务(常规选项卡,选中最高权限运行)。您必须同意UAC设置提升任务一次。完成后,pageant.exe将写入保护区,其他应用程序可以在其中读取


如果在您完成此设置后,其他应用程序继续从虚拟存储而不是真实存储读取,只需删除虚拟存储中的文件/文件夹即可

为了完整起见,我添加了我自己问题的答案

  • 从我自己的powershell控制台启动脚本与从组策略(登录脚本)启动脚本有什么区别

    答:区别在于我的用户是管理员组的一部分,管理员组将以提升的权限运行脚本。当您以管理员身份登录时,Windows将生成标准用户访问令牌和管理员访问令牌。最后一个令牌将用于运行具有提升权限的程序(这没有UAC虚拟化)。现在,当我从自己的powershell控制台启动脚本时(该控制台使用标准访问令牌启动),启动的pageant将使用UAC虚拟化运行。如果使用pageant的工具以不同的模式运行,那么我的问题就出现了

  • UAC虚拟化标志是什么?它如何影响流程的工作

    A:看看这个

  • 我怎样才能让我的脚本工作

    答:您可以使用Kate Gregory提供的解决方案(不要选中“使用最高权限运行”选项),或将批处理文件添加到运行powershell脚本的启动文件夹中。这将在标准用户访问令牌和启用UAC虚拟化的情况下运行脚本


  • 我想我明白你的意思。因为我是管理员,所以登录脚本以提升的权限运行。当从我的控制台(cmd)工作时,情况并非如此,我的问题发生了。当我作为管理员运行控制台时,问题就消失了。这与您所说的“让您的团队在没有虚拟化目录的情况下工作”相符。但是我不想以管理员的身份运行我的控制台(cmd),我只想让登录脚本像普通用户一样运行,因为这可能会解决我的问题。有什么想法吗?谢谢。@MartijnB我想你不容易做到。耶