我在 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 脚本。