-->

有没有什么办法来启动脚本编程方式添加到本地组策略?(Is there any way to prog

2019-09-16 20:28发布

我需要编写一个脚本,可以自己添加到本地组策略启动脚本,以便它可以运行,即使没有用户登录,这可以通过输入gpedit.msc并进入计算机配置> Windows设置>脚本完成>启动。 但是,我还没有找到一种以编程方式做到这一点。

我看着简单地编辑注册表。 我找到相关位置是HKLM\Software\Microsoft\Windows\CurrentVersion\Group Policy\State\Machine\Scripts\Startup ,但是简单地增加自己的条目不具有任何影响。 该计算机不是域的一部分。

有谁知道如何做到这一点? 是否有一个WMI方法?

Answer 1:

我认为你必须修改%windir%\system32\GroupPolicy\gpt.ini ,追加[{42B5FAAE-6536-11D2-AE5A-0000F87571E3}{40B6664F-4972-11D1-A7CA-0000F87571E3}]gPCMachineExtensionNames线和递增Version的一个值。 ( 源 )。

尝试添加和删除通过组策略编辑器的脚本,你可以看怎样的Gpt.ini变化。 当您添加脚本,你也可以使用创建的结构HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy\Scripts\Startup\0作为模板。

对于任何人碰到这个线程,其机器域的成员的到来,我已经注意到,域定义的组策略出现在本地策略后,注册表。 所以,如果你已经有了在域策略...\Scripts\Startup\0 ,你应该把它复制到...\Scripts\Startup\1创建本地计算机策略之前。

在任何情况下,expirement与GUI,看看试图编程之前如何的东西改变。

您还需要运行gpupdate刷新组策略。



Answer 2:

我工作的一个脚本这一点,我的测试表明您不必在所有编辑注册表。 按照这些步骤,将工作

  1. 查找scripts.ini的最后一个脚本数(有两行每个脚本“0CmdLine =”和“0Parameters =”。
  2. 添加要添加两行各脚本(如“1CmdLine = myscript.vbs”和“1Parameters =”
  3. 增量的Gpt.ini的“版本=”号
  4. 运行gpupdate应用它

为脚本解决方案重要提示:使用的Gpt.ini UTF-8编码,scripts.ini使用Unicode。 干杯M $!

希望这有助于人。

肖恩



Answer 3:

只需手动一台机器上配置并运行gpupdate / force。 然后从源计算机复制%SYSTEMROOT%\ SYSTEM32 \ GroupPolicy中为%SystemRoot%\ SYSTEM32 \ GroupPolicy中到您机器上的其余部分。



Answer 4:

尽管这是一个老帖子,我想人们可能仍然会寻找相同的情况下(因为是我)。

请找一批矿井下面延伸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


文章来源: Is there any way to programmatically add a startup script to the local group policy?