Meilleur auteur de réponses
Recherche des dépendances des applications avec powershell

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
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- Proposé comme réponse Nedeltcho PopovMicrosoft contingent staff lundi 27 février 2017 09:23
- Marqué comme réponse Teodora Sharkova vendredi 3 mars 2017 14:33
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- Proposé comme réponse Nedeltcho PopovMicrosoft contingent staff lundi 27 février 2017 09:23
- Marqué comme réponse Teodora Sharkova vendredi 3 mars 2017 14:33
-
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,