Question Barre de progression

Plus d'informations
il y a 17 ans 1 semaine #4290 par Johan
Barre de progression a été créé par Johan
Bonjour,

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.

Plus d'informations
il y a 17 ans 1 semaine #4291 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:Barre de progression
VashQuiRit écrit:

je n'arrive pas a adapter les exemples a mon cas.

Lesquels :whistle:
Qu'est-ce qui te pose pb avec celui-ci ?

Tutoriels PowerShell

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

Plus d'informations
il y a 17 ans 1 semaine #4292 par Johan
Réponse de Johan sur le sujet Re:Barre de progression
pardon j'ai oublié de préciser que je parlé de barre de progression graphique =/

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

Plus d'informations
il y a 17 ans 1 semaine #4293 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:Barre de progression
VashQuiRit écrit:

pardon j'ai oublié de préciser que je parlé de barre de progression graphique =/

Certes, mais quel code utilises-tu ? Et quels problèmes d'adaptation rencontres-tu ?
Si tu ne le précises pas on ne peut pas le deviner :huh:

As-tu consulté ceci ?

Tutoriels PowerShell

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

Plus d'informations
il y a 17 ans 1 semaine #4295 par Johan
Réponse de Johan sur le sujet Re:Barre de progression
D'accord je vais essayer de donné un peu plus d'éléments.

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.

Plus d'informations
il y a 17 ans 1 semaine #4300 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:Barre de progression
Salut,
VashQuiRit écrit:

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

Oui et non, c'est une compsant d'affichage lié à ton appli.Tu peux la placer dans la barre de status, à vérifier.
VashQuiRit écrit:

En gros je comprend pas le concept de la barre de progression XD (j'ai commencé le PowerShell lundi).

Déjà comprends-tu celui en mode texte ?
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:

J'arrive a etre plus clair ?

Comme de l'eau de roche.
VashQuiRit écrit:

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 \&quot;foreach checkbox\&quot; ainsi que le \&quot;objDomaine\&quot; que j'arrive pas a automatiser

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.
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 \&quot;+=\&quot; 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]\&quot;LDAP://OU=$($Cb.Tag),DC=dc,DC=fr,DC=dc,DC=org\&quot;}
}
}
}
[/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.

Temps de génération de la page : 0.112 secondes
Propulsé par Kunena