Question
Barre de progression
- Johan
- Auteur du sujet
- Hors Ligne
- Membre senior
-
- Messages : 57
- Remerciements reçus 0
je cherche a faire une barre de progression en raport avec une requete cependant je n'arrive pas a adapter les exemples a mon cas.
En gros je fait une boucle pour chaque PC se trouvant dans une OU de mon AD.
Je voudrais, pendant que la requete se fait, afficher une barre de progression, allant de 0 au nombre de PC sur quoi est basé la requete.
Par exemple, si la requete porte sur 10 PC, j'affiche un caré dans la barre a chaque fois que la boucle fait un tour, ce 10 fois.
Comment dois-je m'y prendre ?
Merci
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
Lesquelsje n'arrive pas a adapter les exemples a mon cas.
Qu'est-ce qui te pose pb avec celui-ci ?
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Johan
- Auteur du sujet
- Hors Ligne
- Membre senior
-
- Messages : 57
- Remerciements reçus 0
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
Certes, mais quel code utilises-tu ? Et quels problèmes d'adaptation rencontres-tu ?pardon j'ai oublié de préciser que je parlé de barre de progression graphique =/
Si tu ne le précises pas on ne peut pas le deviner
As-tu consulté ceci ?
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Johan
- Auteur du sujet
- Hors Ligne
- Membre senior
-
- Messages : 57
- Remerciements reçus 0
Donc j'ai ma principale fonction qui va recherché les PCs souhaités avec les infos qui vont bien.
[code:1]function genere
{
$listeOU = @()
$listeOU += $checkBox_1
$listeOU += $checkBox_2
$listeOU += $checkBox_3
$listeOU += $checkBox_4
$listeOU += $checkBox_5
$listeOU += $checkBox_6
$listeOU += $checkBox_7
$listeOU += $checkBox_8
$listeOU += $checkBox_9
$listeOU += $checkBox_10
$table = @()
#Pour chaque agence
foreach ($case in $listeOU)
{
#Si l'agence est séléctioné
if ($case.Checked)
{
#Renseignement du chemin de l'AD correspondant
switch ($case.Text)
{
AG-1{$objDomaine = [ADSI]'LDAP://OU=AG-1,DC=dc,DC=fr,DC=dc,DC=org'}
AG-2{$objDomaine = [ADSI]'LDAP://OU=AG-2,DC=dc,DC=fr,DC=dc,DC=org'}
AG-3{$objDomaine = [ADSI]'LDAP://OU=AG-3,DC=dc,DC=fr,DC=dc,DC=org'}
AG-4{$objDomaine = [ADSI]'LDAP://OU=AG-4,DC=dc,DC=fr,DC=dc,DC=org'}
AG-5{$objDomaine = [ADSI]'LDAP://OU=AG-5,DC=dc,DC=fr,DC=dc,DC=org'}
AG-6{$objDomaine = [ADSI]'LDAP://OU=AG-6,DC=dc,DC=fr,DC=dc,DC=org'}
AG-7{$objDomaine = [ADSI]'LDAP://OU=AG-7,DC=dc,DC=fr,DC=dc,DC=org'}
AG-8{$objDomaine = [ADSI]'LDAP://OU=AG-8,DC=dc,DC=fr,DC=dc,DC=org'}
AG-9{$objDomaine = [ADSI]'LDAP://OU=AG-9,DC=dc,DC=fr,DC=dc,DC=org'}
DR-10{$objDomaine = [ADSI]'LDAP://OU=DR-10,DC=dc,DC=fr,DC=dc,DC=org'}
}
#Recherche tous les PC/PO de/des agence(s) séléctionés
$objRecherche = new-object system.DirectoryServices.DirectorySearcher($objDomaine)
$objRecherche.Filter='(&(objectCategory=computer)(objectClass=computer))'
$objResult = $objRecherche.FindAll()
#Titre de la ListBox
[void]$listBox_requete.Items.Add(\" Nom | Description \"«»)
[void]$listBox_requete.Items.Add(\" | \"«»)
#Pour chaque PC/PO
foreach ($result in $objResult)
{
$nomPC = $($result.Properties.name)
#On vérifie que l'host est alive
$ping = Get-WmiObject -Class Win32_PingStatus -Filter \"Address='$nomPC'\"
#Si c'est le cas
if ($ping.StatusCode -eq 0) {
#On regarde si le firewall est activé ou non
$reg = \"\"
$HKLM = 2147483650
$reg = Get-WmiObject -list -namespace root\default -computer $nomPC | where-object { $_.name -eq \"StdRegProv\" }
#$EtatFW = $reg.GetDwordValue($HKLM, \"System\ControlSet001\Services\SharedAccess\Parameters\FirewallPolicy\DomainProfile\",\"EnableFirewall\"«»)
$enreg = new-object Object
#Si le firewall n'est pas activé ou effectue la recherche d'informations
if ($reg -ne \"\"«») {
#Récuperation de la configuration réseau
$NetworkAdapterConfiguration = Get-WMIObject Win32_NetworkAdapterConfiguration -computername $nomPC
$NetworkAdapter = Get-WMIObject Win32_NetworkAdapter -computername $nomPC
for ($i=0 ; $i -lt $NetworkAdapter.length ; $i++) {
$Nic = $NetworkAdapter[$i]
$Configuration = $NetworkAdapterConfiguration[$i]
#Affiche les informations pour les cartes branchées
if ($Configuration.IPEnabled) {
$Index = $Nic.Index
$AdapterType = $Nic.AdapterType
$DHCP = $($Configuration.DHCPEnabled)
$GW = $($Configuration.DefaultIPGateway)
$IpAddress = $($Configuration.IPAddress)
if ($OsVersion -gt 5.0) {
$Connecteur = $Nic.NetConnectionID
}
} else {
$Connecteur = $Nic.Index
}
}
#Récuperation du numéro de serie
$InfosPC = Get-WmiObject -class Win32_ComputerSystemProduct -computername $nomPC
#Renseignement des variables a afficher
$EtatFW2 = \"Desactive\"
$noSerie = $InfosPC.IdentifyingNumber
#Si le FireWall est activé
} else {
#Renseignement des variables a afficher
$EtatFW2 = \"Active\"
$IpAddress = \"None\"
$noSerie = \"None\"
$DHCP = \"None\"
$GW = \"None\"
}
#Affichage des infos
$enreg | Add-Member -membertype Noteproperty `
-name Name `
-value $nomPC
$enreg | Add-Member -membertype Noteproperty `
-name Description `
-value $($result.Properties.description)
$enreg | Add-Member -membertype Noteproperty `
-name IPAddress `
-value $IpAddress
$enreg | Add-Member -membertype Noteproperty `
-name Passerelle `
-value $GW
$enreg | Add-Member -membertype Noteproperty `
-name noSerie `
-value $noSerie
$enreg | Add-Member -membertype Noteproperty `
-name Etat_DHCP `
-value $DHCP
$enreg | Add-Member -membertype Noteproperty `
-name FireWall `
-value $EtatFW2
#[void]$listBox_requete.Items.Add($nomPC)
#Remplissage du tableau
$table += $enreg
$go = \" \" + $nomPC + \" | \" + $($result.Properties.description)
[void]$listBox_requete.Items.Add($go)
}
}
}
}
#Exportation du tableau dans un fichier .csv
$table | export-csv test.csv -encoding UTF8
} [/code:1]
Aprres y'a 400 lignes de code mais c'est que des Forms.
Ma fonction est appelé quand on click sur le boutton OK.
Elle check tous les PC de/des OU séléctionés et rentre les infos dans un fichier csv. Il rentre egalement les noms des PC présent dans le CSV dans une listbox afin d'effectuer des actions direct sur les PCs (genre desactivé le pare-feu etc...)
Pour le moment quand je click sur OK, l'appli se met en \"pas de réponse\" jusqu'a la fin de la requete, donc je voudrais une barre de progression a la place, c'est quand meme plus joli et ca donne une idée d'ou en est la requete.
J'ai regardé le lien que tu a passé , mais j'ai l'impression que c'est une barre indépendante, je comprend pas en quoi elle peut etre lié à l'avancement d'une requete
En gros je comprend pas le concept de la barre de progression XD (j'ai commencé le PowerShell lundi)
J'arrive a etre plus clair ?
Merci
ps : si tu a également une idée pour aléger mon code, je pense surtout au foreach (j'ai pas reussi un truck du type \"foreach checkbox\" ainsi que le \"objDomaine\" que j'arrive pas a automatiser
Message édité par: VashQuiRit, à: 12/03/09 09:15<br><br>Message édité par: VashQuiRit, à: 12/03/09 09:15
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
VashQuiRit écrit:
Oui et non, c'est une compsant d'affichage lié à ton appli.Tu peux la placer dans la barre de status, à vérifier.J'ai regardé le lien que tu a passé , mais j'ai l'impression que c'est une barre indépendante, je comprend pas en quoi elle peut etre lié à l'avancement d'une requete
VashQuiRit écrit:
Déjà comprends-tu celui en mode texte ?En gros je comprend pas le concept de la barre de progression XD (j'ai commencé le PowerShell lundi).
Si oui, c'est la même chose mais le fonctionnement différe. Là il n'y a pas d'autre alternative que de consulter sa documentation sur MSDN et de procéder à quelques essais hors contexte. Son intégration étant la seconde.
Recherche progressbar sur le forum il y a 3-4 exemples.
VashQuiRit écrit:
Comme de l'eau de roche.J'arrive a etre plus clair ?
VashQuiRit écrit:
Ce qui me fait un peu peur avec ton approche c'est que le texte de ton composant devienne une référence dans ton script. Attention danger.ps : si tu a également une idée pour aléger mon code, je pense surtout au foreach (j'ai pas reussi un truck du type \"foreach checkbox\" ainsi que le \"objDomaine\" que j'arrive pas a automatiser
Une approche plus propre est de nommé correctement tes composants, la saisie est plus longue mais sur le long terme tu est gagnant.
Utilise la propriété TAG dispos sur chaque composant.
Sinon tu peux faire une table de correspondance entre un Checkbox et son OU.
Déjà crée ton tableau en une fois, le \"+=\" le recrée 9 fois.
[code:1]
$listeOU = @( $checkBox_1,
$checkBox_2,
$checkBox_3,
$checkBox_4,
$checkBox_5,
$checkBox_6,
$checkBox_7,
$checkBox_8,
$checkBox_9,
$checkBox_10
)
[/code:1]
Ensuite le nom du domaine peut être construit directement sans passer par un switch :
[code:1]
#Pour chaque agence
foreach ($case in $listeOU)
{
#Si l'agence est séléctioné
if ($case.Checked)
{
$objDomaine = [ADSI]'LDAP://OU=$($case.Text),DC=dc,DC=fr,DC=dc,DC=org'
...
[/code:1]
Définit ton objet personnalisé avec la classe PSObject, ainsi on comprend mieux ton intention :
[code:1]
$enreg = new-object PSObject
[/code:1]
Et pour boucler sur les cb sans passer par la construction d'un tableau, chaque composant conteneur propose la propriété Controls:
[code:1]
this.Controls.Add(this.checkBox2);
this.Controls.Add(this.checkBox1);[/code:1]
Tu peux donc la parcourir et tester si l'objet est de la classe Checkbox :
[code:1]
function OnClick_btnOk($Sender,$e){
foreach($Component in $Form1.Controls)
{
if ($Component -is [System.Windows.Forms.CheckBox] )
{
$Cb= $Component -as [System.Windows.Forms.CheckBox]
if ($cb.checked)
{$objDomaine = [ADSI]\"LDAP://OU=$($Cb.Tag),DC=dc,DC=fr,DC=dc,DC=org\"}
}
}
}
[/code:1]
Voilà rapido le principe, ensuite comme je n'ai pas une vue d'ensemble ni trop de temps. Il se peut qu'une autre solution soit plus simple/approprié.<br><br>Message édité par: Laurent Dardenne, à: 12/03/09 14:08
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Barre de progression