Comment exécuter un script PowerShell à partir d'un fichier batch

j'essaie d'exécuter ce script dans PowerShell. J'ai enregistré le script ci-dessous comme ps.ps1 sur mon bureau.

$query = "SELECT * FROM Win32_DeviceChangeEvent WHERE EventType = 2"
Register-WMIEvent -Query $query -Action { invoke-item "C:Program Filesabc.exe"}

j'ai créé un script par lot pour exécuter ce script PowerShell

@echo off
Powershell.exe set-executionpolicy remotesigned -File  C:UsersSEDesktopps.ps1
pause

Mais j'obtiens cette erreur:

Enter image description here

129
demandé sur Peter Mortensen 2013-10-12 17:57:42

6 réponses

vous avez besoin du paramètre -ExecutionPolicy :

Powershell.exe -executionpolicy remotesigned -File  C:\Users\SE\Desktop\ps.ps1

sinon PowerShell considère les arguments comme une ligne à exécuter et bien que Set-ExecutionPolicy soit un cmdlet, il n'a pas de paramètre -File .

171
répondu Joey 2013-10-12 15:17:42

j'explique à la fois pourquoi vous voulez appeler un script PowerShell à partir d'un fichier batch et comment le faire dans mon billet de blog ici .

c'est essentiellement ce que vous recherchez:

PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& 'C:\Users\SE\Desktop\ps.ps1'"

et si vous devez exécuter votre script PowerShell en tant qu'Administrateur, Utilisez ceci:

PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& {Start-Process PowerShell -ArgumentList '-NoProfile -ExecutionPolicy Bypass -File ""C:\Users\SE\Desktop\ps.ps1""' -Verb RunAs}"

au lieu de coder le chemin entier vers le script PowerShell, je recommande de placer le fichier batch et Fichier de script PowerShell dans le même répertoire, comme mon blog le décrit.

78
répondu deadlydog 2013-11-18 22:23:35

si vous exécutez un fichier batch appelant PowerShell comme administrateur, vous feriez mieux de l'exécuter comme ceci, vous épargnant tous les problèmes:

powershell.exe -ExecutionPolicy Bypass -Command "Path\xxx.ps1"

il est préférable d'utiliser Bypass ...

8
répondu Root Loop 2014-12-01 00:33:03

si vous voulez exécuter depuis le répertoire courant sans chemin entièrement qualifié, vous pouvez utiliser:

PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& './ps.ps1'"
8
répondu e.gad 2016-05-02 19:26:54

si votre script de connexion PowerShell tourne après 5 minutes (comme le mien l'était) sur un serveur 2012, il y a un paramètre GPO sur un serveur - 'Configure Login script Delay' le paramètre par défaut 'non configuré' cela laissera un délai de 5 minutes avant d'exécuter le script de connexion.

1
répondu Neil 11111 2018-01-08 18:12:21

si vous voulez exécuter quelques scripts, vous pouvez utiliser Set-executionpolicy -ExecutionPolicy Unrestricted puis réinitialiser avec Set-executionpolicy -ExecutionPolicy Default .

notez que la Politique d'exécution n'est vérifiée que lorsque vous commencez son exécution (ou du moins c'est ce qu'il semble) et vous pouvez donc exécuter des travaux en arrière-plan et réinitialiser la Politique d'exécution immédiatement.

# Check current setting
Get-ExecutionPolicy

# Disable policy
Set-ExecutionPolicy -ExecutionPolicy Unrestricted
# Choose [Y]es

Start-Job { cd c:\working\directory\with\script\ ; ./ping_batch.ps1 example.com | tee ping__example.com.txt }
Start-Job { cd c:\working\directory\with\script\ ; ./ping_batch.ps1 google.com  | tee ping__google.com.txt  }

# Can be run immediately
Set-ExecutionPolicy -ExecutionPolicy Default
# [Y]es
0
répondu Nux 2016-03-10 21:17:19