Text AdFind批处理脚本,处理文本后通过第一次调用的输出

Text AdFind批处理脚本,处理文本后通过第一次调用的输出,text,batch-file,replace,active-directory,Text,Batch File,Replace,Active Directory,尝试使用调用AdFind的批处理脚本开始: 此操作的目的是用于SPLA报告,首选输出列出从SPLA开始的任何安全组的用户信息 我已经找到了AdFind所需的命令,但是我不能用一行命令获得我的首选输出 以下是我正在使用的命令: 与首选输出最接近的命令,仅缺少DN as标头: C:\AdFind>adfind -b "dc=exampleDC,dc=local" -f "CN=SPLA_*" member -list | adfind name mail -nodn -csv "name",

尝试使用调用AdFind的批处理脚本开始:

此操作的目的是用于SPLA报告,首选输出列出从SPLA开始的任何安全组的用户信息

我已经找到了AdFind所需的命令,但是我不能用一行命令获得我的首选输出

以下是我正在使用的命令:

与首选输出最接近的命令,仅缺少DN as标头:

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"
删除成员后的所有内容不包括第二次呼叫中的userinfo:

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
-列表删除以“dn:”开头的行 在第二次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:”开头,包含该组中每个配置文件的第二次调用的详细用户信息

关于如何工作的想法:

运行第一个呼叫: adfind-b“dc=exampleDC,dc=local”-f“CN=SPLA_*”成员

以“dn:”开头保存行:

将剩余信息传递给AdFind以获取详细的用户信息: adfind名称邮件-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:”并将“CN=SPLA\u GROUP”另存为变量?
发送adfind用户列表,格式为:
CN=UserA Acct,CN=Users,DC=ExampleDC,DC=local
以某种方式将“CN=SPLA\u GROUP”附加到第二次呼叫的用户信息中

编辑:抱歉发了这么长的帖子。更多信息比更少更好?:) 摘自: 非常接近,但认为有东西坏了

@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

我相信oneliner并不能解决这个问题,但如果您有更多的行要花费,这可能会有所帮助:

@echo off
adfind "CN=SPLA_*" distinguishedname -list > d:\lista.txt
for /f "delims=: tokens=1" %%i in (d:\lista.txt) do (
echo dn:%%i
adfind -f "distinguishedname=%%i" member -list | adfind name mail -csv -nocsvheader
)
如果adfind不能直接帮助您,您可以使用现有的脚本工具进行创作

例如,如果您想要具有以下详细信息的csv文件:

"group1 dn";"username1";"mail1"
"group1 dn";"username2";"mail2"
"group2 dn";"username1";"mail1"
那么下面的代码可能就是答案:

@echo off
adfind -f "CN=SPLA_*" distinguishedname -list > d:\lista.txt
for /f "delims=: tokens=1" %%i in (d:\lista.txt) do (
adfind -f "distinguishedname=%%i" member -list | for /f "delims=; tokens=1,2" %%j in ('adfind samaccountname mail -nodn -csv -nocsvheader -csvdelim ";"') do @echo "dn:%%i";%%j;%%k
)
使用powershell,即使使用adfind从Active Directory中提取数据,解析输出的可能性也会有所不同