Question
Arborescence de collections
- Alex
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 6
- Remerciements reçus 0
il y a 13 ans 3 semaines #14153
par Alex
Arborescence de collections a été créé par Alex
Bonjour,
Je souhaite faire une arborescence qui affiche un certain nombre de collection de mon SCCM.
A l'heure actuel mon script fonctionne mais est très long et je pense mal fais.
[code:1]
function get_child_collectionID {
param([string]$parentCollectionID)
$MyCollectionMembers = Get-WmiObject -ComputerName $SiteServer -Credential $cred -Namespace \"root\SMS\Site_$SiteCode\" -Query \"select subCollectionID from SMS_CollectToSubCollect WHERE parentCollectionID = '$($parentCollectionID)'\"
return $MyCollectionMembers
}
function get_child {
param([string]$CollectionID)
$MyCollectionMembers = Get-WmiObject -ComputerName $SiteServer -Credential $cred -Namespace \"root\SMS\Site_$SiteCode\" -Query \"select Name from SMS_Collection WHERE CollectionID = '$($CollectionID)'\"
return $MyCollectionMembers.Name.ToString()
}
function Add-Node {
param ($selectedNode, $name)
$newNode = new-object System.Windows.Forms.TreeNode
$newNode.Name = $name
$newNode.Text = $name
$selectedNode.Nodes.Add($newNode) | Out-Null
return $newNode
}
......
$MyCollectionMembers | % { #Récupération des 2 collections
$parentNode = Add-Node $CollectionNodes $_.Name #Affichage de celui-ci
$moduleCmdlets = get_child_collectionID($_.CollectionID) #Récupération de leur enfants
$moduleCmdlets | % {
$childNode = Add-Node $parentNode $(get_child($_.subCollectionID))
$moduleCmdlets2 = get_child_collectionID($_.subCollectionID)
Write-Host \"2\"
$moduleCmdlets2 | % {
$childNode2 = Add-Node $childNode $(get_child($_.subCollectionID))
$moduleCmdlets3 = get_child_collectionID($_.subCollectionID)
Write-Host \"3\"
$moduleCmdlets3 | % {
$childNode3 = Add-Node $childNode2 $(get_child($_.subCollectionID))
$moduleCmdlets4 = get_child_collectionID($_.subCollectionID)
Write-Host \"4\"
$moduleCmdlets4 | % {
$childNode4 = Add-Node $childNode3 $(get_child($_.subCollectionID))
$moduleCmdlets5 = get_child_collectionID($_.subCollectionID)
Write-Host \"5\"
$moduleCmdlets5 | % {
$childNode5 = Add-Node $childNode4 $(get_child($_.subCollectionID))
Write-Host \"6\"
}
}
}
}
}
}
[/code:1]
Auriez-vous des solutions, peu être d'autres solutions ?
Je n'ai rien trouvé sur le web ....
Merci
Je souhaite faire une arborescence qui affiche un certain nombre de collection de mon SCCM.
A l'heure actuel mon script fonctionne mais est très long et je pense mal fais.
[code:1]
function get_child_collectionID {
param([string]$parentCollectionID)
$MyCollectionMembers = Get-WmiObject -ComputerName $SiteServer -Credential $cred -Namespace \"root\SMS\Site_$SiteCode\" -Query \"select subCollectionID from SMS_CollectToSubCollect WHERE parentCollectionID = '$($parentCollectionID)'\"
return $MyCollectionMembers
}
function get_child {
param([string]$CollectionID)
$MyCollectionMembers = Get-WmiObject -ComputerName $SiteServer -Credential $cred -Namespace \"root\SMS\Site_$SiteCode\" -Query \"select Name from SMS_Collection WHERE CollectionID = '$($CollectionID)'\"
return $MyCollectionMembers.Name.ToString()
}
function Add-Node {
param ($selectedNode, $name)
$newNode = new-object System.Windows.Forms.TreeNode
$newNode.Name = $name
$newNode.Text = $name
$selectedNode.Nodes.Add($newNode) | Out-Null
return $newNode
}
......
$MyCollectionMembers | % { #Récupération des 2 collections
$parentNode = Add-Node $CollectionNodes $_.Name #Affichage de celui-ci
$moduleCmdlets = get_child_collectionID($_.CollectionID) #Récupération de leur enfants
$moduleCmdlets | % {
$childNode = Add-Node $parentNode $(get_child($_.subCollectionID))
$moduleCmdlets2 = get_child_collectionID($_.subCollectionID)
Write-Host \"2\"
$moduleCmdlets2 | % {
$childNode2 = Add-Node $childNode $(get_child($_.subCollectionID))
$moduleCmdlets3 = get_child_collectionID($_.subCollectionID)
Write-Host \"3\"
$moduleCmdlets3 | % {
$childNode3 = Add-Node $childNode2 $(get_child($_.subCollectionID))
$moduleCmdlets4 = get_child_collectionID($_.subCollectionID)
Write-Host \"4\"
$moduleCmdlets4 | % {
$childNode4 = Add-Node $childNode3 $(get_child($_.subCollectionID))
$moduleCmdlets5 = get_child_collectionID($_.subCollectionID)
Write-Host \"5\"
$moduleCmdlets5 | % {
$childNode5 = Add-Node $childNode4 $(get_child($_.subCollectionID))
Write-Host \"6\"
}
}
}
}
}
}
[/code:1]
Auriez-vous des solutions, peu être d'autres solutions ?
Je n'ai rien trouvé sur le web ....
Merci
Connexion ou Créer un compte pour participer à la conversation.
- Matthew BETTON
- Hors Ligne
- Membre platinium
-
Réduire
Plus d'informations
- Messages : 968
- Remerciements reçus 0
il y a 13 ans 3 semaines #14155
par Matthew BETTON
Réponse de Matthew BETTON sur le sujet Re:Arborescence de collections
Bonjour,
Ce qu'il te faut c'est une fonction récursive (fonction ré entrante = qui s'appelle elle même pour trouver les enfants d'une collection, pour chaque collection trouvée).
Je pense à cette fonction 'get_child_collectionID'.
Ici
tu peux trouver un exemple de fonction récursive : voir 'Function FindSubCollections($CollectionID)'.
[code:1]
# Find all child collections below $ColID
Function FindSubCollections($CollectionID)
{
$subCollections = get-wmiobject -query \"select * from SMS_CollectToSubCollect where parentCollectionID='$CollectionID'\" -computername $sccmServer -namespace $sccmNamespace
if ($subCollections -ne $null) {
$subCollections | ForEach-Object {
$collection = get-wmiobject -query \"select * from SMS_Collection where CollectionID='$($_.subCollectionID)'\" -computername $sccmServer -namespace $sccmNamespace
# Populating the $CollectionsArr array with list of the collections and subcollections and subsubcollections etc...
$CollectionsArr.add($collection.collectionid)
FindSubCollections($collection.collectionid)
}
}
}
# Runs the FindSubCollections function
FindSubCollections($colid)
[/code:1]
A tester, bien évidemment, mais l'idée est là
Ca t'évitera de faire de la cascade de code 1, 2, 3, 5... qui est peut être la raison de la lenteur d'exécution de ton code ...
@ +
Matthew<br><br>Message édité par: Matthew BETTON, à: 28/02/13 16:35
Ce qu'il te faut c'est une fonction récursive (fonction ré entrante = qui s'appelle elle même pour trouver les enfants d'une collection, pour chaque collection trouvée).
Je pense à cette fonction 'get_child_collectionID'.
Ici
tu peux trouver un exemple de fonction récursive : voir 'Function FindSubCollections($CollectionID)'.
[code:1]
# Find all child collections below $ColID
Function FindSubCollections($CollectionID)
{
$subCollections = get-wmiobject -query \"select * from SMS_CollectToSubCollect where parentCollectionID='$CollectionID'\" -computername $sccmServer -namespace $sccmNamespace
if ($subCollections -ne $null) {
$subCollections | ForEach-Object {
$collection = get-wmiobject -query \"select * from SMS_Collection where CollectionID='$($_.subCollectionID)'\" -computername $sccmServer -namespace $sccmNamespace
# Populating the $CollectionsArr array with list of the collections and subcollections and subsubcollections etc...
$CollectionsArr.add($collection.collectionid)
FindSubCollections($collection.collectionid)
}
}
}
# Runs the FindSubCollections function
FindSubCollections($colid)
[/code:1]
A tester, bien évidemment, mais l'idée est là
Ca t'évitera de faire de la cascade de code 1, 2, 3, 5... qui est peut être la raison de la lenteur d'exécution de ton code ...
@ +
Matthew<br><br>Message édité par: Matthew BETTON, à: 28/02/13 16:35
Connexion ou Créer un compte pour participer à la conversation.
- Alex
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 6
- Remerciements reçus 0
il y a 13 ans 3 semaines #14158
par Alex
Réponse de Alex sur le sujet Re:Arborescence de collections
Merci beaucoup pour cette solution malheuresement elle est aussi longue que l'ancienne, je cherche une solution pour charger uniquement les sous collections lorsque l'on clique sur le petit \"+\" mais j'ai beaucoup de mal.
Si jamais quelqu'un la déjà fais...
Si jamais quelqu'un la déjà fais...
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 13 ans 3 semaines #14163
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Arborescence de collections
Reazy écrit:
C'est la devinette du jour ?
Le petit '+' ?lorsque l'on clique sur le petit \"+\"
C'est la devinette du jour ?
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Alex
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 6
- Remerciements reçus 0
il y a 13 ans 3 semaines #14164
par Alex
Réponse de Alex sur le sujet Re:Arborescence de collections
lol, c'est bon j'ai trouvé ....
Connexion ou Créer un compte pour participer à la conversation.
- Matthew BETTON
- Hors Ligne
- Membre platinium
-
Réduire
Plus d'informations
- Messages : 968
- Remerciements reçus 0
il y a 13 ans 3 semaines #14166
par Matthew BETTON
Réponse de Matthew BETTON sur le sujet Re:Arborescence de collections
Bonjour,
Reazy écrit:
Et du coup ... ? Peux tu partager ici la solution que tu as trouvé ?
Je reste sur ma faim

@+
Matthew<br><br>Message édité par: Matthew BETTON, à: 2/03/13 12:09
Reazy écrit:
lol, c'est bon j'ai trouvé ....
Et du coup ... ? Peux tu partager ici la solution que tu as trouvé ?
Je reste sur ma faim
@+
Matthew<br><br>Message édité par: Matthew BETTON, à: 2/03/13 12:09
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.055 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Arborescence de collections