Question [Résolu] SaveFile Dialog Remplacement fichier

Plus d'informations
il y a 15 ans 9 mois #7146 par Arthur
Bonjour,
Voilà j'ai écrit un programme qui récupère des logs et effectue divers traitements dessus pour ensuite l'afficher.
L'utilisateur peut choisir d'exporter le résultat en fichier csv avec un bouton qui ouvre une SaveFileDialog, et je me suis rendus compte que quand je choisi d'écraser un fichier existant juste après l'affichage de la fenêtre de confirmation le script plante. ( le script ne répond plus)
Voici le contenu de la fonction du bouton :
[code:1][void] [System.Reflection.Assembly]::LoadWithPartialName(\"System.Windows.Forms\"«»)
$fichier_csv = New-Object System.Windows.Forms.SaveFileDialog
$fichier_csv.InitialDirectory = \".\"
$fichier_csv.ShowHelp=$true
$fichier_csv.Filter = \"csv files | *.csv\"
if($fichier_csv.ShowDialog() -eq \"OK\"«») {


if($affichage -match \"\w+6\"«») {
$liste6 | Export-Csv -Path $fichier_csv.FIlename -Delimiter \";\" -Encoding Unicode
}
elseif($affichage -match \"\w+5\"«») {
$liste5 | Export-Csv -Path $fichier_csv.FIlename -Delimiter \";\" -Encoding Unicode
}
}
Write-Host \"Extraction finit! \"[/code:1]

Message édité par: bilbao, à: 14/06/10 17:24

Message édité par: bilbao, à: 14/06/10 17:25<br><br>Message édité par: Arnaud, à: 25/06/10 14:12

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

Plus d'informations
il y a 15 ans 9 mois #7147 par Laurent Dardenne
Je viens de tester (xp sp3, ps v2) je ne rencontre pas le pb.
Ajoute des traces pour savoir si le script reprend son exécution après avoir quitté la fenêtre.

Tutoriels PowerShell

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

Plus d'informations
il y a 15 ans 9 mois #7152 par Arthur
C'est dingue, ca marche effectivement sur ma VM XP SP3 mais pas sur ma VM Win7.:pinch:
Le problème ne vient visiblement pas de mon code.
Car c'est au moment où il affiche la confirmation que le script plante je ne peut même pas cliquer sur \&quot;Oui\&quot;.

EDIT : Visiblement l'originine du problème vient de là :
blog.sapien.com/index.php/2009/02/26/pri...-sp1-with-net-30-35/

Mais ca ne marche toujours pas. :unsure:

[code:1]$Export_Log_Unique_OnClick=
{

[void] [System.Reflection.Assembly]::LoadWithPartialName(\&quot;System.Windows.Forms\&quot;«»)
$fichier_csv = New-Object System.Windows.Forms.SaveFileDialog
$fichier_csv.InitialDirectory = \&quot;.\&quot;
$fichier_csv.ShowHelp=$true
$fichier_csv.OverwritePrompt =$true
$fichier_csv.CreatePrompt =$true
$fichier_csv.Filter = \&quot;csv files | *.csv\&quot;
if($fichier_csv.ShowDialog() -eq \&quot;OK\&quot;«») {


if($affichage -match \&quot;\w+6\&quot;«») {
$liste6 | Export-Csv -Path $fichier_csv.FIlename -Delimiter \&quot;;\&quot; -Encoding Unicode
}
elseif($affichage -match \&quot;\w+5\&quot;«») {
$liste5 | Export-Csv -Path $fichier_csv.FIlename -Delimiter \&quot;;\&quot; -Encoding Unicode
}
}
Write-Host \&quot;Extraction finit!\&quot;

}[/code:1]<br><br>Message édité par: bilbao, à: 15/06/10 09:09

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

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

C'est dingue, ca marche effectivement sur ma VM XP SP3 mais pas sur ma VM Win7.:pinch:
Le problème ne vient visiblement pas de mon code.

Sous Windows Seven, exécute PowerShell avec le switch -STA, cela devrait allez mieux.

Tutoriels PowerShell

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

Plus d'informations
il y a 15 ans 9 mois #7154 par Arthur
En effet ca marche...mais bon...je suis obligé de faire ca tous le temps?C'est que l'outil n'est pas pour moi,ca serait bien de pouvoir trouver un moyen \&quot;plus simple\&quot; pour l'utilisateur. ( bien que c'est facile mais bon....:P )

Visiblement il y a des solutions pour le faire :http://blogs.msdn.com/b/powershell/archive/2008/05/22/wpf-powershell-part-1-hello-world-welcome-to-the-week-of-wpf.aspx

Mais je n'aime pas trop l'utilisation de runspace ( j'utilise déjà des Job dans mon script )

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

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

je suis obligé de faire ca tous le temps?

Là faut t'adresser à MS, je ne suis qu'un messager sur ce coup là.
bilbao écrit:

ca serait bien de pouvoir trouver un moyen \&quot;plus simple\&quot; pour l'utilisateur.

J'ai dernièrement lu un script du prochaine ouvrage de Lee Holmes qui relance une instance de PS si
$host.Runspace.ApartmentState n'est pas égale à STA, voir [System.Threading.ApartmentState]::MTA,STA,Unknown :
[code:1]
if($host.Runspace.ApartmentState -ne \&quot;STA\&quot;«»)
{
\&quot;Relaunching\&quot;
$file = $myInvocation.MyCommand.Path
powershell -NoProfile -Sta -File $file $parameter $parameter2
return
}
[/code:1]
On peut je pense pousser le bouchon en utilisant les variables $myInvocation et $PSBoundParameters pour reconstruire dynamiquement l'appel du script en cours...

Il propose aussi cette approche :
[code:1]
PowerShell -NoProfile -STA -Command {
Add-Type -Assembly PresentationCore
[Windows.Clipboard]::«»SetText(\&quot;Hello World\&quot;«»)
}
[/code:1]
On peut faire des choses compliquées avec PowerShell, mais lorsqu'on nous explique où trouver l'info c'est tout de suite plus facile de les faire simplement.
PowerShell ?! J'adore sa documentation :evil:

Tutoriels PowerShell

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

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