Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ###########################################################################################################################
- # This script will create an Excel file to auto document Ivanti Automation
- # It will create individual worksheets in the Excel file for:
- # *Runbooks
- # *Projects
- # *Modules
- # *Tasks
- # *Parameters
- # Usage:
- # All you need to do is export the BuildingBlock from Ivanti Automation . After the Export you can run this script against the created XML file.
- #
- # Example:
- # Invoke-IVA-Documentation -exportpath "C:\Temp" -BB "C:\Temp\runbook.xml" -excel "C:\Temp\runbook.xlsx" -CSV
- # This will turn the buildingblock xml into an Excel file and create CSV's from each worksheet.
- #
- # Example2:
- # Invoke-IVA-Documentation -exportpath "C:\Temp" -BB "C:\Temp\runbook.xml" -excel "runbook.xlsx"
- # This will do the same as the first example except without creating CSV files.
- #
- # Example3:
- # Invoke-IVA-Documentation -exportpath "C:\Temp" -BB "C:\Temp\runbook.xml" -excel "runbook.xlsx" -CSVSQL -CSVDelimiter ";" -SQLServer "DATABASE01\INSTANCE01"
- # This will do the same as the first example including importing the data in a SQL database "IVAMDOC".
- #############################################################################################################################
- function Invoke-IVA-Documentation {
- [CmdletBinding()]
- param (
- [Parameter(Mandatory = $True)]
- [string]$ExportPath,
- [string]$BB,
- [string]$Excel,
- [Parameter(Mandatory = $false)]
- [switch]$CSV,
- [switch]$CSV2SQL,
- [string]$CSVDelimiter,
- [string]$SQLServer
- )
- ### Get descriptions Ivanti Automation.
- $workingdir = $exportpath
- $Output = $Excel
- $XML = $BB
- [xml]$xml = Get-Content "$XML"
- $Excelfile = "$workingdir\$Output"
- ### Set database info for importing in SQL
- $DBName = "IVAMDOC"
- $Delimiter = $CSVDelimiter
- $SQLInstance = $SQLServer
- $RunbookCSVFile = "$workingdir\runbook.csv"
- if (Test-Path $RunbookCSVFile) { Remove-Item -Path $RunbookCSVFile }
- $RunbookJobsCSVFile = "$workingdir\runbookjobs.csv"
- if (Test-Path $RunbookJobsCSVFile) { Remove-Item -Path $RunbookJobsCSVFile }
- $ProjectCSVFile = "$workingdir\project.csv"
- if (Test-Path $ProjectCSVFile) { Remove-Item -Path $ProjectCSVFile }
- $ProjectModuleCSVFile = "$workingdir\projectmodule.csv"
- if (Test-Path $ProjectModuleCSVFile) { Remove-Item -Path $ProjectModuleCSVFile }
- $ModulesCSVFile = "$workingdir\modules.csv"
- if (Test-Path $ModulesCSVFile) { Remove-Item -Path $ModulesCSVFile }
- $TasksCSVFile = "$workingdir\tasks.csv"
- if (Test-Path $TasksCSVFile) { Remove-Item -Path $TasksCSVFile }
- $ParametersCSVFile = "$workingdir\parameters.csv"
- if (Test-Path $ParametersCSVFile) { Remove-Item -Path $ParametersCSVFile }
- if (Test-Path $Excelfile) { Remove-Item -Path $Excelfile }
- $EXmodule = Get-Module psexcel
- if (!$EXmodule) {
- Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force -scope CurrentUser
- Install-Module PSExcel -Force -Scope CurrentUser
- }
- Import-Module PSExcel -Force
- ## If CSV2SQL enabled, check whether database $DBName exists on SQL instance $SQLInstance. If so, delete the database, and create a fresh one.
- if ($CSV2SQL) {
- $DBAmodule = Get-Module dbatools
- if (!$DBAmodule) {
- Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force -scope CurrentUser
- Install-Module dbatools -Force -Scope CurrentUser
- }
- Import-Module dbatools -Force
- $ExistingDB = Find-DbaDatabase -SqlInstance . -Pattern $DBName -Exact | Select-Object -ExpandProperty Name
- if ($ExistingDB -eq $DBName) {
- Remove-DbaDatabase -SqlInstance $SQLInstance -Database $DBName -Confirm:$false
- }
- New-DbaDatabase -SqlInstance $SQLInstance -Name $DBName
- }
- ## Get information about the runbooks
- $Runbooks = $xml.AutomationManager.buildingblock.runbooks.runbook.properties
- $Runbooktable = @()
- $Runbooktotal = @()
- foreach ($Runbook in $Runbooks) {
- #DATA CSV
- $runbooktable = New-Object PSobject
- $runbooktable | Add-Member -Type NoteProperty -Name Name -Value $runbook.name
- $runbooktable | Add-Member -Type NoteProperty -Name Guid -Value $runbook.guid
- $runbooktable | Add-Member -Type NoteProperty -Name Enabled -Value $runbook.enabled
- $runbooktable | Add-Member -Type NoteProperty -Name Description -Value $runbook.description
- $runbooktable | Add-Member -Type NoteProperty -Name Projects -Value $runbook.properties.jobs.job.count
- $Runbooktotal += $Runbooktable
- }
- if ($CSV -or $CSV2SQL) {
- $Runbooktotal | Export-Csv -Append -NoTypeInformation -Delimiter ';' -Path $RunbookCSVFile
- if ($CSV2SQL) {
- Import-DbaCsv -Path $RunbookCSVFile -SqlInstance $SQLInstance -Database $DBName -Delimiter $Delimiter -AutoCreateTable
- }
- }
- $Runbooktotal | Export-XLSX -Path $Excelfile -AutoFit -Table -TableStyle Medium2 -WorksheetName "Runbooks"
- ## Get information about the jobs in the runbook(s)
- $Runbooks = $xml.AutomationManager.buildingblock.runbooks.runbook.properties
- $RunbookJobstable = @()
- $RunbookJobstotal = @()
- foreach ($Runbook in $Runbooks) {
- $order = 0
- $jobs = $Runbook.properties.jobs
- foreach ($job in $jobs) {
- $a = $jobs.job
- foreach ($i in $a) {
- $order = $order + 1
- #DATA CSV
- $runbookjobstable = New-Object PSobject
- $runbookjobstable | Add-Member -Type NoteProperty -Name RunbookGuid -Value $runbook.guid
- $runbookjobstable | Add-Member -Type NoteProperty -Name Order -Value $order
- $runbookjobstable | Add-Member -Type NoteProperty -Name Guid -Value $i.properties.what.innertext
- $runbookjobstable | Add-Member -Type NoteProperty -Name Name -Value $i.properties.name
- $runbookjobstable | Add-Member -Type NoteProperty -Name Enabled -Value $i.properties.enabled
- $runbookjobstable | Add-Member -Type NoteProperty -Name JobType -Value $i.properties.what.type
- $RunbookJobstotal += $RunbookJobstable
- }
- }
- }
- if ($CSV -or $CSV2SQL) {
- $RunbookJobstotal | Export-Csv -Append -NoTypeInformation -Delimiter ';' -Path $RunbookJobsCSVFile
- if ($CSV2SQL) {
- Import-DbaCsv -Path $RunbookJobsCSVFile -SqlInstance $SQLInstance -Database $DBName -Delimiter $Delimiter -AutoCreateTable
- }
- }
- $RunbookJobstotal | Export-XLSX -Path $Excelfile -AutoFit -Table -TableStyle Medium2 -WorksheetName "RunbookJobs"
- ## Get information about Projects, if there is any
- $Projects = $xml.AutomationManager.buildingblock.projects.project.properties
- $Projecttable = @()
- $Projecttotal = @()
- if ($Projects.count -gt 0)
- {
- foreach ($Project in $Projects) {
- #DATA CSV
- $Projecttable = New-Object PSobject
- $Projecttable | Add-Member -Type NoteProperty -Name Name -Value $Project.name
- $Projecttable | Add-Member -Type NoteProperty -Name Guid -Value $Project.guid
- $Projecttable | Add-Member -Type NoteProperty -Name Enabled -Value $Project.enabled
- $Projecttable | Add-Member -Type NoteProperty -Name Description -Value $Project.description
- $Projecttotal += $Projecttable
- }
- if ($CSV -or $CSV2SQL) {
- $Projecttotal | Export-Csv -Append -NoTypeInformation -Delimiter ';'-Path $ProjectCSVFile
- if ($CSV2SQL) {
- Import-DbaCsv -Path $ProjectCSVFile -SqlInstance $SQLInstance -Database $DBName -Delimiter $Delimiter -AutoCreateTable
- }
- }
- $Projecttotal | Export-XLSX -Path $Excelfile -AutoFit -Table -TableStyle Medium2 -WorksheetName "Projects"
- }
- ## Get information about Modules in the Project(s), if there is any Project
- $Projects = $xml.AutomationManager.buildingblock.projects.project
- $ProjectModuletable = @()
- $ProjectModuletotal = @()
- if ($Projects.count -gt 0)
- {
- foreach ($Project in $Projects) {
- $order = 0
- $modules = $Project.modules
- foreach ($module in $modules) {
- $a = $modules.module
- foreach ($i in $a) {
- $order = $order + 1
- #DATA CSV
- $ProjectModuletable = New-Object PSobject
- $ProjectModuletable | Add-Member -Type NoteProperty -Name ProjectGuid -Value $Project.properties.guid
- $ProjectModuletable | Add-Member -Type NoteProperty -Name Order -Value $order
- $ProjectModuletable | Add-Member -Type NoteProperty -Name ModuleGuid -Value $i.guid
- $ProjectModuletable | Add-Member -Type NoteProperty -Name Enabled -Value $i.enabled
- $ProjectModuletotal += $ProjectModuletable
- }
- }
- }
- if ($CSV -or $CSV2SQL) {
- $ProjectModuletotal | Export-Csv -Append -NoTypeInformation -Delimiter ';'-Path $ProjectModuleCSVFile
- if ($CSV2SQL) {
- Import-DbaCsv -Path $ProjectModuleCSVFile -SqlInstance $SQLInstance -Database $DBName -Delimiter $Delimiter -AutoCreateTable
- }
- }
- $ProjectModuletotal | Export-XLSX -Path $Excelfile -AutoFit -Table -TableStyle Medium2 -WorksheetName "ProjectModules"
- }
- ## Get information about Modules, if there is any
- $Modules = $xml.AutomationManager.buildingblock.modules.module
- $Moduletable = @()
- $Moduletotal = @()
- if ($Modules.count -gt 0)
- {
- foreach ($Module in $Modules) {
- #DATA CSV
- $Moduletable = New-Object PSobject
- $Moduletable | Add-Member -Type NoteProperty -Name Name -Value $Module.Properties.name
- $Moduletable | Add-Member -Type NoteProperty -Name Guid -Value $Module.Properties.guid
- $Moduletable | Add-Member -Type NoteProperty -Name Enabled -Value $Module.Properties.Enabled
- $Moduletable | Add-Member -Type NoteProperty -Name Description -Value $Module.properties.description
- $Moduletotal += $Moduletable
- }
- if ($CSV -or $CSV2SQL) {
- $Moduletotal | Export-Csv -Append -NoTypeInformation -Delimiter ';' -Path $ModulesCSVFile
- if ($CSV2SQL) {
- Import-DbaCsv -Path $ModulesCSVFile -SqlInstance $SQLInstance -Database $DBName -Delimiter $Delimiter -AutoCreateTable
- }
- }
- $Moduletotal | Export-XLSX -Path $Excelfile -AutoFit -Table -TableStyle Medium2 -WorksheetName "Modules"
- }
- ## Get information about Tasks in Module(s), if there is any module
- $Modules = $xml.AutomationManager.buildingblock.modules.module
- $Tasktable = @()
- $Tasktotal = @()
- if ($Modules.count -gt 0)
- {
- foreach ($Module in $Modules) {
- $order = 0
- $tasks = $module.tasks
- foreach ($task in $tasks) {
- $a = $tasks.task
- foreach ($i in $a) {
- if ($i.properties)
- {
- $order = $order + 1
- $Tasktable = New-Object PSobject
- $Tasktable | Add-Member -Type NoteProperty -Name "Part of Module" -Value $Module.Properties.name
- $Tasktable | Add-Member -Type NoteProperty -Name "Part of Module (GUID)" -Value $Module.Properties.guid
- $Tasktable | Add-Member -Type NoteProperty -Name Order -Value $order
- $Tasktable | Add-Member -Type NoteProperty -Name Type -Value $i.properties.type
- $Tasktable | Add-Member -Type NoteProperty -Name Enabled -Value $i.properties.enabled
- $Tasktable | Add-Member -Type NoteProperty -Name Description -Value $i.properties.description
- $Tasktable | Add-Member -Type NoteProperty -Name Comment -Value $i.properties.comments
- $Tasktable | Add-Member -Type NoteProperty -Name Details -Value $i.settings.OuterXml
- $Tasktotal += $Tasktable
- }
- }
- }
- }
- if ($CSV -or $CSV2SQL) {
- $Tasktotal | Export-Csv -Append -NoTypeInformation -Delimiter ';' -Path $TasksCSVFile
- if ($CSV2SQL) {
- Import-DbaCsv -Path $TasksCSVFile -SqlInstance $SQLInstance -Database $DBName -Delimiter $Delimiter -AutoCreateTable
- }
- }
- $Tasktotal | Export-XLSX -Path $Excelfile -AutoFit -Table -TableStyle Medium2 -WorksheetName "Tasks"
- }
- ## Get information about Runbook Parameters
- $Parameters = $xml.AutomationManager.buildingblock.runbooks.runbook.properties.properties.parameters.param
- $Parametertable = @()
- $Parametertotal = @()
- if ($Parameters.count -gt 0)
- {
- foreach ($Parameter in $Parameters) {
- #DATA CSV
- $Parametertable = New-Object PSobject
- $Parametertable | Add-Member -Type NoteProperty -Name Name -Value $Parameter.name
- $Parametertable | Add-Member -Type NoteProperty -Name Value1 -Value $Parameter.Value1
- $Parametertable | Add-Member -Type NoteProperty -Name Value2 -Value $Parameter.Value2
- $Parametertable | Add-Member -Type NoteProperty -Name Value3 -Value $Parameter.Value3
- $Parametertable | Add-Member -Type NoteProperty -Name Description -Value $Parameter.description
- $Parametertotal += $Parametertable
- }
- if ($CSV -or $CSV2SQL) {
- $Parametertotal | Export-Csv -Append -NoTypeInformation -Delimiter ';' -Path $ParametersCSVFile
- if ($CSV2SQL) {
- Import-DbaCsv -Path $ParametersCSVFile -SqlInstance $SQLInstance -Database $DBName -Delimiter $Delimiter -AutoCreateTable
- }
- }
- $Parametertotal | Export-XLSX -Path $Excelfile -AutoFit -Table -TableStyle Medium2 -WorksheetName "Parameters"
- }
- }
- Invoke-IVA-Documentation -ExportPath "<PATH WHERE THE OUTPUT WILL BE SAVED>" -BB "<FULL PATH TO BUILDINGBLOCK.XML>" -Excel "<OUTPUTNAME.XLSX>" -CSV
Advertisement
Add Comment
Please, Sign In to add comment