none
Recherche des dépendances des applications avec powershell RRS feed

  • Question

  • bonjour a tous

    est ce que quelqu’un peux m'aider svp sur une commande powershell.

    j'ai pu avancer sur un scripte avec mes petit moyen, qui affiche tous les applications qui ne sont pas déployer:

    Get-CMApplication | WHERE isdeployed -eq $false|select LocalizedDisplayName

    mais je ne sais pas est ce que les applications déployer dépende des application qui ne sont pas déployer avec powershell.


    Merci vraiment de votre aide

    vendredi 17 février 2017 18:05

Réponses

  • Bonjour,

    La notion de dépendance n'est pas lié au fait qu'une application soit déployée ou non.
    Mais plutôt, si dans un type de déploiement une dépendance a été spécifié.
    Pour le coup ça m’intéressait également de connaitre cette notion de dépendance pour les lister.

    J'ai fait deux fonctions Powershell basé sur des requêtes WMI plutôt que les cmlets lié a SCCM.
    Incluant la notion de révision pour un peu plus de précision.

    La première fonction permet de connaitre les dépendances d'une application.
    En utilisant le paramètre "RelationShip" tu affichera les applications qui dépendent de l'application passé en paramètre.

    Exemple :

    Get-ApplicationDependencies -SiteServer 'MonServer.Domain.tld' -SiteCode 'X01' -Application 'JRE 8.0.110'
    Get-ApplicationDependencies -SiteServer 'MonServer.Domain.tld' -SiteCode 'X01' -Application 'JRE 8.0.110' -RelationShip

    La seconde fonction liste toutes les applications qui ont des dépendances.
    Get-AllApplicationsDependencies -SiteServer 'MonServer.Domain.tld' -SiteCode 'X01'


    Les fonctions :

    Function Get-ApplicationDependencies {
        [CmdletBinding()] 
        Param (  
    		[parameter(Mandatory=$True)]
    		[String]$Application,
    		[Parameter(Mandatory=$True)]
    		[String]$SiteServer,
    		[Parameter(Mandatory=$True)]
    		[String]$SiteCode,
    		[Switch]$RelationShip
        )
    	
    	Process {
    	
    		Try {
    	
    			$Result = New-Object System.Collections.ArrayList
    	
    			If ($RelationShip) {
    				$AllCIID = Get-WmiObject -ComputerName $SiteServer -Namespace Root/SMS/Site_$($SiteCode) -Query "Select CI_ID,CIVersion,LocalizedDisplayName From SMS_Application Where LocalizedDisplayName='$($Application)'"
    				Foreach ($CIID in $AllCIID) {
    					$List = Get-WmiObject -ComputerName $SiteServer -Namespace Root/SMS/Site_$($SiteCode) -Query "Select FromApplicationCIID From SMS_AppDependenceRelation Where ToApplicationCIID='$($CIID.CI_ID)'"
    					foreach ($l in $List.FromApplicationCIID) {
    						If ($l) {
    							
    							$TmpAPP = $(Get-WmiObject -Namespace Root/SMS/Site_$($SiteCode) -Query "Select LocalizedDisplayName,CIVersion From SMS_Application Where CI_ID='$($l)'")
    							$TmpObj = New-Object -TypeName 'PSObject'	
    							$TmpObj | Add-Member -MemberType 'NoteProperty' -Name 'Name' -Value $($CIID.LocalizedDisplayName)
    							$TmpObj | Add-Member -MemberType 'NoteProperty' -Name 'Revision' -Value $($CIID.CIVersion)
    							$TmpObj | Add-Member -MemberType 'NoteProperty' -Name 'Dependencie Name' -Value $($TmpApp.LocalizedDisplayName)
    							$TmpObj | Add-Member -MemberType 'NoteProperty' -Name 'Dependencie Revision' -Value $($TmpApp.CIVersion)
    							
    							$Result.Add($TmpObj) | Out-Null
    							
    						}
    					}
    				}
    				
    			}
    			Else {
    				$AllCIID = Get-WmiObject -ComputerName $SiteServer -Namespace Root/SMS/Site_$($SiteCode) -Query "Select CI_ID,CIVersion,LocalizedDisplayName From SMS_Application Where LocalizedDisplayName='$($Application)'"
    				Foreach ($CIID in $AllCIID) {
    					$List = Get-WmiObject -ComputerName $SiteServer -Namespace Root/SMS/Site_$($SiteCode) -Query "Select ToApplicationCIID From SMS_AppDependenceRelation Where FromApplicationCIID='$($CIID.CI_ID)'"
    					foreach ($l in $List.ToApplicationCIID) {
    						If ($l) {
    							
    							$TmpAPP = $(Get-WmiObject -Namespace Root/SMS/Site_$($SiteCode) -Query "Select LocalizedDisplayName,CIVersion From SMS_Application Where CI_ID='$($l)'")
    							$TmpObj = New-Object -TypeName 'PSObject'	
    							$TmpObj | Add-Member -MemberType 'NoteProperty' -Name 'Name' -Value $($CIID.LocalizedDisplayName)
    							$TmpObj | Add-Member -MemberType 'NoteProperty' -Name 'Revision' -Value $($CIID.CIVersion)
    							$TmpObj | Add-Member -MemberType 'NoteProperty' -Name 'Dependent Application' -Value $($TmpApp.LocalizedDisplayName)
    							$TmpObj | Add-Member -MemberType 'NoteProperty' -Name 'Dependent Revision' -Value $($TmpApp.CIVersion)
    							
    							$Result.Add($TmpObj) | Out-Null
    							
    						}
    					}
    				}
    				
    			}
    			
    			Return $Result
    			
    		} Catch {
    		
    			Throw $_.Exception.ErrorRecord
    			
    		}
    	
    	}
    	
    }
    
    Function Get-AllApplicationsDependencies {
        [CmdletBinding()] 
        Param (  
    		[Parameter(Mandatory=$True)]
    		[String]$SiteServer,
    		[Parameter(Mandatory=$True)]
    		[String]$SiteCode
        )
    	
    	Process {
    	
    		Try {
    
    			$Result = New-Object System.Collections.ArrayList
    	
    			$DependenciesList = Get-WmiObject -ComputerName $SiteServer -Namespace Root/SMS/Site_$($SiteCode) -Class SMS_AppDependenceRelation
    			
    			If ($DependenciesList) {
    			
    				Foreach ($Dependencie in $DependenciesList) {
    
    					$App = $(Get-WmiObject -Namespace Root/SMS/Site_$($SiteCode) -Query "Select CIVersion,LocalizedDisplayName From SMS_Application Where CI_ID='$($Dependencie.FromApplicationCIID)'")
    					$Dependencies = $(Get-WmiObject -Namespace Root/SMS/Site_$($SiteCode) -Query "Select CIVersion,LocalizedDisplayName from SMS_Application Where CI_ID='$($Dependencie.ToApplicationCIID)'")
    				
    					$TmpObj = New-Object -TypeName 'PSobject'
    					$TmpObj | Add-Member -MemberType 'NoteProperty' -Name 'Name' -Value $($App.LocalizedDisplayName)
    					$TmpObj | Add-Member -MemberType 'NoteProperty' -Name 'Revision' -Value $($App.CIVersion)
    					$TmpObj | Add-Member -MemberType 'NoteProperty' -Name 'Dependencie Name' -Value $($Dependencies.LocalizedDisplayName)
    					$TmpObj | Add-Member -MemberType 'NoteProperty' -Name 'Dependencie Revision' -Value $($Dependencies.CIVersion)
    					
    					$Result.Add($TmpObj) | Out-Null
    
    				}
    				
    			}
    
    			Return $Result
    			
    		} Catch {
    		
    			Throw $_.Exception.ErrorRecord
    			
    		}
    	
    	}
    	
    }

    Cordialement

    samedi 18 février 2017 19:50

