0

AdFind を呼び出すバッチ スクリプトを開始しようとしています: http://www.joeware.net/freetools/tools/adfind/

これの目的は、SPLA_ で始まるすべてのセキュリティ グループの優先出力リスト ユーザー情報を使用して SPLA レポートを作成することです。

AdFind に必要なコマンドを見つけましたが、1 行のコマンドでは好みの出力を得ることができません。

私が使用しているコマンドは次のとおりです。

優先出力に最も近いコマンドで、ヘッダーとして DN のみが欠落しています。

C:\AdFind>adfind -b "dc=exampleDC,dc=local" -f "CN=SPLA_*" member -list | 
adfind name mail -nodn -csv
"name","mail"
"UserA","usera@example.com"
"UserB","userb@example.com"
"UserA","usera@example.com"

メンバーの後にすべてを削除すると、2 番目の呼び出しからのユーザー情報が含まれません。

C:\AdFind>adfind -b "dc=exampleDC,dc=local" -f "CN=SPLA_*" member
dn:CN=SPLA_Microsoft Office Std,OU=Security Groups,OU=MyBusiness,DC=ExampleDC,DC=local
>member: CN=UserA Acct,CN=Users,DC=ExampleDC,DC=local
>member: CN=UserB Acct,CN=Users,DC=ExampleDC,DC=local

dn:CN=SPLA_Remote Desktop Users,OU=Security Groups,OU=MyBusiness,DC=ExampleDC,DC=local
>member: CN=UserA Acct,CN=Users,DC=ExampleDC,DC=local

-list は、「dn:」で始まる行を削除します。2 回目の AdFind 呼び出しで、最初のコマンド ブレークから「-list」のみを削除します。

C:\AdFind>adfind -b "dc=ExampleDC,dc=local" -f "CN=SPLA_*" member -list

CN=UserA,CN=Users,DC=ExampleDC,DC=local
CN=UserB,CN=Users,DC=ExampleDC,DC=local
CN=UserA,CN=Users,DC=ExampleDC,DC=local

優先出力には、「dn:」で始まる行があり、そのグループ内の各プロファイルの 2 番目の呼び出しからの詳細なユーザー情報が含まれています。

それがどのように機能するかについてのアイデア:

最初の呼び出しを実行します: adfind -b "dc=exampleDC,dc=local" -f "CN=SPLA_*" member

「dn:」で始まる行を保存します

詳細なユーザー情報については、残りの AdFind にパススルーします: adfind name mail -nodn

出力 (またはそれに近いもの) これは XML の方がよいでしょうか?

dn:CN=SPLA_Microsoft Office Std,OU=Security Groups,OU=MyBusiness,DC=ExampleDC,DC=local
"name","mail"
"UserA","usera@example.com"
"UserB","userb@example.com"

dn:CN=SPLA_Remote Desktop Users,OU=Security Groups,OU=MyBusiness,DC=ExampleDC,DC=local
"name","mail"
"UserA","usera@example.com"

CSVと標準出力が混在していることは知っています。このようなものも機能します:

"cn", "name", "mail"
"SPLA_Microsoft Office Std", "UserA", "usera@example.com"
"SPLA_Microsoft Office Std", "UserB", "userb@example.com"
"CN=SPLA_Remote Desktop Users", "UserA", "usera@example.com"

最終的に、この出力を MySQL データベースに入れたいと思います。

これについては現在「TYPE」コマンドを検討していますが、スクリプトの実際の経験はありません。

adfind -b "dc=exampleDC,dc=local" -f "CN=SPLA_*" member

「dn:」をtype探して、「CN=SPLA_GROUP」を変数として保存しますか? adfind user list を次の形式で送信: CN=UserA Acct,CN=Users,DC=ExampleDC,DC=local 2 番目の呼び出しのユーザー情報に "CN=SPLA_GROUP" を追加します。

編集:長い投稿で申し訳ありません。より多くの情報が得られますか?:) からこれをつかみました: http://somerandomcompany.wordpress.com/category/batch-file/ 非常に近いですが、何かが壊れていると思います...

@ECHO OFF
SETLOCAL
IF "%1" EQU "" (
ECHO.
ECHO ERROR!
ECHO Parameter required ^
ECHO.
ECHO Usage: SPLA-Export.bat ^
ECHO.
GOTO :EOF
)
REM CHANGE THIS LINE TO MATCH YOUR DOMAIN
SET BASEDN="dc=WindRiverFinancial,dc=local"
SET CMDLINE=ADFIND -b %BASEDN% -f "cn=%1*" -nodn cn
%CMDLINE% >%1-GETGROUPS.txt 2>NUL
IF EXIST %1-GETGROUPS.txt (
FIND /I "0 Objects returned" %1-GETGROUPS.txt
IF ERRORLEVEL 1 (
GOTO START_SEARCH
) ELSE (
ECHO ERROR: Could not query Active Directory for groups with %1*
GOTO END
)
) ELSE (
ECHO ERROR: Could not query Active Directory for groups with %1*
GOTO END
)

:START_SEARCH
FOR /F "usebackq tokens=1*" %%A IN (`type %1-GETGROUPS.txt ^| FIND /I ">cn:"`) DO (
SET GRP_OBJ=%%B
CALL :GET_MEMBERS %%B
)

FOR /F "tokens=1,2 delims=:" %%A in ("%TIME%") DO (
SET MYTIME=%%A:%%B
)
GOTO END

:GET_MEMBERS
SET FLT_QRY_OBJ="msExchDynamicDLFilter:"
SET FLT_DN_OBJ="msExchDynamicDLBaseDN:"

SET FLT_QRY_CMD=ADFIND -b %BASEDN% -f "cn=%GRP_OBJ%"
REM GET QUERY STRING
%FLT_QRY_CMD% > %1-ADINFO.txt 2>NUL

FOR /F "usebackq tokens=1*" %%A IN (`type %1-ADINFO.txt ^| FIND /I %FLT_QRY_OBJ%`) DO (
SET QRY_STR="%%B"
)
REM GET QUERY BASE DN
FOR /F "usebackq tokens=1*" %%A IN (`type %1-ADINFO.txt ^| FIND /I %FLT_DN_OBJ%`) DO (
SET QRY_DN="%%B"
)

ECHO Running the following query:
ECHO ------------------------------------------------
ECHO CN: %GRP_OBJ%
ECHO DN: %QRY_DN%
ECHO QS: %QRY_STR%
ECHO.
IF EXIST "%GRP_OBJ%.csv" (
DEL /Q "%GRP_OBJ%.csv"
)
ECHO Creating export file...
ADFIND -b -csv %QRY_DN% -f %QRY_STR% sn givenName mail title physicalDeliveryOfficeName employeeID -nodn >"%GRP_OBJ%.csv" 2>NUL
ECHO Done.
ECHO.
ECHO.
IF NOT EXIST "%GRP_OBJ%.csv" (
ECHO Could not create "%GRP_OBJ%.csv"
ECHO.
ECHO Press any key to continue or Ctrl-C to quit...
PAUSE >NUL 2>NUL
)
REM PAUSE
GOTO :EOF

:END
DEL /Q %1-GETGROUPS.txt >NUL 2>NUL
DEL /Q %1-BODY.TXT >NUL 2>NUL
DEL /Q %1-ADINFO.txt >NUL 2>NUL

ENDLOCAL
4

1 に答える 1