Author Posts

February 9, 2016 at 6:18 am

Hi,

I've written this script to look at an application passed to the function, find the CIID number from the classname 'SMS_Application', pass it to the classname SMS_AppDependenceRelation to find the CIID's assigned to the application, then pass back to 'SMS_Application' to obtain the application dependent names.

Please with the way i approached this and overall happy with the script itself.

Any areas i could improve on ? The feedback is helpful for my learning.



function get-application_dependencies { 

    [CmdletBinding()] 
    param (  
    [parameter(ValueFromPipeline=$true,     
	    ValueFromPipelineByPropertyName=$true)]   
    [string]$Application
    )

Begin {

#Set arguments to find CIID from CIM
$Arguements = @{
    Namespace = "root\SMS\site_AAC"
    ClassName = "SMS_Application"
    }
}

Process {

#Get CCID number from 'SMS_Application' classname for specified application to pass to "SMS_AppDependenceRelation" classname
[int]$CIID = Get-CimInstance @Arguements |
    where { $PSItem.LocalizedDisplayName -eq $Application } |
        Sort-Object CIVersion | Select  -ExpandProperty CI_ID -last 1 #If the application has more than one revison this will use the last and active one

#Pass CCID number to query SMS_AppDependenceRelation to find Application Dependencies. Create Custom Objects to use in foreach block
$list =  [pscustomobject](Get-CimInstance -Namespace root\SMS\site_AAC -ClassName SMS_AppDependenceRelation).where{($PSItem.FromApplicationCIID -eq $CIID)}

#All CI_IDs that is collated from 'FromApplicationCCID' pass through foreach block to get application name of the dependencies
foreach ($l in $list.ToApplicationCIID) {
    Get-CimInstance -Namespace root\SMS\site_AAC -ClassName SMS_Application |
        where {$PSItem.CI_ID -eq $l} | 
            #Results
            select @{name="Application Dependencies for $Application";expression={$PSItem.LocalizedDisplayName}}
            }
}

End {
    #Will display results  
}

}#End of Function