Essayer d'utiliser un fichier batch dans un emplacement et appeler le script powershell élevé

J'essaie d'utiliser le fichier discontinu ci-dessous qui trouve le lecteur de CD sur la machine et que l'on veut lancer un script powershell à partir du CD et l'exécuter dans ce dossier. Voici le fichier de commandes.

@echo off setlocal for /f "skip=1 tokens=1,2" %%i in ('wmic logicaldisk get caption^, drivetype') do (if [%%j]==[5] pushd %%i) cd WIN2k8\Non-Supressed\ start powershell -NoLogo -NoProfile -WindowStyle Maximized -NoExit -ExecutionPolicy Bypass -File .\PatchTest.ps1 echo Press Space Bar to continue pause endlocal 

Essayer d'utiliser un fichier batch dans un emplacement et appeler le script powershell élevé

Vous pouvez accomplir ce que vous essayez de faire avec la syntaxe ci-dessous de ce que j'ai testé et confirmé de mon côté. J'ai incorporé certaines techniques dans votre logique avec la façon dont j'ai fait ce genre de chose avec d'autres solutions de processus de fichiers PowerShell et Batch comme vous l'avez expliqué dans le passé.

J'ai ajouté le WIN2k8\Non-Supressed après la variable %~j sorte que la boucle FOR /F utilisera le chemin complet pour FPath une variable ( FPath ) pour ensuite utiliser cette variable comme chemin complet du script PowerShell qui est Étant exécuté. Il n'est pas nécessaire d'utiliser la commande PUSHD selon cette méthode.

J'utilise également un CD /D explicite dans le répertoire Windows de l'application PowerShell, j'envoie le PowerShell à partir de là, puis passez les arguments, les commandes, les commutateurs, etc. à partir de là, avec le chemin complet du script PowerShell (c'est-à-dire -ExecutionPolicy Bypass -Command "& '%FPath%\PatchTest.ps1'" ).

Exemple de script par lots

 @ECHO ON SETLOCAL FOR /F "SKIP=1 TOKENS=1,2" %%i IN ('"wmic logicaldisk get caption, drivetype"') DO (IF [%%~j]==[5] SET FPath="%%~i\WIN2k8\Non-Supressed") SET PowerShellDir=C:\Windows\System32\WindowsPowerShell\v1.0 CD /D "%PowerShellDir%" Powershell -ExecutionPolicy Bypass -Command "& '%FPath%\PatchTest.ps1'" ECHO Press Space Bar to continue PAUSE ENDLOCAL 

Autres ressources

  • Politique d'exécution
  • CD
  • Ensemble

Le script .bat doit vérifier tous les lecteurs de CD sur la machine et :

Si un support est inséré et que le support inséré contient le dossier attendu, exécutez une session powershell élevée, modifiez l'emplacement dans ce dossier et exécute le script spécifié à l'intérieur de celui-ci:

 @ECHO OFF SETLOCAL EnableExtensions DisableDelayedExpansion rem set initial values set "_folder=WIN2k8\Non-Supressed" set "_folder=content\recipes\cze_CZE" my testing value SET "_fullPath=" necessary FOR /F "SKIP=1 TOKENS=1-5" %%i IN (' "wmic logicaldisk get Caption, DriveType, Size, SystemName, VolumeSerialNumber" ') DO ( rem next test: is CD/DVD? could be omitted using `wmic … Where "DriveType=5" get …` IF [%%~j]==[5] ( rem next test: medium inserted? IF NOT [%%~m]==[] ( rem next test: right medium inserted? if exist "%%~i\%_folder%\" ( SET "_fullPath=%%~i\%_folder%" ) ) ) ) rem set auxiliary values to keep final `PowerShell` line in a reasonable length set "_elevate=Start-Process PowerShell -Verb RunAs" set "_torun=.\PatchTest.ps1" set "_torun=Get-Childitem 81*;pause" my testing value set "_arguments='Push-Location -literalPath ''"%_fullPath%"'';%_torun%'" IF defined _fullPath ( PowerShell %_elevate% -ArgumentList %_arguments% ) pause 

Ce lot s'élèvera (si nécessaire) avant d'évaluer le lecteur de CD, puis exécute le script powershell.

 @echo off setlocal ::Check if elevated net file 1>nul 2>&1 || (powershell -ex ByPass -Command ^ "Start-Process -Verb RunAs -FilePath '%comspec%' -ArgumentList '/c %~f0 %*'" goto :eof ) :: Put code here that needs elevation Set "CDPath=\WIN2k8\Non-Supressed\" Set "Script=PatchTest.ps1" for /f %%i in ( 'wmic logicaldisk where "DriveType=5" get caption^, drivetype^|findstr ":"' ) do IF exist "%%i%CDPath%Script%" Set "CDPath=%%i%CDPath%" & Goto :Found Echo Can't locate CD drive / script Pause Goto :Eof :Found PushD "%CDPath%" start powershell -NoLogo -NoProfile -WindowStyle Maximized -NoExit -Ex Bypass -File .\PatchTest.ps1 echo Press Space Bar to continue pause endlocal