Sep 15 2016 01:06 PM
This is the second part of the post. Go here to get the first part:
@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