Question Arborescence de collections

Plus d'informations
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

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 13 ans 3 semaines #14155 par Matthew BETTON
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

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
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 \&quot;+\&quot; mais j'ai beaucoup de mal.

Si jamais quelqu'un la déjà fais...

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 13 ans 3 semaines #14163 par Laurent Dardenne
Reazy écrit:

lorsque l'on clique sur le petit \&quot;+\&quot;

Le petit '+' ?
C'est la devinette du jour ?
:P

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
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.

Plus d'informations
il y a 13 ans 3 semaines #14166 par Matthew BETTON
Bonjour,

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
Propulsé par Kunena