使用GPO运行PowerShell启动(登录)脚本
组策略允许我们在计算机启动/关闭或者用户登录/注销期间运行各种脚本文件。我们不仅可以使用GPO在域计算机(.bat,.cmd,.vbs)上运行经典批处理文件,还可以在启动/关闭/登录/注销过程中执行PowerShell脚本(.ps1)。
在现代操作系统(Windows 10/Windows Server 2015)中,我们可以直接从域GPO编辑器配置登录/启动PowerShell脚本。
在Windows 7和Windows Server 2008 R2之前,不可能直接从GPO运行PowerShell文件(必须从.bat批处理文件调用.ps1文件作为powershell.exe可执行文件的参数)。
运行域策略管理控制台GPMC.msc(组策略管理),创建一个新策略并将其与用户或者计算机链接到所需的Active Directory容器(OU)(可以使用WMI GPO筛选器进行精细的策略定位)。切换到策略"编辑"模式。
我们必须选择一个GPO部分来运行PowerShell脚本,具体取决于我们要执行PS1脚本的时间:
- 如果要在用户登录(注销)到计算机时运行PS脚本(例如,配置用户环境设置,程序:我们要基于AD用户属性自动生成Outlook签名,调整屏幕保护程序或者"开始"布局设置),则需要转到GPO部分:"用户配置->策略-> Windows设置->脚本(登录/注销)";
- 如果要在计算机启动时运行PowerShell脚本(以禁用过时的协议:NetBIOS和LLMNR,SMBv1,配置计算机安全设置等)或者在计算机关闭之前运行,则需要转到具有计算机设置的GPO部分:"计算机配置->策略-> Windows设置->脚本(启动/关闭)。"
使用组策略配置PowerShell启动脚本
假设我们必须在计算机启动时运行PowerShell脚本。选择"启动"策略,然后转到下一个窗口中的" PowerShell"脚本"选项卡。
现在,我们需要使用PowerShell脚本将文件复制到域控制器。单击"显示文件"按钮,然后将带有PowerShell脚本(扩展名为ps1)的文件拖到打开的"文件资源管理器"窗口中(控制台将自动打开该文件夹
\yourdomainname\SysVol\yourdomainname\Policies\{Your_GPO_GUID }\Machine\Scripts\Startup
我们最近的AD域控制器上的SysVol中的策略设置)。
由于我们配置了启动PowerShell脚本,因此我们需要检查NTFS的"读取和执行"权限。
Domain Computers
在ps1文件权限中分组(或者检查整个Machine\Scripts\Startup文件夹的权限)。
现在单击"添加",然后将复制的.PS1脚本文件添加到要由PowerShell策略运行的脚本列表中。
如果通过GPO运行多个PowerShell脚本,则可以使用"上/下"按钮控制脚本执行的顺序。
要在计算机启动期间正确运行PowerShell脚本,我们需要使用"计算机配置"->"管理模板"->"系统"->"组策略"部分中的策略配置启动脚本之前的延迟时间。启用"配置登录脚本延迟"策略,并在启动登录脚本之前指定以分钟为单位的延迟(足以完成初始化并加载所有必要的服务)。通常在这里放置1-2分钟就足够了。
默认情况下,Windows安全设置不允许运行PowerShell脚本。可以使用以下命令获取PowerShell脚本执行策略设置的当前值:
Get-ExecutionPolicy
cmdlet。如果未配置该策略,该命令将返回"受限"(任何脚本均被阻止)。可以通过"打开脚本执行"策略(在GPO计算机配置部分->管理模板-> Windows组件-> Windows PowerShell中)配置运行PowerShell脚本的安全设置。可能的政策价值:
- "仅允许签名脚本"(AllSigned),我们只能运行签名的PowerShell脚本(如何对PowerShell脚本进行数字签名?)从安全角度来看,这是最佳选择;
允许本地脚本和远程签名脚本
(RemoteSigned),我们可以运行任何本地和签名的远程脚本;- "允许所有脚本"(不受限制)是最不安全的选项,因为它允许执行任何PowerShell脚本。
如果PowerShell脚本执行策略的设置之一不适合我们,则可以在"绕过"模式下运行PowerShell脚本(不阻止脚本,不显示警告)。
为此,必须从"启动"->"脚本"部分运行PowerShell脚本。在本节中,我们可以通过创建运行powershell.exe可执行文件的常规启动批处理文件来配置ps1脚本以运行(类似于本文中描述的脚本)。指定:
- 脚本名称:
%windir%\System32\WindowsPowerShell\v1.0\powershell.exe
- 脚本参数:
-Noninteractive -ExecutionPolicy Bypass –Noprofile -file %~dp0MyPSScript.ps1
其中
%~dp0
在客户端上启动时,将自动转换为SYSVOL上脚本目录的UNC路径。
如我们所见,在这种情况下,我们可以通过指定ExecutionPolicy的Bypass参数来运行不受信任的PoSh脚本。