bppllist powershell parse
- 8 years ago
yes i did look there, but it was not going to work out from there. This was for an audit automation for our internal auditors. I thought you guys might like to see what that script looked like:
## BPPLIST AUDIT INFO
#Functions -- Only need to update the client list for audits
#region Functions
add-type -assembly "system.io.compression.filesystem"
Function Get-UnixDate ($UnixDate) {[timezone]::CurrentTimeZone.ToLocalTime(([datetime]'1/1/1970').AddSeconds($UnixDate))}
#endregion#Vars
#region Vars
$PSEmailServer="smtp.west.com"
$admincmd="C:\Program Files\Veritas\NetBackup\bin\admincmd"
$masters=("linux6160", "linux6164" ,"linux6168", "acw00006", "acw00007", "acw00008")
$auditlist=("NACODENA084", "den06vufinapp01", "den06vumissql01", "IBM505", "OMA11CFSTS02", "OMA00VCCFSCTX10", "Linux2225", "oma00vcwpepdb01", "Oma00cactdb03")
$bppllistOut = @()
$date = (get-date).tostring("yyyyMMdd")
$outputdir = "E:\data\scripts\output\Audits\tmp"
$auditfile = "E:\data\scripts\output\Audits\$date.auditors.data.zip"
$sqlcmdfile = "E:\data\Scripts\sql\Audit-JobFailures.sql"
#endregion#dbisqlc vars
#region dbisqlc
$LD_LIBRARY_PATH="C:\Program Files\Symantec\OpsCenter\server\lib"
$machinename='wcw31340'
$DBACCESSSERVER='opscenter_wcw31340'
$INSTALLATIONDIR="C:\Program Files\Symantec\OpsCenter\server"
$EXECDBACCESS="C:\Program Files\Symantec\OpsCenter\server\db\WIN64\"
$DBACCESSPORT=13786
$DBACCESSUSER='DBA'
$DBACCESSPWD='SQL'
$DBACCESSNAME='vxpmdb'
#endregion
#HASH Lookup Tables
#region HASH's
$YesNoHash = @{"0" = "Yes"; "1" = "No"}
$NoYesHash = @{"0" = "No"; "1" = "Yes"}
$MachineTypeHash = @{"0" = "No virtual machine"; "1" = "VMware"; "2" = "Hyper-V"; "3" = "VxVI"}
$PolicyTypeHash = @{"0" = "Standard"; "1" = "Proxy"; "4" = "Oracle"; "6" = "Informix-On-BAR"; "7" = "Sybase";
"8" = "MS-SharePoint portal server"; "11" = "DataTools-SQL-BackTrack"; "13" = "MS-Windows"; "15" = "MS-SQL-Server";
"16" = "MS-Exchange-Server"; "17" = "SAP"; "18" = "DB2"; "19" = "NDMP"; "20" = "FlashBackup"; "21" = "Splitmirror";
"25" = "Lotus Notes"; "29" = "FlashBackup-Windows"; "35" = "NBU-Catalog"; "36" = "Generic"; "38" = "PureDisk export";
"39" = "Enterprise_Vault"; "40" = "VMware"; "41" = "Hyper-V"}
$ScheduleTypeHash = @{"0" = "Full schedule"; "1" = "Differential incremental schedule"; "2" = "Cumulative incremental schedule";
"3" = "User backup schedule"; "4" = "User archive schedule"}
#endregion## BPPLLIST Data Gather
#$bppllist holds the final data
#region BPPLLIST#Gather Info
Foreach ($master in $masters) {
$policylist = & "$admincmd\bppllist" -M $master
#Define hash for retention on master
$bpretlevelHash = @{}
$bpretlevelcmd = & "$admincmd\bpretlevel" -l -M $master
foreach ($level in $bpretlevelcmd){
$level = $level.ToString()
$Level = $level -split(" ")
$RetLevel = $level[0]
$RetLevlSec = $level[1]
$RetperiodNum = $level[2]
$RetPeriodLabel = $level[3]
$Retperiod = "$RetperiodNum $Retperiodlabel"
#Add to hash Array
$bpretlevelHash.$RetLevel = $retPeriod
#Collect POlicy Info
Foreach ($policy in $policylist){
$grab = & "$admincmd\bppllist" $policy -M $master
#Class Fields
$class= $grab| sls "CLASS ".ToString()
$class = $class -split(" ")
$ClassPolicyName=$class[1]
#INFO Fields
$info = $grab|sls "INFO ".ToString()
$info = $info -split(" ")
$infoPolicyType = $info[1]
$infoPolicyActive = $info[11]
$infoLifeCyleInuse = $info[30]
$infoMachineTYpe = $info[33]
#RES Fields
$res = $grab|sls "RES ".ToString()
$res = $res -split(" ")
$resStorageUnit = $res[1]
#Client Fields
$client = $grab |sls "CLIENT "
$clients = @()
foreach ($line in $client){
$line.ToString()
$line = $line -split(" ")
$ClientName = $line[1]
$ClientBit = $line[2]
$clientOS = $line[3]
#Populate Array
$Properties = @{Name=$ClientName; Bit=$ClientBit; OS=$ClientOS}
$Newobject = New-Object PSObject -Property $Properties
$clients += $Newobject
}
#INCLUDE Fields
$include = $grab|sls "INCLUDE ".ToString()
$include = $include -split(" ")
$IncludeSelection = $include[1]#SCHED and SCHEDWIN Combined
#Grab feild data
$sched = $grab|sls "SCHED "
$schedwin = $grab|sls "SCHEDWIN "
#Build Combo Arrry
$SCHEDALL = @()
$total = $sched.count
$i = 0
while ($i -ne $total) {
$newline = $sched[$i].ToString(), $schedwin[$i].ToString() -join ' '
$SCHEDALL += $newline
$i = $i+1
}
$SCHEDS =@()
Foreach ($line in $SCHEDALL) {
$line = $line -split(" ")
$SChedName = $line[1]
$schedType = $line[2]
$schedFreqSec = $line[4]
$SchedRetetionLevel = $line[5] # See the -rl retention_level option description for a complete list of default values and their retention levels
$schedStorgeLifeCycleUsed = $line[17]
$SChedwinSunStart = $line[21] #Start value is the number of seconds past midnight
$schedwinSUnDur = $line[22] # Duration is the number of seconds past start. $SChedwinMonStart = $line[23] #Start value is the number of seconds past midnight
$schedwinMonDur = $line[24] # Duration is the number of seconds past start. $SChedwinTueStart = $line[25] #Start value is the number of seconds past midnight
$schedwinTueDur = $line[26] # Duration is the number of seconds past start. $SChedwinWedStart = $line[27] #Start value is the number of seconds past midnight
$schedwinWedDur = $line[28] # Duration is the number of seconds past start. $SChedwinThuStart = $line[29] #Start value is the number of seconds past midnight
$schedwinTHuDur = $line[30] # Duration is the number of seconds past start. $SChedwinFriStart = $line[31] #Start value is the number of seconds past midnight
$schedwinFriDur = $line[32] # Duration is the number of seconds past start. $SChedwinSatStart = $line[33] #Start value is the number of seconds past midnight
$schedwinSatDur = $line[34] # Duration is the number of seconds past start.
#Populate Array
$Properties = @{Name=$SchedName; Type=$SchedType; FreqSec=$SchedFreqSec; RetentionLevel=$SchedRetetionLevel;
LifeCycle=$schedStorgeLifeCycleUsed; SunStart=$SchedwinSunStart; SunDur=$SchedWinSunDur;
MonStart=$SchedwinMonStart; MonDur=$SchedWinMonDur; TueStart=$SchedwinTueStart; TueDur=$SchedWinTueDur;
WedStart=$SchedwinWedStart; WedDur=$SchedWinWedDur; ThuStart=$SchedwinThuStart; ThuDur=$SchedWinThuDur;
FriStart=$SchedwinFriStart; FriDur=$SchedWinFriDur; SatStart=$SchedwinSatStart; SatDur=$SchedWinSatDur}
$Newobject = New-Object PSObject -Property $Properties
$SCHEDS += $Newobject
}
#Create Final Array
$clients | Foreach {
# Write-Host "Starting Processing for Client $_.Name"
$clientName = $_.Name
$clientBit = $_.bit
$ClientOS = $_.OS$SCHEDS | Foreach {
$schedName = $_.Name
$schedType = $_.Type
$schedFreqDays = $_.FreqSec ; $schedFreqDays = [timespan]::FromSeconds($schedFreqDays); $schedFreqDays = $schedFreqDays.Days
$schedFreqHours = $_.FreqSec ; $schedFreqHours = [timespan]::FromSeconds($schedFreqHours); $schedFreqHours = $schedFreqHours.Hours
$schedRetentionLevel = $_.RetentionLevel
$schedStorageLifeCycleused = $_.LifeCycle
$SChedwinSunStart = $_.SunStart ; $SChedwinSunStart = [timespan]::FromSeconds($SChedwinSunStart); $SChedwinSunStart = ("{0:hh\:mm\:ss}" -f $SChedwinSunStart)
$schedwinSUnDur = $_.SunDur ; $schedwinSUnDur = [timespan]::FromSeconds($schedwinSUnDur); $schedwinSunDur =$schedwinSunDur.hours
$SChedwinMonStart = $_.MonStart ; $SChedwinMonStart = [timespan]::FromSeconds($SChedwinMonStart); $SChedwinMonStart = ("{0:hh\:mm\:ss}" -f $SChedwinMonStart)
$schedwinMonDur = $_.MonDur ; $schedwinMonDur = [timespan]::FromSeconds($schedwinMonDur); $schedwinMonDur = $schedwinMonDur.hours
$SChedwinTueStart = $_.TueStart ; $SChedwinTueStart = [timespan]::FromSeconds($SChedwinTueStart); $SChedwinTueStart = ("{0:hh\:mm\:ss}" -f $SChedwinTueStart)
$schedwinTueDur = $_.TueDur ; $schedwinTueDur = [timespan]::FromSeconds($schedwinTueDur); $schedwinTueDur = $schedwinTueDur.hours
$SChedwinWedStart = $_.WedStart ; $SChedwinWedStart = [timespan]::FromSeconds($SChedwinWedStart); $SChedwinWedStart = ("{0:hh\:mm\:ss}" -f $SChedwinWedStart)
$schedwinWedDur = $_.WedDur ; $schedwinWedDur = [timespan]::FromSeconds($schedwinWedDur); $schedwinWedDur = $schedwinWedDur.hours
$SChedwinThuStart = $_.ThuStart ; $SChedwinThuStart = [timespan]::FromSeconds($SChedwinThuStart); $SChedwinThuStart = ("{0:hh\:mm\:ss}" -f $SChedwinThuStart)
$schedwinTHuDur = $_.ThuDur ; $schedwinThuDur = [timespan]::FromSeconds($schedwinThuDur); $schedwinThuDur = $schedwinThuDur.hours
$SChedwinFriStart = $_.FriStart ; $SChedwinFriStart = [timespan]::FromSeconds($SChedwinFriStart); $SChedwinFriStart = ("{0:hh\:mm\:ss}" -f $SChedwinFriStart)
$schedwinFriDur = $_.FriDur ; $schedwinFriDur = [timespan]::FromSeconds($schedwinFriDur); $schedwinFriDur = $schedwinFriDur.hours
$SChedwinSatStart = $_.SatStart ; $SChedwinSatStart = [timespan]::FromSeconds($SChedwinSatStart); $SChedwinSatStart = ("{0:hh\:mm\:ss}" -f $SChedwinSatStart)
$schedwinSatDur = $_.SatDur ; $schedwinSatDur = [timespan]::FromSeconds($schedwinSatDur); $schedwinSatDur = $schedwinSatDur.hours
#write-host "Start Processing for Client $ClientName on sched $schedname"
#Populate Array
$Properties = @{PolicyName=$ClassPolicyName; PolicyType=$PolicyTypeHash.$infoPolicyType; PolicyActive=$YesNoHash."$infoPolicyActive" ;
LifeCycleInUse=$NoYesHash.$infoLifeCyleInuse; MachineType=$MachineTypeHash.$infoMachineTYpe; StorageUnit=$resStorageUnit;
IncudedSelection=$IncludeSelection; ClientName =$clientName; ClientBit=$clientBit; ClientOS=$ClientOS;
SchedName=$schedName; SchedType=$ScheduleTypeHash.$schedType; SchedFreqDays=$schedFreqDays; SchedFreqHours=$schedFreqHours;
SchedRetLevel=$bpretlevelHash.$schedRetentionLevel; SchedStorageLifecyleUsed=$NoYesHash.$schedStorageLifeCycleused; SunStart=$SChedwinSunStart;
SunDur = $schedwinSUnDur; MonStart=$SChedwinMonStart; MonDur=$schedwinMonDur; TueStart=$SChedwinTueStart; TueDur=$schedwinTueDur;
WedStart=$SChedwinWedStart; WedDur=$schedwinWedDur; ThuStart=$SChedwinThuStart; ThuDur=$schedwinThuDur; FriStart=$SChedwinFriStart; FriDur=$schedwinFriDur;
SatStart=$SChedwinSatStart; SatDur=$schedwinSatDur }
$Newobject = New-Object PSObject -Property $Properties
$bppllistout += $Newobject
}
}
}
}
}
#endregion
#BPIMAGELIST Data Gather
#$bpimages holds the final data
#region BPIMAGELIST
#Collect Last backup for each node$bpimagelist = @()
foreach ($master in $masters){
Foreach ($client in $auditlist){
#Collect last backup Info for each Client
$collection = & "$admincmd\bpimagelist" -l -M $master -client $client | Select-Object -first 1
If ($collection -notlike '*no entity was found*'){$bpimagelist += $collection}
}
}# Finished Collecting image info
$bpimages = @()
Foreach ($image in $bpimagelist){
$image = $image.tostring()
$image = $image -split(" ")
$bpimageClient = $image[1]
$bpimageDate = $image[13]
$bpimageDate = Get-UnixDate $bpimageDate|Get-Date –f "yyyy-MM-dd HH:mm:ss"
#Populate Array with data
$Properties = @{Client=$bpimageClient; "Last Backup"=$BpimageDate}
$Newobject = New-Object PSObject -Property $Properties
$bpimages += $Newobject
}
#endregion
#dbisqlc Job Failure Gather #region dbisqlc Job Failure Gather
$sqlcmd = "Select ClientName, policyname, schedulename, adjust_timestamp(domain_JobArchive.startTime,-18000000 ) as StartTime, statuscode from domain_jobArchive Where statuscode
not in (1, 0, 150) AND policytype != '-1' AND ClientName in ('$($auditlist -join "','")'); output to $outputdir\JobFailureData.csv; go"
$sqlcmd |Out-File -Encoding ascii -FilePath $sqlcmdfile# Executing Job Failure Query
& "$execdbaccess\dbisqlc" -q -c "ENG=$DBACCESSSERVER;DBN=$DBACCESSNAME;LINKS=all;UID=$DBACCESSUSER;PWD=$DBACCESSPWD" $sqlcmdfile |Out-Null
(Get-Content "$outputdir\JobFailureData.csv") | ForEach-Object { $_ -replace "'" } > "$outputdir\JobFailureData.csv"
$dbisqlcJobFailure = Import-Csv "$outputdir\JobFailureData.csv" -Header "ClientName", "PolicyName", "ScheduleName", "StartTime", "StatusCode"#endregion ## Copy script file for auditors and Clean tmp dir
#region Script Copy
remove-item "$outputdir\*"
If(Test-path "E:\data\output\Audits\$date.Auditscript.zip") {Remove-item $auditfile}
cp E:\data\scripts\bppllist-audits.ps1 $outputdir#endregion
##Reports for Auditor: #region Reports
#Bppllist report
$bppllistOut|Where-Object {$_.clientname -in $auditlist}|select-object -Property PolicyName, Clientname, StorageUnit, IncudedSelection, SchedName, SchedType, SchedFreqDays, SchedFreqHours ,
SchedRetLevel, SunStart, SunDur, MonStart, MonDur, TueStart, TueDur, WedStart, WedDur, ThuStart, ThuDur,
FriStart, FriDur, SatStart, SatDur |export-csv -Path $outputdir\PolicyAudit.$data.csv -NoTypeInformation#BPIMAGE Report
$bpimages |export-csv -path $outputdir\LastSucessfullBackup.$date.csv -NoTypeInformation#Report for Failed Jobs
$dbisqlcJobFailure |sort Clientname|group policyname| foreach { $_ |Select-Object -ExpandProperty group |Select-Object -first 1}|export-csv -Path $outputdir\JobFailure.$date.csv -noTypeInformation
#endregion
##Prepare Auditor file
#region AuditorFile
[io.compression.zipfile]::CreateFromDirectory("$outputdir" , "$auditfile") Send-MailMessage -to tosomeone@somewhere.com -from host@somwhere.com -Subject "Audit Report for NBU" -Attachments $auditfile -body "Attached you will find the reports needed for auiditors. The StorageUnit column will indicate if there is replication. If there is thre will be an _ar_ in the name. The name will indicate source_ar_destination." #endregi