使用GPO运行PowerShell启动(登录)脚本

时间:2020-01-09 10:46:53  来源:igfitidea点击:

组策略允许我们在计算机启动/关闭或者用户登录/注销期间运行各种脚本文件。我们不仅可以使用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脚本。