Toutes les réponses

  • Bonjour,

    La notion de dépendance n'est pas lié au fait qu'une application soit déployée ou non.
    Mais plutôt, si dans un type de déploiement une dépendance a été spécifié.
    Pour le coup ça m’intéressait également de connaitre cette notion de dépendance pour les lister.

    J'ai fait deux fonctions Powershell basé sur des requêtes WMI plutôt que les cmlets lié a SCCM.
    Incluant la notion de révision pour un peu plus de précision.

    La première fonction permet de connaitre les dépendances d'une application.
    En utilisant le paramètre "RelationShip" tu affichera les applications qui dépendent de l'application passé en paramètre.

    Exemple :

    Get-ApplicationDependencies -SiteServer 'MonServer.Domain.tld' -SiteCode 'X01' -Application 'JRE 8.0.110'
    Get-ApplicationDependencies -SiteServer 'MonServer.Domain.tld' -SiteCode 'X01' -Application 'JRE 8.0.110' -RelationShip

    La seconde fonction liste toutes les applications qui ont des dépendances.
    Get-AllApplicationsDependencies -SiteServer 'MonServer.Domain.tld' -SiteCode 'X01'


    Les fonctions :

    Function Get-ApplicationDependencies {
        [CmdletBinding()] 
        Param (  
    		[parameter(Mandatory=$True)]
    		[String]$Application,
    		[Parameter(Mandatory=$True)]
    		[String]$SiteServer,
    		[Parameter(Mandatory=$True)]
    		[String]$SiteCode,
    		[Switch]$RelationShip
        )
    	
    	Process {
    	
    		Try {
    	
    			$Result = New-Object System.Collections.ArrayList
    	
    			If ($RelationShip) {
    				$AllCIID = Get-WmiObject -ComputerName $SiteServer -Namespace Root/SMS/Site_$($SiteCode) -Query "Select CI_ID,CIVersion,LocalizedDisplayName From SMS_Application Where LocalizedDisplayName='$($Application)'"
    				Foreach ($CIID in $AllCIID) {
    					$List = Get-WmiObject -ComputerName $SiteServer -Namespace Root/SMS/Site_$($SiteCode) -Query "Select FromApplicationCIID From SMS_AppDependenceRelation Where ToApplicationCIID='$($CIID.CI_ID)'"
    					foreach ($l in $List.FromApplicationCIID) {
    						If ($l) {
    							
    							$TmpAPP = $(Get-WmiObject -Namespace Root/SMS/Site_$($SiteCode) -Query "Select LocalizedDisplayName,CIVersion From SMS_Application Where CI_ID='$($l)'")
    							$TmpObj = New-Object -TypeName 'PSObject'	
    							$TmpObj | Add-Member -MemberType 'NoteProperty' -Name 'Name' -Value $($CIID.LocalizedDisplayName)
    							$TmpObj | Add-Member -MemberType 'NoteProperty' -Name 'Revision' -Value $($CIID.CIVersion)
    							$TmpObj | Add-Member -MemberType 'NoteProperty' -Name 'Dependencie Name' -Value $($TmpApp.LocalizedDisplayName)
    							$TmpObj | Add-Member -MemberType 'NoteProperty' -Name 'Dependencie Revision' -Value $($TmpApp.CIVersion)
    							
    							$Result.Add($TmpObj) | Out-Null
    							
    						}
    					}
    				}
    				
    			}
    			Else {
    				$AllCIID = Get-WmiObject -ComputerName $SiteServer -Namespace Root/SMS/Site_$($SiteCode) -Query "Select CI_ID,CIVersion,LocalizedDisplayName From SMS_Application Where LocalizedDisplayName='$($Application)'"
    				Foreach ($CIID in $AllCIID) {
    					$List = Get-WmiObject -ComputerName $SiteServer -Namespace Root/SMS/Site_$($SiteCode) -Query "Select ToApplicationCIID From SMS_AppDependenceRelation Where FromApplicationCIID='$($CIID.CI_ID)'"
    					foreach ($l in $List.ToApplicationCIID) {
    						If ($l) {
    							
    							$TmpAPP = $(Get-WmiObject -Namespace Root/SMS/Site_$($SiteCode) -Query "Select LocalizedDisplayName,CIVersion From SMS_Application Where CI_ID='$($l)'")
    							$TmpObj = New-Object -TypeName 'PSObject'	
    							$TmpObj | Add-Member -MemberType 'NoteProperty' -Name 'Name' -Value $($CIID.LocalizedDisplayName)
    							$TmpObj | Add-Member -MemberType 'NoteProperty' -Name 'Revision' -Value $($CIID.CIVersion)
    							$TmpObj | Add-Member -MemberType 'NoteProperty' -Name 'Dependent Application' -Value $($TmpApp.LocalizedDisplayName)
    							$TmpObj | Add-Member -MemberType 'NoteProperty' -Name 'Dependent Revision' -Value $($TmpApp.CIVersion)
    							
    							$Result.Add($TmpObj) | Out-Null
    							
    						}
    					}
    				}
    				
    			}
    			
    			Return $Result
    			
    		} Catch {
    		
    			Throw $_.Exception.ErrorRecord
    			
    		}
    	
    	}
    	
    }
    
    Function Get-AllApplicationsDependencies {
        [CmdletBinding()] 
        Param (  
    		[Parameter(Mandatory=$True)]
    		[String]$SiteServer,
    		[Parameter(Mandatory=$True)]
    		[String]$SiteCode
        )
    	
    	Process {
    	
    		Try {
    
    			$Result = New-Object System.Collections.ArrayList
    	
    			$DependenciesList = Get-WmiObject -ComputerName $SiteServer -Namespace Root/SMS/Site_$($SiteCode) -Class SMS_AppDependenceRelation
    			
    			If ($DependenciesList) {
    			
    				Foreach ($Dependencie in $DependenciesList) {
    
    					$App = $(Get-WmiObject -Namespace Root/SMS/Site_$($SiteCode) -Query "Select CIVersion,LocalizedDisplayName From SMS_Application Where CI_ID='$($Dependencie.FromApplicationCIID)'")
    					$Dependencies = $(Get-WmiObject -Namespace Root/SMS/Site_$($SiteCode) -Query "Select CIVersion,LocalizedDisplayName from SMS_Application Where CI_ID='$($Dependencie.ToApplicationCIID)'")
    				
    					$TmpObj = New-Object -TypeName 'PSobject'
    					$TmpObj | Add-Member -MemberType 'NoteProperty' -Name 'Name' -Value $($App.LocalizedDisplayName)
    					$TmpObj | Add-Member -MemberType 'NoteProperty' -Name 'Revision' -Value $($App.CIVersion)
    					$TmpObj | Add-Member -MemberType 'NoteProperty' -Name 'Dependencie Name' -Value $($Dependencies.LocalizedDisplayName)
    					$TmpObj | Add-Member -MemberType 'NoteProperty' -Name 'Dependencie Revision' -Value $($Dependencies.CIVersion)
    					
    					$Result.Add($TmpObj) | Out-Null
    
    				}
    				
    			}
    
    			Return $Result
    			
    		} Catch {
    		
    			Throw $_.Exception.ErrorRecord
    			
    		}
    	
    	}
    	
    }

    Cordialement

    samedi 18 février 2017 19:50
  • bonjour Eclipse

    je viens de reprendre mes fonction, Merci pour ton retour 

    malheureusement j'ai une petite expérience par rapport au powershell

    peut tu stp de commenter chaque action dans ton scripte

    c'est très gentil de ta par merci encore 

    Bien cordialement,

    vendredi 17 mars 2017 09:05