2016-10-03 2 views
1

J'ai un powershellscript qui affiche un formulaire WPF en utilisant XAML. Pour exécuter ce script, la console powershell doit être lancée en mode STA (PS 2.0 par défaut en mode MTA).Modifier le mode powershell en STA dans le script

Je sais l'occasion, de changer le mode de la console avec cette commande:

powershell -sta 

Mais à l'avenir mon script sera exécuté automatiquement par un autre programm sans aucun paramètre. La console ne peut donc pas être appelée en premier avec le paramètre -sta.

Est-il possible de changer le mode directement dans le script powershell, avant le lancement de WPF/XAML?

+2

Le modèle de thread ne peut pas être modifié à partir d'une instance en cours d'exécution PowerShell, vous devez lancer un nouveau processus avec le modèle de filetage souhaité. C'est ce que fait 'powershell -sta': il démarre un nouveau processus PowerShell en mode STA. –

+0

Merci! Donc, il est possible de démarrer mon scriptblock dans le même powershellscirpt dans un nouveau processus avec PowerShell lancé en mode STA? Pouvez-vous me montrer un exemple? – Laser

Répondre

1

Voici un exemple simple:

$x = { 
    for($i= 0;$i -le 10;$i++){ 
     Write-host $i 
    } 
} 

Start-Process Powershell.exe -argumentlist "-sta -NoExit -NoProfile -ExecutionPolicy Bypass -Command $X" 
+1

Alternative vous pouvez commencer votre script à partir d'un deuxième script. – guiwhatsthat

+1

Merci! J'ai testé votre exemple et cela fonctionne bien. Mais il semble avoir des problèmes quand je écrase tout mon code Gui powershell dans la variable scriptblock. Je reçois des erreurs après le démarrage du nouveau processus PowerShell. Cependant, j'utilise une solution de contournement pour ce problème pour le moment. J'ai créé un deuxième script, qui appelle powershell.exe avec le STA et le paramètre de fichier. -> powershell.exe -sta -file D: \ Testdirectory \ Powershell \ ps_gui.ps1 – Laser