Skip to content

Instantly share code, notes, and snippets.

Created January 17, 2013 20:46
Show Gist options
  • Save anonymous/4559621 to your computer and use it in GitHub Desktop.
Save anonymous/4559621 to your computer and use it in GitHub Desktop.
#requires -version 2.0
# handy global variables
$GLOBAL:SMADLL = ([appdomain]::CurrentDomain.getassemblies()|?{$_.location -match "System.Management.Automation.dll"}).location
# $GLOBAL:SMDIR = (Get-ItemProperty 'hklm:/software/microsoft/System Center/2010/Service Manager/Setup').InstallDirectory
# $GLOBAL:SMSDKDIR = "${SMDIR}\SDK Binaries"
# $GLOBAL:SMDLL = "${SMSDKDIR}/Microsoft.EnterpriseManagement.Core.dll"
$GLOBAL:EMGTYPE = "Microsoft.EnterpriseManagement.EnterpriseManagementGroup"
$GLOBAL:DATAGENDIR = "$psScriptRoot\DataGen"
<#
.SYNOPSIS
Load an assembly into the current process space
.DESCRIPTION
Provides a quick way of loading an assembly into the current process.
.PARAMETER Dll
The assemply to load. This can be either a file name or full path
.EXAMPLE
Import-Assembly "C:\Program Files\Microsoft System Center\Service Manager 2010\SDK Binaries\Microsoft.EnterpriseManagement.Core.dll"
.OUTPUTS
No output
#>
function import-Assembly
{
[CmdletBinding(SupportsShouldProcess=$true)]
param (
[parameter(Mandatory=$true,Position=0)]$dll ,
[switch]$partial
)
end
{
$dllpath = (resolve-path $dll).path
if ( $partial )
{
[reflection.assembly]::LoadWithPartialName($dll)
}
else
{
[reflection.assembly]::LoadFile($dllpath)
}
}
}
# load the Service Manager Core assembly
set-alias -scope global load import-assembly
# load $SMDLL | out-null
<#
.SYNOPSIS
Create a new EnterpriseManagementGroup object
.DESCRIPTION
This cmdlet creates a connection to a Service Manager 2010 Data Access
Service and returns the resultant EnterpriseManagementGroup object
.PARAMETER ComputerName
The ComputerName to use when creating a connection to the
Service Manager 2010 Data Access Service
.EXAMPLE
$emg = new-ManagementGroup
.OUTPUTS
a Microsoft.EnterpriseManagement.EnterpriseManagementGroup object
#>
function New-ManagementGroup
{
[CmdletBinding(SupportsShouldProcess=$true)]
param (
[parameter(Position=0)][String]$ComputerName = "us-dc-scsm-01"
)
end
{
if($PSCmdlet.ShouldProcess($ComputerName))
{
new-object $EMGTYPE $ComputerName
}
}
}
set-alias -scope global new-mg New-ManagementGroup
<#
.SYNOPSIS
Retrieve Service Manager 2010 class which have a specified property
.DESCRIPTION
This cmdlet retrieves classes which have a property that equals the name
provided by the parameter 'name'
.PARAMETER Name
The parameter name to retrieve from any class
in the Service Manager 2010 system
.EXAMPLE
get-property Domain
retrieves ManagementPackClasses which contain the property name 'Domain'
.OUTPUTS
A ManagementPackClass object which includes a property name that
equals the name provided
#>
function get-SCSMproperty
{
[CmdletBinding()]
param (
[parameter(Position=0)][string] $name = ".*"
)
end
{
get-scsmclass|?{$_.getproperties()|?{$_.name -eq $name}}
}
}
function Get-SCSMClassProperty
{
[CmdletBinding()]
param ( [string]$classname )
$class = get-scsmclass $classname
if ( $class -is [array] )
{
$class |%{$_.name}| write-host -for red
Throw "Too many classes, try again"
}
if ( ! $class )
{
throw "$classname not found, try again"
}
$EMOT = "Microsoft.EnterpriseManagement.Common.CreatableEnterpriseManagementObject"
try
{
if ( $Class.Abstract )
{
$Class.GetProperties()
}
else
{
$emo = new-object $EMOT $class.ManagementGroup,$class
$emo.getproperties()
}
}
catch
{
throw $error[0]
}
}
set-alias get-property get-property
function get-SCSMCommand
{
[CmdletBinding()]
param ( )
end
{
get-command -module SMLets | sort-object CommandType,Noun
}
}
# now add the PSScriptRoot to the path, this will ensure that any scripts
# in the module directory are accessible
$env:path += ";$psscriptroot;$psscriptroot\Scripts"
set-alias -scope global Export-SCSMManagementPack Export-SCManagementPack
set-alias -scope global Get-SCSMManagementPack Get-SCManagementPack
set-alias -scope global Get-SCSMManagementPackElement Get-SCManagementPackElement
set-alias -scope global Import-SCSMManagementPack Import-SCManagementPack
set-alias -scope global New-SCSMManagementPack New-SCManagementPack
set-alias -scope global Remove-SCSMManagementPack Remove-SCManagementPack
$SMLetsTypesFile = join-path $PSScriptRoot SMLets.Types.ps1xml
update-typedata $SMLetsTypesFile -ErrorAction SilentlyContinue
$SMLetsFormatFile = join-path $PSScriptRoot SMLets.Format.ps1xml
update-formatdata $SMLetsFormatFile -ErrorAction SilentlyContinue
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment