Read a post today from Joe Thompson regarding this subject. Really liked the idea with bulk import of Management Packs. The scenario is like this: You have a folder or several folders with a bunch of Management Packs and you want to install only those that is currently not installed.
I hope Mr Thompson does not mind me changing his Powershell script and "improving" it slightly if you ask me :-)
What changed you ask? Well I am a bit particular about Powershell scripts and like to use [cmdletbinding()] since that gives med the option to use the Write-Verbose cmdlet and use logging when I want it by adding the –Verbose parameter to my scripts/functions.
Secondly Operations Manager has the cmdlet Get-SCOMManagementPack which has a parameter called ManagementPackFile. This makes it possible to “load” the Management Pack in a variable and access all the properties like it was installed, thus we can use the Management Pack GUID to check against the installed Management Packs in Operations Manager. Makes it a little more robust and proper if you ask me.
Thirdly I like to use parameter validation and this gave me a opportunity to use a special one:
[ValidateScript({Test-Path $_ -PathType 'Container'})]
By decorating the parameter with this entry, you will receive a nice warning if you assigned a non-excising path as a parameter to the script file. Look ma, no If-statement.
Mr Thompson also mentioned a DSC resource he is working on. Would be kind of cool to do a "ENSURE" on a Management Pack. Looking forward to reading more about that later.
In a future post I might expand this a little to check for version match and using the powershell Management Pack download tool (finding MP).
Cheers
I hope Mr Thompson does not mind me changing his Powershell script and "improving" it slightly if you ask me :-)
[cmdletbinding()]
Param
(
[ValidateScript({Test-Path $_ -PathType 'Container'})]
[string] $ManagementPacksPath
)
Write-Verbose "Creating an array of file names from the path $ManagementPacksPath"
$MPfiles = (Get-Item -Path "$ManagementPacksPath\*" -Include *.mp*).Name
[int]$CountMatching = 0
$InstallList = @()
foreach($MP in $MPfiles)
{
Write-Verbose "Getting MP properties using SCOM cmdlet and the parameter 'ManagementPackFile'"
$MPproperties = Get-SCOMManagementPack -ManagementPackFile "$ManagementPacksPath\$MP"
$CountMatching = 1
Write-Verbose "Checking if Management Pack is installed"
$CountMatching = (Get-SCOMManagementPack -id $MPproperties.id.guid | Measure-Object).Count
Write-Verbose "Get-SCOMManagementPack returned $CountMatching MPs with id $($MPproperties.id.guid)"
if ($CountMatching -eq 0)
{
Write-Verbose "Adding $MP to the install list"
$InstallList += $MP
}
}
if($InstallList.count -gt 0)
{
Write-Verbose "Installing Management Packs in folder $ManagementPacksPath"
Import-SCOMManagementPack -Fullname $InstallList -ErrorAction SilentlyContinue
}
else
{
Write-Verbose "InstallList is empty, all Management Packs in folder $ManagementPacksPath is installed"
}
|
What changed you ask? Well I am a bit particular about Powershell scripts and like to use [cmdletbinding()] since that gives med the option to use the Write-Verbose cmdlet and use logging when I want it by adding the –Verbose parameter to my scripts/functions.
Secondly Operations Manager has the cmdlet Get-SCOMManagementPack which has a parameter called ManagementPackFile. This makes it possible to “load” the Management Pack in a variable and access all the properties like it was installed, thus we can use the Management Pack GUID to check against the installed Management Packs in Operations Manager. Makes it a little more robust and proper if you ask me.
Thirdly I like to use parameter validation and this gave me a opportunity to use a special one:
[ValidateScript({Test-Path $_ -PathType 'Container'})]
By decorating the parameter with this entry, you will receive a nice warning if you assigned a non-excising path as a parameter to the script file. Look ma, no If-statement.
Mr Thompson also mentioned a DSC resource he is working on. Would be kind of cool to do a "ENSURE" on a Management Pack. Looking forward to reading more about that later.
In a future post I might expand this a little to check for version match and using the powershell Management Pack download tool (finding MP).
Cheers
Tore, great improvements to the script, don't mind at all! I have also started a community DSC Resource collection for System Center. This enhanced script would definitely be an improvement if added to the MP Bulk Import DSC Resource I've already written... https://github.com/PowerShellOrg/DSC/tree/master/Resources/cSystemCenterManagement
ReplyDeleteJoe
Thank you for sharing this information. I find this information is easy to understand and very useful. Thumbs up!
ReplyDeleteMelbourne App Developer
(10 URL)