2012-04-30 32 views
3

ユーザーがログインしていなくても実行できるように、ローカルグループポリシーのスタートアップスクリプトに自分自身を追加するスクリプトを作成する必要があります。これはgpedit.mscを使用して実行でき、[コンピュータの構成]> [Windowsの設定>スクリプト>スタートアップ。しかし、私はプログラムでこれを行う方法を見つけていません。起動スクリプトをローカルグループポリシーにプログラムで追加する方法はありますか?

私は単純にレジストリを編集しました。関連する場所がHKLM\Software\Microsoft\Windows\CurrentVersion\Group Policy\State\Machine\Scripts\Startupであることがわかりましたが、単に自分のエントリを追加しても効果はありません。コンピュータはドメインの一部ではありません。

誰でもこれを行う方法を知っていますか? WMIのアプローチはありますか?

答えて

1

は、私はあなたがgPCMachineExtensionNamesラインに[{42B5FAAE-6536-11D2-AE5A-0000F87571E3}{40B6664F-4972-11D1-A7CA-0000F87571E3}]を追加し、1でVersion値をインクリメント、%windir%\system32\GroupPolicy\gpt.iniを変更することがあると思います。 (source)。

グループポリシーエディタを使用してスクリプトを追加したり削除したりすると、gpt.iniの変更の仕組みを見ることができます。スクリプトを追加するときは、HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy\Scripts\Startup\0で作成した構造をテンプレートとして使用することもできます。

は、そのマシンがドメインのメンバーであるこのスレッドに出くわす誰のために、私は、ドメインに定義されたグループポリシーがローカルポリシーの後、レジストリに表示されることに気付きました。したがって、既にドメインポリシーを...\Scripts\Startup\0に設定している場合は、ローカルマシンポリシーを作成する前にそれを...\Scripts\Startup\1にコピーする必要があります。

いずれにしても、GUIで期限切れになり、プログラムで試行する前に物がどのように変化するかを確認してください。

グループポリシーを更新するには、gpupdateも実行する必要があります。

0

1台のマシンで手動で設定し、gpupdate/forceを実行するだけです。次に、%systemroot%\ System32 \ GroupPolicyをソースマシンから残りのマシンの%systemroot%\ System32 \ GroupPolicyにコピーします。

2

私はこのためのスクリプトを作成しています。テストでは、レジストリを編集する必要は全くありません。次の手順に従いますし、それが

  1. はscripts.iniの最後のスクリプトの数(各スクリプトのための2つのラインがあり、「0CmdLine =」と「0Parameters =」を検索していきます。
  2. あなたのそれぞれのための2つの行を追加します。スクリプトは、スクリプトのためにそれを

重要な注意を適用する(例えば、 "1CmdLine = myscript.vbs" と "1Parameters ="

  • インクリメント "バージョン=" gpt.ini
  • ランでgpupdateに番号を追加します解決策:gpt.iniはUTF-8エンコーディング、sc ripts.iniはUnicodeを使用します。乾杯!

    これは人々に役立つことを望みます。

    ショーン

  • 0

    それは古いポストだにもかかわらず、私は(私があったように)人々はまだ同じシナリオを探しているかもしれないと思います。

    下記のscripts.iniを拡張するためのバッチをご覧ください。
    2つまたは3つのパラメータが必要です(例:スクリプトの最後)。

    また、必要に応じてgpt.iniを編集してください。
    gpt.ini here
    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 
    
    関連する問題