Blog
By Daniele Muscetta on 6/21/2009 6:17:02 AM • Rank (2252) • Views 2538
0

0

Pete Zerger posted here a one-liner to dump all overrides to a CSV file, and finished with "[...] In the future I'll look further into the potential of connecting overrides to their associated rules / monitors for inclusion in the output[...]".


Here is a script which I wrote last year which does this already, so I thought I'd ease him the following bit of research :-)

 

 

---Save the following text as script "Export-Overrides.ps1"

#define the path you want to export the CSV files to
$exportpath = "c:\export\"

#gets all UNSEALED MAnagement PAcks
$mps = get-managementpack | where {$_.Sealed -eq $false}

#loops thru them
foreach ($mp in $mps)
{
    $mpname = $mp.name
    Write-Host "Exporting Overrides info for Managemetn Pack: $mpname"
   
    #array to hold all overrides for this MP
    $MPRows = @()

    #Gets the actual override objects
    $overrides = $mp | get-override

    #loops thru those overrides in order to extract information from them
    foreach ($override in $overrides)
    {

        #Prepares an object to hold the result
        $obj = new-object System.Management.Automation.PSObject
       
        #clear up variables from previous cycles.
        $overrideName = $null
        $overrideProperty = $null
        $overrideValue = $null
        $overrideContext = $null
        $overrideContextInstance = $null
        $overrideRuleMonitor = $null

        # give proper values to variables for this cycle. this is what we can then output.
        $overrideName = $override.Name
        $overrideProperty = $override.Property
        $overrideValue = $override.Value
        trap { $overrideContext = ""; continue } $overrideContext = $override.Context.GetElement().DisplayName
        trap { $overrideContextInstance = ""; continue } $overrideContextInstance = (Get-MonitoringObject -Id $override.ContextInstance).DisplayName
           
        if ($override.Monitor -ne $null){
            $overrideRuleMonitor = $override.Monitor.GetElement().DisplayName
        } elseif ($override.Discovery -ne $null){
            $overrideRuleMonitor = $override.Discovery.GetElement().DisplayName
        } else {
            $overrideRuleMonitor = $override.Rule.GetElement().DisplayName
        }
       
        #fills the current object with those properties
        $obj = $obj | add-member -membertype NoteProperty -name overrideName -value $overrideName -passthru
        $obj = $obj | add-member -membertype NoteProperty -name overrideProperty -value $overrideProperty -passthru
        $obj = $obj | add-member -membertype NoteProperty -name overrideValue -value $overrideValue -passthru
        $obj = $obj | add-member -membertype NoteProperty -name overrideContext -value $overrideContext -passthru
        $obj = $obj | add-member -membertype NoteProperty -name overrideContextInstance -value $overrideContextInstance -passthru
        $obj = $obj | add-member -membertype NoteProperty -name overrideRuleMonitor -value $overrideRuleMonitor -passthru


        #adds this current override to the array
        $MPRows = $MPRows + $obj
    }

    #exports to CSV
    $filename = $exportpath + $mp.name + ".csv"
    $MPRows | Export-Csv $filename
}
 

 

 

 

 

 

Map Location


GPS Latitude: 0.00000 Longitude: 0.00000
Comments (3) - Comment RSS
Newbie2SCOM wrote: on Jun 08, 2011 01:07 PM
Am trying to run the script above but am getting error...

>c:\scripts\Export-Overrides.ps1
Get-ManagementPack : The 'Path' parameter is empty or the required provider location is not set."
At C:\scripts\Export-Overrides.ps1:5 char:26
+ $mps = get-managementPack <<<< | where {$_.Name -like "*"}
Exporting Overrides info for Management Pack:
Get-Override : Cannot bind argument to parameter 'ManagementPack' because it is null.
At C:\scripts\Export-Overrides.ps1:17 char:36
+ $overrides = $mp | get-Override <<<<

Any thoughts?

Thank you.
DIkkuh wrote: on Aug 02, 2011 08:18 AM
I have the same error anyone know a fix for this ?
Daniele Muscetta wrote: on Aug 17, 2011 05:32 PM
You simply need to be running the script from the Monitoring: drive, without changing directory to c:\scripts - as the Monitoring: drive is used by the Get-ManagenentPack cmdlet.


Who Viewed
Who Reviewed
Categories
Related Pages
Shortened URL
http://tinyurl.com/ybrnubg

Top Contributors
Featured Members
Pete Zerger
Points: 65622
Level: System Center Expert
Tommy Gunn
Points: 42748
Level: System Center Expert
Simon Skinner
Points: 40804
Level: System Center Expert
Stefan Koell
Points: 28999
Level: System Center Expert
Andreas Zuckerhut
Points: 27734
Level: System Center Expert