L'invocation d'un script PowerShell à partir de Python
Je suis en train de commencer un script PowerShell à partir de python comme ceci:
psxmlgen = subprocess.Popen([r'C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe',
'./buildxml.ps1',
arg1, arg2, arg3], cwd=os.getcwd())
result = psxmlgen.wait()
Le problème est que j'obtiens l'erreur suivante:
Fichier
C:\Users\sztomi\workspace\monprojet\buildxml.ps1
ne peut pas être chargé en raison de l'exécution de scripts est désactivée sur ce
système. Veuillez consulter la rubrique "get-help about_signing" pour plus de détails.
MALGRÉ le fait que je n'ai activer l'exécution de scripts en Powershell, il y a longtemps en tapant Set-ExecutionPolicy Unrestriced
à un administrateur-ran PS terminal (et l'a fait de nouveau, juste pour s'assurer). Le powershell exécutable est le même que le raccourci dans le menu démarrer de points. Get-ExecutionPolicy
correctement les rapports Unrestricted
peu importe si j'ai couru PowerShell en tant qu'admin ou pas.
Comment puis-je exécuter un PS script correctement à partir de Python?
OriginalL'auteur Tamás Szelei | 2011-08-01
Vous devez vous connecter pour publier un commentaire.
D'abord,
Set-ExecutionPolicy Unrestriced
est sur une base par utilisateur, et par un nombre de bits (32 bits est différente de 64 bits).Ensuite, vous pouvez remplacer la politique d'exécution de la ligne de commande.
Apparemment, vous pouvez accéder à la version 64 bits de PowerShell à partir de 32 bits PowerShell avec ce chemin (merci à @eryksun dans les commentaires):
Je ne suis pas entièrement sûr de savoir comment faire appel à un exécutable comme ça avec les sous-processus, mais juste pour clarifier, qui est le". /buildxml.ps1' la commande réelle qui est appelée?
buildxml.ps1 est un fichier de script powershell et le fichier exécutable (si c'est ce que tu veux dire par commande) est
'C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe'
. Tous les éléments de la liste qui suivent sont des paramètres qui sont passés à cet exécutable.donc, si vous vouliez l'appeler "ls" (qui est un exemple, qui pouvait être fait avec "dir") vous dirai que l'un des arg variables?
Utilisez le virtuel "SysNative" répertoire pour exécuter un natif 64-bit exécutable 32 bits WOW64 programme. Aussi, ne pas coder en dur le répertoire racine du système "C:\Windows"; ce n'est pas toujours là où Windows est installé. Je voudrais utiliser
powershell64 = os.path.join(os.environ['SystemRoot'], 'SysNative' if platform.architecture()[0] == '32bit' else 'System32', 'WindowsPowerShell', 'v1.0', 'powershell.exe')
.OriginalL'auteur JasonMArcher
Pour ceux d'entre nous qui voulaient savoir comment faire pour afficher les valeurs de arg1, arg2 et arg3 après qu'il a été transmis à powershell, tout ce que vous devez faire est de:
OriginalL'auteur Steve Davis