J'essaye d'exécuter ce script dans PowerShell. J'ai enregistré le script ci-dessous ps.ps1
sur mon bureau.
$query = "SELECT * FROM Win32_DeviceChangeEvent WHERE EventType = 2"
Register-WMIEvent -Query $query -Action { invoke-item "C:\Program Files\abc.exe"}
J'ai créé un script batch pour exécuter ce script PowerShell
@echo off
Powershell.exe set-executionpolicy remotesigned -File C:\Users\SE\Desktop\ps.ps1
pause
Mais j'obtiens cette erreur:
./
et à avoir un indicateur exécutable sous Unix.J'explique à la fois pourquoi vous voudriez appeler un script PowerShell à partir d'un fichier de commandes et comment le faire dans mon article de blog ici .
C'est essentiellement ce que vous recherchez:
Et si vous devez exécuter votre script PowerShell en tant qu'administrateur, utilisez ceci:
Plutôt que de coder en dur le chemin d'accès complet au script PowerShell, je recommande de placer le fichier de commandes et le fichier de script PowerShell dans le même répertoire, comme le décrit mon article de blog.
la source
PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& {Start-Process PowerShell -ArgumentList '-NoProfile -ExecutionPolicy Bypass Invoke-WebRequest https://www.example.com/example.ics -OutFile C:\_my\script.ics' -Verb RunAs}";
oupowershell -Command "Invoke-WebRequest https://www.example.com/example.ics -OutFile c:\_my\file.ics"
, ou en utilisant l'option -File à même dans un fichier .ps1 ou(New-Object Net.WebClient).DownloadFile
. Des idées?Si vous souhaitez exécuter à partir du répertoire actuel sans chemin d'accès complet, vous pouvez utiliser:
la source
Si vous exécutez un fichier de commandes appelant PowerShell en tant qu'administrateur, vous feriez mieux de l'exécuter comme ceci, vous évitant ainsi tous les problèmes:
Il vaut mieux utiliser
Bypass
...la source
Si vous souhaitez exécuter quelques scripts, vous pouvez utiliser
Set-executionpolicy -ExecutionPolicy Unrestricted
, puis réinitialiser avecSet-executionpolicy -ExecutionPolicy Default
.Notez que la politique d'exécution n'est vérifiée que lorsque vous démarrez son exécution (ou du moins il semble) et que vous pouvez donc exécuter des travaux en arrière-plan et réinitialiser la politique d'exécution immédiatement.
la source
Un autre moyen simple d'exécuter un script ps à partir d'un batch est de simplement l'incorporer entre les caractères ECHO et Redirection, (> et >>), exemple:
La dernière ligne supprime le fichier temporaire créé.
la source
Si votre script de connexion PowerShell s'exécute après 5 minutes (comme le mien l'était) sur un serveur 2012, il existe un paramètre GPO sur un serveur - `` Configurer le délai du script de connexion '' le paramètre par défaut `` non configuré '' cela laissera un délai de 5 minutes avant d'exécuter le script de connexion.
la source
Petit échantillon test.cmd
la source