4

ユーザーがログインしていない場合でも実行できるように、ローカル グループ ポリシーのスタートアップ スクリプトに自身を追加できるスクリプトを作成する必要があります。 > スタートアップ。ただし、これをプログラムで行う方法は見つかりませんでした。

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

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

4

4 に答える 4

2

私はこのためのスクリプトに取り組んでおり、私のテストでは、レジストリをまったく編集する必要がないことが示されています。次の手順に従ってください。

  1. scripts.ini で最後のスクリプト番号を見つけます (スクリプトごとに「0CmdLine=" および "0Parameters=".
  2. 追加するスクリプトごとに 2 行追加します (例: "1CmdLine=myscript.vbs" と "1Parameters="
  3. gpt.ini の「version=」番号を増やします
  4. Gpupdate を実行して適用します

ソリューションのスクリプト作成に関する重要な注意: gpt.ini は UTF-8 エンコーディングを使用し、scripts.ini は Unicode を使用します。乾杯M$!

これが人々に役立つことを願っています。

ショーン

于 2014-10-30T08:21:56.813 に答える
2

を変更し、行%windir%\system32\GroupPolicy\gpt.iniに追加[{42B5FAAE-6536-11D2-AE5A-0000F87571E3}{40B6664F-4972-11D1-A7CA-0000F87571E3}]して、値を 1ずつ増やす必要があると思います。(ソース)。gPCMachineExtensionNamesVersion

グループ ポリシー エディターを使用してスクリプトを追加および削除してみてください。gpt.ini がどのように変化するかを確認できます。スクリプトを追加すると、 で作成した構造HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy\Scripts\Startup\0をテンプレートとして使用することもできます。

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

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

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

于 2013-02-04T15:45:41.313 に答える
0

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

于 2013-10-18T19:25:04.213 に答える
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
于 2016-07-15T10:36:06.550 に答える