「gpresult /r /scope user」を使用すると、さまざまな gpo に特定のルールを適用したくありません。アクティブな GPO (セキュリティ グループ) を確認できます。これらのアクティブな GPO の一部をバッチ ファイルにフィルター処理するにはどうすればよいでしょうか。これは私の gpresult からの結果の一部です:
De gebruiker is lid van de volgende beveiligingsgroepen
Domain Users
Iedereen
SophosAdministrator
SophosUser
BUILTIN\Administrators
Gebruikers
INTERACTIEF
AANMELDEN OP DE CONSOLE
Geverifieerde gebruikers
Deze organisatie
LOKAAL
Iedereen
GS_08_cv's
Tekenkamer
GS_03_verslagen_openbaar
GS_07_overeenkomsten
GS_01_facturen
GS_04_Functieprofielen
GS_00_documenten
AEC
GS_02_functioneringsgesprekken
GS_06_offertes
GS_05_Arbeidsovereenkomsten
GS_09_ aanbevelingsbrieven
GS_03_verslagen_beperkt
Systeembeheer
Hoog verplicht niveau
findstrを使用して特定の名前 (文字列?) を検索できることはわかっています。
gpresult /r /scope user | findstr /L /i "SysteemBeheer" > nul 2>&1
REM *alternative* gpresult /r /scope user | FIND /i "SysteemBeheer" > nul 2>&1
IF %ERRORLEVEL% EQU 0 (ECHO Sys.Beheer) ELSE ECHO NO.sys.beheer
しかし、複数の行が読み取られるように変更するにはどうすればよいですか?
つまり(例としていくつかのコードを借りました)
systeminfo | find "Microsoft Windows" > %TEMP%\osname.txt
FOR /F "usebackq delims=: tokens=2" %%i IN (%TEMP%\osname.txt) DO set vers=%%i
echo %vers% | find "Windows 7" > nul
if %ERRORLEVEL% == 0 goto ver_7
echo %vers% | find "Windows Server 2008" > nul
if %ERRORLEVEL% == 0 goto ver_2008
echo %vers% | find "Windows Vista" > nul
if %ERRORLEVEL% == 0 goto ver_vista
goto warnthenexit
つまり、これは複数の変数を検索するということです。gpresult 関数から複数のセキュリティ グループ (GPO) を検索する方法を期待しています (または、より良い方法でしょうか?)。
systeembeheerが存在する場合は blaat1を実行し、 aec が存在する場合は blaat2を実行し、 tekenkamer が存在する場合は blaat3 を 実行しますが、複数の GPO が存在する可能性があるため、上記のいずれかが存在する場合はスクリプト/検索を停止してはなりません。他のいずれかが存在するかどうかを確認する必要があります。
***おそらくもう少しこれに似ていますか?
@echo off
CLS
setlocal enabledelayedexpansion
for %%i in (systeembeheer tekenkamer aec) do (
gpresult /r /scope user | findstr /L /i %%i
if errorlevel 0 if not errorlevel 1 echo %%i ok process found !errorlevel!
if errorlevel 1 if not errorlevel 2 echo %%i no process found !errorlevel!
)
:exit
pause
そして少し変更しました:
@ECHO OFF
CLS
SETLOCAL ENABLEEXTENSIONS
SETLOCAL ENABLEDELAYEDEXPANSION
for %%i in (SysteemBeheer Administratie PersoneelsZaken TeamPlan) do (
gpresult /r /scope user | findstr /L /i %%i > nul 2>&1
if errorlevel 0 if not errorlevel 1 Set "GPO_%%i=True"
if errorlevel 1 if not errorlevel 2 Set "GPO_%%i=False"
REM if errorlevel 0 if not errorlevel 1 echo %%i ok process found !errorlevel! *debug lines*
REM if errorlevel 1 if not errorlevel 2 echo %%i no process found !errorlevel! *debug lines*
)
if "%GPO_systeemBeheer%" == "True" (Echo GPO_SysteemBeheer=%GPO_systeemBeheer%) else Echo GPO_SysteemBeheer Not Found!
if "%GPO_Administratie%" == "True" (Echo GPO_Administratie=%GPO_Administratie%) else Echo GPO_Administratie Not Found!
if "%GPO_PersoneelsZaken%" == "True" (Echo GPO_PersoneelsZaken=%GPO_PersoneelsZaken%) else Echo GPO_PersoneelsZaken Not Found!
if "%GPO_TeamPlan%" == "True" (Echo GPO_TeamPlan=%GPO_TeamPlan%) else Echo GPO_TeamPlan Not Found!
:exit
echo.
echo.
PAUSE
これは私が望むことをしているようですが、それが最善の方法なのか正しい方法なのかわかりません???