有没有办法以编程方式将启动脚本添加到本地组策略?

问题描述 投票:0回答:5

我需要编写一个脚本,可以将自身添加到本地组策略中的启动脚本中,以便即使在没有用户登录的情况下也可以运行。这可以使用 gpedit.msc 并进入“计算机配置”>“Windows 设置”>脚本 > 启动。但是,我还没有找到以编程方式执行此操作的方法。

我研究过简单地编辑注册表。我发现相关位置是

HKLM\Software\Microsoft\Windows\CurrentVersion\Group Policy\State\Machine\Scripts\Startup
,但是仅仅添加我自己的条目并没有任何效果。该计算机不是域的一部分。

有人知道该怎么做吗?有WMI方法吗?

windows scripting wmi group-policy
5个回答
2
投票

我认为您必须修改

%windir%\system32\GroupPolicy\gpt.ini
,将
[{42B5FAAE-6536-11D2-AE5A-0000F87571E3}{40B6664F-4972-11D1-A7CA-0000F87571E3}]
附加到
gPCMachineExtensionNames
行并将
Version
值增加 1。 (来源)。

尝试通过组策略编辑器添加和删除脚本,您可以观察 gpt.ini 如何变化。添加脚本时,您还可以使用

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy\Scripts\Startup\0
中创建的结构作为模板。

对于遇到此线程且其计算机是域成员的任何人,我注意到域定义的组策略出现在注册表中本地策略之后。因此,如果您已经在 ...\Scripts\Startup\0 获得了域策略,则应在创建本地计算机策略之前将其复制到

...\Scripts\Startup\1

无论如何,在以编程方式尝试之前,请先使用 GUI 进行过期并查看内容如何变化。

您还需要运行

gpupdate

来刷新组策略。

    


2
投票

在scripts.ini中找到最后一个脚本编号(每个脚本有两行“0CmdLine =”和“0Parameters =”。
  1. 为每个要添加的脚本添加两行(例如“1CmdLine=myscript.vbs”和“1Parameters=”
  2. 增加 gpt.ini 中的“version=”数字
  3. 运行 Gpupdate 来应用它
  4. 编写解决方案脚本的重要注意事项:gpt.ini 使用 UTF-8 编码,scripts.ini 使用 Unicode。干杯M$!

希望这对人们有帮助。

肖恩


0
投票


0
投票

请在下面找到我的一批用于扩展scripts.ini的文件。

您只需要 2 或 3 个参数,示例位于脚本末尾。


另外,请记住根据需要编辑 gpt.ini!

有关

gpt.ini 的更多信息请参见此处
确定 GUID 的最简单方法是在 gpedit.msc 中进行编辑并观察更改。
请小心使用脚本并在生产环境中使用之前进行测试!

@echo off setlocal enabledelayedexpansion REM get parameter for scripts.ini changes if not "%~1"=="" ( set type=%1 ) else ( goto enderror ) if not "%~2"=="" ( set cmd=%2 ) else ( goto enderror ) if not "%~3"=="" ( set params=%3 ) else ( set params= ) if not exist scripts.ini echo. 2>scripts.ini if exist scripts.ini ( set ctr=0 for /f %%a in (scripts.ini) do ( echo %%a | findstr /C:"[Logon]" 1>nul if not errorlevel 1 ( set /a ctr+=1 ) ) if !ctr!==0 ( echo [Logon]>>scripts.ini ) set ctr=0 for /f %%a in (scripts.ini) do ( echo %%a | findstr /C:"[Logoff]" 1>nul if not errorlevel 1 ( set /a ctr+=1 ) ) if !ctr!==0 ( echo [Logoff]>>scripts.ini ) ) REM remove scripts-new.ini if exists if exist scripts-new.ini ( del /F /Q scripts-new.ini ) REM ctr = number at front for each cmd-param pair - subctr = counter for lines --> pairs - diff = change from Logon to Logoff or vice versa set ctr=0 set subctr=0 set diff=0 set used=0 for /f %%a in (scripts.ini) do ( set line=%%a echo !line! | findstr /C:"[Logoff]" 1>nul if not errorlevel 1 ( if !diff!==1 goto endlogon ) echo !line! | findstr "CmdLine=!cmd!" 1>nul if not errorlevel 1 ( set /a used+=1 ) if !diff!==1 ( echo !ctr!!line:~1!>>scripts-new.ini set /a subctr+=1 if !subctr!==2 ( set /a ctr+=1 set subctr=0 ) ) echo !line! | findstr /C:"[Logon]" 1>nul if not errorlevel 1 ( set diff=1 echo !line!>>scripts-new.ini ) ) :endlogon if /I !type!==logon if !used!==0 ( echo !ctr!CmdLine=!cmd!>>scripts-new.ini echo !ctr!Parameters=!params!>>scripts-new.ini ) set ctr=0 set diff=0 set used=0 for /f %%a in (scripts.ini) do ( set line=%%a echo !line! | findstr /C:"[Logon]" 1>nul if not errorlevel 1 ( if !diff!==1 goto endlogoff ) echo !line! | findstr "CmdLine=!cmd!" 1>nul if not errorlevel 1 ( set /a used+=1 ) if !diff!==1 ( echo !ctr!!line:~1!>>scripts-new.ini set /a subctr+=1 if !subctr!==2 ( set /a ctr+=1 set subctr=0 ) ) echo !line! | findstr /C:"[Logoff]" 1>nul if not errorlevel 1 ( set diff=1 echo !line!>>scripts-new.ini ) ) :endlogoff if /I !type!==logoff if !used!==0 ( echo !ctr!CmdLine=!cmd!>>scripts-new.ini echo !ctr!Parameters=!params!>>scripts-new.ini ) goto end :enderror echo Usage: scripts-extender.bat [LOGON ^| LOGOFF] [Script Name] "[optional Parameters for Script - WITH QUOTES!]" echo Example: scripts-externder.bat logon netlogon.bat "param1 param2" :end move /Y scripts.ini scripts-old.ini move /Y scripts-new.ini scripts.ini



0
投票
scripts.ini

文件中的任何一个(然后应用 gpupdate/force)确实有效。根据我的经验,不需要编辑gpt.ini。当检查 gpedit.msc 时,策略就在那里。注册表项更多的是 LGP 的副产品而不是源。 不能只是盲目地复制粘贴 scripts.ini 文件,因为它们可能并且会干扰其他可能设置的策略。 Scripts.ini 文件可以以 UTF-8 保存,没有任何副作用。 不幸的是,我不精通 BATch 脚本,所以我无法评论代码的好坏。 最后,我确实有一个(理论上)工作的Python代码,我可以根据要求提供,但不幸的是我再次遇到错误[错误13]权限被拒绝(编辑scripts.ini),尽管我的程序(制作可执行文件 pyinstaller)正在提升运行。 感谢您的阅读,并再次为不完全正确的答案表示歉意。

© www.soinside.com 2019 - 2024. All rights reserved.