Get a List of All Yammer Group Administrators Part 2

Regular Contributor

This is the second part of the post.  Go here to get the first part:

 

https://techcommunity.microsoft.com/t5/Yammer/Get-a-List-of-All-Yammer-Group-Administrators-Part-1/m...

 

@echo off
REM This batch file will take items in Groups.csv in the current directory and create a workbook
REM containing the first 50 users of each group, including all group admins, as well as other group data.
REM  Requires write permission to the current directory.
REM ==================================
REM © Tom Kretzmer May 2016.
REM Version 1.0 (First complete)
REM Flow - Build scripts, call in.vbs to get token, run GetAdmins.ps1 to get raw xml per group.  Per each file use SetFormattingEach.vbs to reformat from Yammer-based XML to something we can use.  
REM Use ConCatBuild.vbs and replacetext.vbs to build concatenating batch file, then run that file.  Use NoArrow.vbs and SetFormattingLast.vbs to make the full file legible to XML reader.
REM Just to be nice, run NormalizeText.ps1 at the end so that it looks pretty in Notepad.  Then, open in Excel (if installed in Office15 directory)
set CurrentDirectory=%cd%
if not exist %CurrentDirectory%\Groups.csv echo This script will not run without Groups.csv in the same directory as this file.
if not exist %CurrentDirectory%\Groups.csv pause
if not exist %CurrentDirectory%\Groups.csv goto End
echo Building environment...
if not exist %CurrentDirectory%\GetGroupAdmins md %CurrentDirectory%\GetGroupAdmins
if not exist %CurrentDirectory%\GetGroupAdmins\Output md %CurrentDirectory%\GetGroupAdmins\Output
copy /y %CurrentDirectory%\Groups.csv %CurrentDirectory%\GetGroupAdmins\
cd %CurrentDirectory%\GetGroupAdmins
REM
call :BuildScripts
REM
cscript //nologo %CurrentDirectory%\GetGroupAdmins\in.vbs
powershell .\GetAdmins.ps1
dir %CurrentDirectory%\GetGroupAdmins\Output\. /b > %CurrentDirectory%\GetGroupAdmins\Files.txt
FOR /F "delims=~" %%i IN (%CurrentDirectory%\GetGroupAdmins\Files.txt) DO call :FormatXML %%i
copy /y  %CurrentDirectory%\GetGroupAdmins\Files.txt  %CurrentDirectory%\GetGroupAdmins\Outputs.bat
cscript //nologo %CurrentDirectory%\GetGroupAdmins\ConCatBuild.vbs
REM This bit is buggy but it works
cscript //nologo %CurrentDirectory%\GetGroupAdmins\ConCatBuild.vbs
cscript //nologo %CurrentDirectory%\GetGroupAdmins\replacetext.vbs %CurrentDirectory%\GetGroupAdmins\Outputs.bat "copy copy" "copy"
REM End buggy bit
cd %CurrentDirectory%\GetGroupAdmins\Output
call ..\Outputs.bat
cd %CurrentDirectory%\GetGroupAdmins
cscript //nologo %CurrentDirectory%\GetGroupAdmins\NoArrow.vbs %CurrentDirectory%\GetGroupAdmins\Output\AllGroups.xml
cscript //nologo %CurrentDirectory%\GetGroupAdmins\SetFormattingLast.vbs %CurrentDirectory%\GetGroupAdmins\Output\AllGroups.xml
powershell .\NormalizeText.ps1
echo We'll try to open the file, but this won't work if Excel is loaded to a different directory.
"C:\Program Files (x86)\Microsoft Office\Office15\EXCEL.EXE" %CurrentDirectory%\GetGroupAdmins\Output\AllGroups.xml
pause
REM ================
REM Don't run subroutines at end of batch
REM ================
goto End
REM =====================================
REM =====================================
:BuildScripts
echo.
echo.
echo Building Main PowerShell Script...
echo.
echo  $token = "~~Token~~" >%CurrentDirectory%\GetGroupAdmins\GetAdmins.ps1
echo. >>%CurrentDirectory%\GetGroupAdmins\GetAdmins.ps1
echo  $Headers = @{ >>%CurrentDirectory%\GetGroupAdmins\GetAdmins.ps1
echo  "Accept" = "*/*" >>%CurrentDirectory%\GetGroupAdmins\GetAdmins.ps1
echo  "Authorization" = "Bearer "+$token >>%CurrentDirectory%\GetGroupAdmins\GetAdmins.ps1
echo  "accept-encoding" = "gzip" >>%CurrentDirectory%\GetGroupAdmins\GetAdmins.ps1
echo  "content-type"="application/json" >>%CurrentDirectory%\GetGroupAdmins\GetAdmins.ps1
echo  "content-length" = "2" >>%CurrentDirectory%\GetGroupAdmins\GetAdmins.ps1
echo  } >>%CurrentDirectory%\GetGroupAdmins\GetAdmins.ps1
echo. >>%CurrentDirectory%\GetGroupAdmins\GetAdmins.ps1
echo #import Group ID's that need evaluated. >>%CurrentDirectory%\GetGroupAdmins\GetAdmins.ps1
echo  $groups = import-csv %CurrentDirectory%\GetGroupAdmins\Groups.csv >>%CurrentDirectory%\GetGroupAdmins\GetAdmins.ps1
echo  $groups = $groups.id >>%CurrentDirectory%\GetGroupAdmins\GetAdmins.ps1
echo. >>%CurrentDirectory%\GetGroupAdmins\GetAdmins.ps1
echo #loop through all Group ID's >>%CurrentDirectory%\GetGroupAdmins\GetAdmins.ps1
echo  foreach ($group in $groups){ >>%CurrentDirectory%\GetGroupAdmins\GetAdmins.ps1
echo. >>%CurrentDirectory%\GetGroupAdmins\GetAdmins.ps1
echo  $uri = "https://www.yammer.com/api/v1/groups/$group/members.xml" >>%CurrentDirectory%\GetGroupAdmins\GetAdmins.ps1
echo. >>%CurrentDirectory%\GetGroupAdmins\GetAdmins.ps1
echo  $ExportedFile = "%CurrentDirectory%\GetGroupAdmins\Output\$group.xml" >>%CurrentDirectory%\GetGroupAdmins\GetAdmins.ps1
echo. >>%CurrentDirectory%\GetGroupAdmins\GetAdmins.ps1
echo Write-Host $uri >>%CurrentDirectory%\GetGroupAdmins\GetAdmins.ps1
echo. >>%CurrentDirectory%\GetGroupAdmins\GetAdmins.ps1
echo (Invoke-WebRequest -Uri $uri -Method Get -Headers $Headers -passthru -outfile $ExportedFile).content  >>%CurrentDirectory%\GetGroupAdmins\GetAdmins.ps1
echo. >>%CurrentDirectory%\GetGroupAdmins\GetAdmins.ps1
echo  } >>%CurrentDirectory%\GetGroupAdmins\GetAdmins.ps1
echo Done.
echo.
echo.
echo Building Set format per file script...
echo Const ForReading = 1 >%CurrentDirectory%\GetGroupAdmins\SetFormattingEach.vbs
echo Const ForWriting = 2 >>%CurrentDirectory%\GetGroupAdmins\SetFormattingEach.vbs
echo. >>%CurrentDirectory%\GetGroupAdmins\SetFormattingEach.vbs
echo strFileName = Wscript.Arguments(0) >>%CurrentDirectory%\GetGroupAdmins\SetFormattingEach.vbs
echo strXMLHeader = "<?xml version=" ^& Chr(34) ^& "1.0" ^& Chr (34) ^& " encoding=" ^& Chr(34) ^& "UTF-8" ^& Chr(34) ^& "?>" >>%CurrentDirectory%\GetGroupAdmins\SetFormattingEach.vbs
echo. >>%CurrentDirectory%\GetGroupAdmins\SetFormattingEach.vbs
echo strHeaderText = "<GroupAdminsGroupTag>" >>%CurrentDirectory%\GetGroupAdmins\SetFormattingEach.vbs
echo strHash = "<hash>" >>%CurrentDirectory%\GetGroupAdmins\SetFormattingEach.vbs
echo strBlankText = "" >>%CurrentDirectory%\GetGroupAdmins\SetFormattingEach.vbs
echo strXMLFooter = "</hash>" >>%CurrentDirectory%\GetGroupAdmins\SetFormattingEach.vbs
echo strFooterText = "</GroupAdminsGroupTag>" >>%CurrentDirectory%\GetGroupAdmins\SetFormattingEach.vbs
echo. >>%CurrentDirectory%\GetGroupAdmins\SetFormattingEach.vbs
echo Set objFSO = CreateObject("Scripting.FileSystemObject") >>%CurrentDirectory%\GetGroupAdmins\SetFormattingEach.vbs
echo Set objFile = objFSO.OpenTextFile(strFileName, ForReading) >>%CurrentDirectory%\GetGroupAdmins\SetFormattingEach.vbs
echo. >>%CurrentDirectory%\GetGroupAdmins\SetFormattingEach.vbs
echo strText = objFile.ReadAll >>%CurrentDirectory%\GetGroupAdmins\SetFormattingEach.vbs
echo objFile.Close >>%CurrentDirectory%\GetGroupAdmins\SetFormattingEach.vbs
echo strHeaderText = Replace(strText,strXMLHeader, strHeaderText) >>%CurrentDirectory%\GetGroupAdmins\SetFormattingEach.vbs
echo strNoHash = Replace(strHeaderText,strHash, strBlankText) >>%CurrentDirectory%\GetGroupAdmins\SetFormattingEach.vbs
echo strNewText = Replace(strNoHash,strXMLFooter, strFooterText) >>%CurrentDirectory%\GetGroupAdmins\SetFormattingEach.vbs
echo. >>%CurrentDirectory%\GetGroupAdmins\SetFormattingEach.vbs
echo Set objFile = objFSO.OpenTextFile(strFileName, ForWriting) >>%CurrentDirectory%\GetGroupAdmins\SetFormattingEach.vbs
echo objFile.WriteLine strNewText >>%CurrentDirectory%\GetGroupAdmins\SetFormattingEach.vbs
echo objFile.Close >>%CurrentDirectory%\GetGroupAdmins\SetFormattingEach.vbs
echo Done
echo.
echo.
echo Building Input script...
echo.
echo Dim Input >%CurrentDirectory%\GetGroupAdmins\in.vbs
echo. >>%CurrentDirectory%\GetGroupAdmins\in.vbs
echo Const ForReading = 1 >>%CurrentDirectory%\GetGroupAdmins\in.vbs
echo Const ForWriting = 2 >>%CurrentDirectory%\GetGroupAdmins\in.vbs
echo. >>%CurrentDirectory%\GetGroupAdmins\in.vbs
echo strFileName = "%CurrentDirectory%\GetGroupAdmins\GetAdmins.ps1" >>%CurrentDirectory%\GetGroupAdmins\in.vbs
echo strOldText = "~~Token~~" >>%CurrentDirectory%\GetGroupAdmins\in.vbs
echo. >>%CurrentDirectory%\GetGroupAdmins\in.vbs
echo Set objFSO = CreateObject("Scripting.FileSystemObject") >>%CurrentDirectory%\GetGroupAdmins\in.vbs
echo Set objFile = objFSO.OpenTextFile(strFileName, ForReading) >>%CurrentDirectory%\GetGroupAdmins\in.vbs
echo. >>%CurrentDirectory%\GetGroupAdmins\in.vbs
echo strInput = InputBox("Enter Your Token Here", "Token")  >>%CurrentDirectory%\GetGroupAdmins\in.vbs
echo MsgBox ("You entered: " ^& strInput) >>%CurrentDirectory%\GetGroupAdmins\in.vbs
echo. >>%CurrentDirectory%\GetGroupAdmins\in.vbs
echo strNewText = strInput >>%CurrentDirectory%\GetGroupAdmins\in.vbs
echo. >>%CurrentDirectory%\GetGroupAdmins\in.vbs
echo strText = objFile.ReadAll >>%CurrentDirectory%\GetGroupAdmins\in.vbs
echo objFile.Close >>%CurrentDirectory%\GetGroupAdmins\in.vbs
echo strNewText = Replace(strText, strOldText, strNewText) >>%CurrentDirectory%\GetGroupAdmins\in.vbs
echo. >>%CurrentDirectory%\GetGroupAdmins\in.vbs
echo Set objFile = objFSO.OpenTextFile(strFileName, ForWriting) >>%CurrentDirectory%\GetGroupAdmins\in.vbs
echo objFile.WriteLine strNewText >>%CurrentDirectory%\GetGroupAdmins\in.vbs
echo objFile.Close >>%CurrentDirectory%\GetGroupAdmins\in.vbs
echo. >>%CurrentDirectory%\GetGroupAdmins\in.vbs
echo. >>%CurrentDirectory%\GetGroupAdmins\in.vbs
echo. >>%CurrentDirectory%\GetGroupAdmins\in.vbs
echo Done
echo.
echo.
echo Building Text Replacement script...
echo.
echo Const ForReading = 1 >%CurrentDirectory%\GetGroupAdmins\replacetext.vbs
echo Const ForWriting = 2 >>%CurrentDirectory%\GetGroupAdmins\replacetext.vbs
echo. >>%CurrentDirectory%\GetGroupAdmins\replacetext.vbs
echo strFileName = Wscript.Arguments(0) >>%CurrentDirectory%\GetGroupAdmins\replacetext.vbs
echo strOldText = Wscript.Arguments(1) >>%CurrentDirectory%\GetGroupAdmins\replacetext.vbs
echo strNewText = Wscript.Arguments(2) >>%CurrentDirectory%\GetGroupAdmins\replacetext.vbs
echo. >>%CurrentDirectory%\GetGroupAdmins\replacetext.vbs
echo Set objFSO = CreateObject("Scripting.FileSystemObject") >>%CurrentDirectory%\GetGroupAdmins\replacetext.vbs
echo Set objFile = objFSO.OpenTextFile(strFileName, ForReading) >>%CurrentDirectory%\GetGroupAdmins\replacetext.vbs
echo. >>%CurrentDirectory%\GetGroupAdmins\replacetext.vbs
echo strText = objFile.ReadAll >>%CurrentDirectory%\GetGroupAdmins\replacetext.vbs
echo objFile.Close >>%CurrentDirectory%\GetGroupAdmins\replacetext.vbs
echo strNewText = Replace(strText, strOldText, strNewText) >>%CurrentDirectory%\GetGroupAdmins\replacetext.vbs
echo. >>%CurrentDirectory%\GetGroupAdmins\replacetext.vbs
echo Set objFile = objFSO.OpenTextFile(strFileName, ForWriting) >>%CurrentDirectory%\GetGroupAdmins\replacetext.vbs
echo objFile.WriteLine strNewText >>%CurrentDirectory%\GetGroupAdmins\replacetext.vbs
echo objFile.Close >>%CurrentDirectory%\GetGroupAdmins\replacetext.vbs
echo Done.
echo.
echo.
echo Building Concatonation script...
echo.
echo Const ForReading = 1 >%CurrentDirectory%\GetGroupAdmins\ConCatBuild.vbs
echo Const ForWriting = 2 >>%CurrentDirectory%\GetGroupAdmins\ConCatBuild.vbs
echo. >>%CurrentDirectory%\GetGroupAdmins\ConCatBuild.vbs
echo strFileName = "%CurrentDirectory%\GetGroupAdmins\Outputs.bat" >>%CurrentDirectory%\GetGroupAdmins\ConCatBuild.vbs
echo strOldText = ".xml" ^& vbcrlf >>%CurrentDirectory%\GetGroupAdmins\ConCatBuild.vbs
echo strNewText = ".xml + "  >>%CurrentDirectory%\GetGroupAdmins\ConCatBuild.vbs
echo. >>%CurrentDirectory%\GetGroupAdmins\ConCatBuild.vbs
echo Set objFSO = CreateObject("Scripting.FileSystemObject") >>%CurrentDirectory%\GetGroupAdmins\ConCatBuild.vbs
echo Set objFile = objFSO.OpenTextFile(strFileName, ForReading) >>%CurrentDirectory%\GetGroupAdmins\ConCatBuild.vbs
echo. >>%CurrentDirectory%\GetGroupAdmins\ConCatBuild.vbs
echo strText = objFile.ReadAll >>%CurrentDirectory%\GetGroupAdmins\ConCatBuild.vbs
echo objFile.Close >>%CurrentDirectory%\GetGroupAdmins\ConCatBuild.vbs
echo. >>%CurrentDirectory%\GetGroupAdmins\ConCatBuild.vbs
echo strText = "copy " ^& strText >>%CurrentDirectory%\GetGroupAdmins\ConCatBuild.vbs
echo strFirstPassText = Replace(strText, strOldText, strNewText) >>%CurrentDirectory%\GetGroupAdmins\ConCatBuild.vbs
echo. >>%CurrentDirectory%\GetGroupAdmins\ConCatBuild.vbs
echo strSecondOldText = "+ " ^& vbcrlf >>%CurrentDirectory%\GetGroupAdmins\ConCatBuild.vbs
echo strSecondNewText = "AllGroups.xml"  >>%CurrentDirectory%\GetGroupAdmins\ConCatBuild.vbs
echo. >>%CurrentDirectory%\GetGroupAdmins\ConCatBuild.vbs
echo strSecondPassText = Replace(strFirstPassText, strSecondOldText, strSecondNewText) >>%CurrentDirectory%\GetGroupAdmins\ConCatBuild.vbs
echo. >>%CurrentDirectory%\GetGroupAdmins\ConCatBuild.vbs
echo Set objFile = objFSO.OpenTextFile(strFileName, ForWriting) >>%CurrentDirectory%\GetGroupAdmins\ConCatBuild.vbs
echo objFile.WriteLine strSecondPassText >>%CurrentDirectory%\GetGroupAdmins\ConCatBuild.vbs
echo objFile.Close >>%CurrentDirectory%\GetGroupAdmins\ConCatBuild.vbs
echo Done.
echo.
echo.
echo Building Arrow deletion script...
echo.
echo Const ForReading = 1 >%CurrentDirectory%\GetGroupAdmins\NoArrow.vbs
echo Const ForWriting = 2 >>%CurrentDirectory%\GetGroupAdmins\NoArrow.vbs
echo. >>%CurrentDirectory%\GetGroupAdmins\NoArrow.vbs
echo strFileName = Wscript.Arguments(0) >>%CurrentDirectory%\GetGroupAdmins\NoArrow.vbs
echo strBlankText = "" >>%CurrentDirectory%\GetGroupAdmins\NoArrow.vbs
echo. >>%CurrentDirectory%\GetGroupAdmins\NoArrow.vbs
echo Set objFSO = CreateObject("Scripting.FileSystemObject") >>%CurrentDirectory%\GetGroupAdmins\NoArrow.vbs
echo Set objFile = objFSO.OpenTextFile(strFileName, ForReading) >>%CurrentDirectory%\GetGroupAdmins\NoArrow.vbs
echo. >>%CurrentDirectory%\GetGroupAdmins\NoArrow.vbs
echo strText = objFile.ReadAll >>%CurrentDirectory%\GetGroupAdmins\NoArrow.vbs
echo objFile.Close >>%CurrentDirectory%\GetGroupAdmins\NoArrow.vbs
echo strNewText = Replace(strText, Chr(26), strBlankText) >>%CurrentDirectory%\GetGroupAdmins\NoArrow.vbs
echo. >>%CurrentDirectory%\GetGroupAdmins\NoArrow.vbs
echo Set objFile = objFSO.OpenTextFile(strFileName, ForWriting) >>%CurrentDirectory%\GetGroupAdmins\NoArrow.vbs
echo objFile.WriteLine strNewText >>%CurrentDirectory%\GetGroupAdmins\NoArrow.vbs
echo objFile.Close >>%CurrentDirectory%\GetGroupAdmins\NoArrow.vbs
echo Done.
echo.
echo.
echo Building Overall final file formatting
echo Const ForReading = 1 >%CurrentDirectory%\GetGroupAdmins\SetFormattingLast.vbs
echo Const ForWriting = 2 >>%CurrentDirectory%\GetGroupAdmins\SetFormattingLast.vbs
echo. >>%CurrentDirectory%\GetGroupAdmins\SetFormattingLast.vbs
echo strFileName = Wscript.Arguments(0) >>%CurrentDirectory%\GetGroupAdmins\SetFormattingLast.vbs
echo strXMLHeader = "<?xml version=" ^& Chr(34) ^& "1.0" ^& Chr (34) ^& " encoding=" ^& Chr(34) ^& "UTF-8" ^& Chr(34) ^& "?>" >>%CurrentDirectory%\GetGroupAdmins\SetFormattingLast.vbs
echo. >>%CurrentDirectory%\GetGroupAdmins\SetFormattingLast.vbs
echo strHash = "<hash>" >>%CurrentDirectory%\GetGroupAdmins\SetFormattingLast.vbs
echo strXMLFooter = "</hash>" >>%CurrentDirectory%\GetGroupAdmins\SetFormattingLast.vbs
echo. >>%CurrentDirectory%\GetGroupAdmins\SetFormattingLast.vbs
echo Set objFSO = CreateObject("Scripting.FileSystemObject") >>%CurrentDirectory%\GetGroupAdmins\SetFormattingLast.vbs
echo Set objFile = objFSO.OpenTextFile(strFileName, ForReading) >>%CurrentDirectory%\GetGroupAdmins\SetFormattingLast.vbs
echo. >>%CurrentDirectory%\GetGroupAdmins\SetFormattingLast.vbs
echo strText = objFile.ReadAll >>%CurrentDirectory%\GetGroupAdmins\SetFormattingLast.vbs
echo objFile.Close >>%CurrentDirectory%\GetGroupAdmins\SetFormattingLast.vbs
echo strNewText = strXMLHeader ^& strHash ^& strText ^& strXMLFooter >>%CurrentDirectory%\GetGroupAdmins\SetFormattingLast.vbs
echo. >>%CurrentDirectory%\GetGroupAdmins\SetFormattingLast.vbs
echo Set objFile = objFSO.OpenTextFile(strFileName, ForWriting) >>%CurrentDirectory%\GetGroupAdmins\SetFormattingLast.vbs
echo objFile.WriteLine strNewText >>%CurrentDirectory%\GetGroupAdmins\SetFormattingLast.vbs
echo objFile.Close >>%CurrentDirectory%\GetGroupAdmins\SetFormattingLast.vbs
echo Done.
echo.
echo.
echo Building the Last make pretty PowerShell script.
echo (Get-Content "%CurrentDirectory%\GetGroupAdmins\Output\AllGroups.xml") ^| > %CurrentDirectory%\GetGroupAdmins\NormalizeText.ps1
echo Set-Content "%CurrentDirectory%\GetGroupAdmins\Output\AllGroups.xml" >> %CurrentDirectory%\GetGroupAdmins\NormalizeText.ps1
echo Done.
echo.
echo.
goto End
REM =====================================
REM =====================================
:FormatXML
set FileName=%1
REM copy /y %CurrentDirectory%\GetGroupAdmins\Output\%FileName% %CurrentDirectory%\GetGroupAdmins\Output\Formatted%FileName%
cscript //nologo %CurrentDirectory%\GetGroupAdmins\SetFormattingEach.vbs %CurrentDirectory%\GetGroupAdmins\Output\%FileName%
set FileName=
goto End
REM =====================================
REM =====================================
:End
0 Replies