服务器 2012 GPO:计算机启动时 PowerShell 脚本未运行

服务器 2012 GPO:计算机启动时 PowerShell 脚本未运行

我在 Amazon EC2 上有几个 Server 2012 实例,我正在设置 GPO。GPO 的所有设置都应用得很好,除了计算机启动时指定的 PowerShell 脚本都没有真正执行。这些脚本位于 UNC 共享中,该共享已应用经过身份验证的用户,并具有完全权限。我猜想这可能与执行策略有关,但我不确定如何自动绕过它。我可以只需进入每个实例并绕过执行策略,但这显然不是一个好主意,而且我最终将连接运行相同脚本的 Windows 7 计算机。

我怎样才能让脚本真正运行?Google 搜索没有找到太多结果...

当前权限

分享 - 已认证用户 (完整版)

NTFS - 所有人(完整);创建者所有者(特殊);系统(完整)

答案1

回复晚了,但您的问题可能是 2012 年默认延迟登录脚本。请尝试较低的设置:

Computer Configuration\Policies\Administrative Templates\System\Group Policy\Configure Logon Script Delay

答案2

如果这是计算机策略,则经过身份验证的用户不是您想要的。您需要授予Domain Computers读取权限。

答案3

我认为从 Windows 共享远程运行的 PowerShell 脚本被视为 Internet 的一部分,因此您有以下几个选择:

  • 执行策略需要远程签名,并且您必须对脚本进行签名。
  • 执行策略需要不受限制。
  • 将脚本复制到本地,此时如果您的执行策略是远程签名或不受限制,您就可以运行它。
  • 调用 powershell.exe 时,使用-ExecutionPolicy值为Unrestricted

答案4

这是一个老话题,但答案很可能是 GPO 的启动属性中 PowerShell 脚本的文件名和/或路径中有空格。要修复此问题,只需在 GPO 的启动属性中未运行的 PowerShell 脚本名称的完整路径周围加上双引号即可。

启动“脚本名称”之前: \\服务器名称\Scripts\安装 KBs\安装 KBs.ps1 这显示 GPResults 中没有 Last Run。EventLog 没有帮助,它显示 ErrorCode 0 ScriptElaspedTimeInSeconds 0。然而,在注册表 HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy\State\Machine\Scripts\Startup\#\#(其中 # 是数字)中,它显示真正的 ErrorCode 0xfffd0000 (4294770688)。这是因为找不到脚本 - 由于空格。

启动“脚本名称”后: “\\服务器名称\Scripts\安装 KBs\安装 KBs.ps1” 现在,GPResults 中的脚本的 Last Run 显示它已运行。注册表中的上述键显示 ErrorCode 0x0,这是正常的。

此已解决并修复的解决方案已在 Windows 7 Enterprise 上进行了测试。我不需要更改权限,但存在具有读取权限的 AUTHENTICATED USERS,这允许计算机对象读取 PowerShell 脚本。

相关内容