Question Pb: split / CheckedListBox

Plus d'informations
il y a 15 ans 11 mois #6485 par Arthur
Pb: split / CheckedListBox a été créé par Arthur
Voilà j'essai de créer un script qui pour le moment récupère les logs de plusieurs ordinateurs et qui ensuite les exportent chacun SÉPARÉMENT ( vous allez comprendre :P )

Seulement voilà j'utilise une CheckedListBox et quand je récupère les noms de pc il me met tous en une ligne.
Je n'arriver pas à \"splitter\" :angry: le noms des PC et du coup quand je fait export-csv il me met tous en un fichier (Le fait que la commande Get-EventLog marche est déjà un mystère :S )


Par exemple si je choisis \"PC1\" et \"PC2\" il me créer un fichier \"PC1 PC2.csv\" :angry:


[code:1]$Lister_OnClick=
{

#TODO: Place custom script here
[string]$log_nom = $ListeLog.CheckedItems
$pc_nom = $ListeOrdi.CheckedItems
[string]$pc_nom2 = $pc_nom
Write-Host $pc_nom2
$pc_nom3 = $pc_nom2.split(' ')
$pc_nom4 = -split \"$pc_nom3\"
Write-Host $pc_nom4
$pc_nom4 | foreach {
Get-EventLog -LogName \"$($log_nom)\" -EntryType Error -ComputerName \"$($_)\" | Export-Csv -Path \"./$pc_nom4\"
}

}[/code:1]

Le fait qu'il est plusieurs \"split\" est que j'ai un peut testé toute les combinaisons possibles...

Le code entier se trouve en pièce jointe.

La pièce jointe marche_pas.ps1 est absente ou indisponible



Message édité par: bilbao, à: 7/04/10 16:42<br><br>Message édité par: bilbao, à: 7/04/10 16:43
Pièces jointes :

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

Plus d'informations
il y a 15 ans 11 mois #6487 par Laurent Dardenne
Salut,
bilbao écrit:

Le fait qu'il est plusieurs \&quot;split\&quot; est que j'ai un peut testé toute les combinaisons possibles...

:blink:
Une reformulation peut être ?

bilbao écrit:

Par exemple si je choisis \&quot;PC1\&quot; et \&quot;PC2\&quot; il me créer un fichier \&quot;PC1 PC2.csv\&quot; :angry:

Pas il, \&quot;je\&quot;.
Tout langage fait ce qu'on (je) lui demande, énonce clairement ce que tu veux faire avant de le coder et tu verras que c'est plus facile.

Sais-tu ce que fait ce code :
[code:1]
$pc_nom = $ListeOrdi.CheckedItems
[/code:1]
et celui-ci ?
[code:1][string]$pc_nom2 = $pc_nom[/code:1]

M'est avis que là, tu codes un script qui tombe en marche :S

Tutoriels PowerShell

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

Plus d'informations
il y a 15 ans 11 mois #6489 par Arthur
Réponse de Arthur sur le sujet Re:Pb: split / CheckedListBox
Le code :
[code:1] $pc_nom = $ListeOrdi.CheckedItems
[/code:1]

Permet de récupérer une collection des éléments activés dans la checkedlistbox ( msdn.microsoft.com/fr-fr/library/system....ms%28v=VS.80%29.aspx )

Quand au code
[code:1] [string]$pc_nom2 = $pc_nom [/code:1]
Il permet de convertir justement cette collection en string pour pouvoir utiliser la méthode \&quot;-split\&quot;
Je ne sait pas si cela marche vraiment car j'avoue avoir peu d'expérience en .NET ou Powershell ( je codais sous Java avant :P ) et il n'y a pas de documentations concernant les CheckedListBox sous Powershell j'utilise donc le MSDN à 95% pour m'aider.

Ensuite en cherchant des info sur la méthode \&quot;split\&quot; j'ai trouvé un deuxième façon d'utiliser cet méthode donc dans le doute j'ai mis les deux

d'où le :
[code:1]$pc_nom3 = $pc_nom2.split(' ')
$pc_nom4 = -split \&quot;$pc_nom3\&quot;
[/code:1]

qui peut paraitre idiot. :P

Message édité par: bilbao, à: 7/04/10 22:47



Édit (08/04/10) :

Bon j'ai finalement réussi à séparer les 2 objets je partais dans la mauvaise direction.

Voici le code pour les intéressés :

[code:1] foreach( $pc_nom in $ListeOrdi.CheckedItems)
{
foreach ($pc_nom_unique in $pc_nom.ToString()) {
Write-Host $pc_nom_unique
Get-EventLog -LogName \&quot;$($log_nom)\&quot; -EntryType Error -ComputerName \&quot;$($pc_nom_unique)\&quot; | Export-Csv -Path \&quot;./$pc_nom_unique\&quot;
}
} [/code:1]

Comme quoi une bonne nuit sommeil permet de remettre les idées en place :P<br><br>Message édité par: bilbao, à: 8/04/10 09:52

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

Plus d'informations
il y a 15 ans 11 mois #6490 par Laurent Dardenne
bilbao écrit:

j'utilise donc le MSDN à 95% pour m'aider.

Pour la définiition des classes du framework il n'y a pas d'autre approche.
bilbao écrit:

et il n'y a pas de documentations concernant les CheckedListBox sous Powershell

Ton problème, je pense, est un manque de documentation des mécanismes de conversions des objets PowerShell (tous les objets dotnet sont adaptés).
PS manipule des collections d'objets ($ListeOrdi.Items.Add(\&quot;$($objcomputer.cn)\&quot;)) tu dois déjà savoir quel est le type des éléments de ta liste.

Ici Dir renvoi une collection de fichier :
[code:1][string] (dir)|Foreach {Write-host \&quot;item-name : $_\&quot;}[/code:1]
La conversion par défaut d'un objet fichier renvoi son nom court, l'usage du cast [string] sur la collection issue de DIR crée une chaîne contenant tous les noms de fichiers séparés par un espace.
Si tu souhaites récupérer une tableau, le cast [string[]] permet de récupérer un tableau de string :
[code:1][string[]] (dir)|Foreach {Write-host \&quot;item-name : $_\&quot;}[/code:1]
Plus besoin d'utiliser l'opérateur -split, la conversion par défaut est identique, mais pas le résultat.

Du coup ta solution peut être simplifiée :
[code:1]
foreach ($pc_nom_unique in $pc_nom.ToString())
[/code:1]
en
[code:1]
foreach( $pc_nom in dir)
{ Write-Host \&quot;./$pc_nom\&quot; }
[/code:1]
Les guillemets indiquent à PS de substituer ton objet en une string en appelant implicitement sa méthode ToString():
[code:1]
Write-Host \&quot;$(dir)\&quot;
[/code:1]
Et ici, c'est la liaison de paramètres du cmdlet Write-host qui convertit la collection en une string :
[code:1]
Write-Host $(dir)
[/code:1]
L'ouvrage de Bruce Payette aborde dans le détail ces mécanismes, la documentation que tu recherches est donc dans son ouvrage \&quot;PowerShell in Action\&quot;.
;)

Tutoriels PowerShell

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

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