1

Я пытаюсь использовать приведенный ниже пакетный файл, который находит дисковод компакт-дисков на машине и хочет запустить сценарий powershell с компакт-диска и запустить его в этой папке. Вот командный файл.

@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

3 ответа3

1

Следующий закомментированный скрипт .bat должен проверить все приводы CD на машине и:

если носитель вставлен и вставил среда содержит затем ожидаемая папку запуск повышенной сессии Powershell, изменений местоположения в эту папку и запускается указанной скрипт в нем:

@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
1

Этот пакет поднимет себя (если необходимо) перед оценкой диска компакт-диска, а затем запустит сценарий 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
0

Попытка использовать командный файл в одном месте и вызвать повышенный сценарий powershell

Вы можете выполнить то, что вы пытаетесь сделать с помощью приведенного ниже синтаксиса из того, что я протестировал и подтвердил со своей стороны. Я включил некоторые приемы в вашу логику с тем, как я делал подобные вещи с другими решениями для обработки файлов PowerShell и Batch, как вы объясняли в прошлом.

Я приложил к WIN2k8\Non-Supressed пути после% ~ переменной %~j поэтому цикл FOR /F будет использовать полный путь для SET переменного FPath для дальнейшего использования , чтобы использовать этот переменный как полный путь сценария PowerShell , который выполняется Нет необходимости использовать команду PUSHD для этого метода.

Я также использую явный CD /D для каталога Windows приложения PowerShell, оттуда вызываю PowerShell, а затем передаю ему аргументы, команды, переключатели и т.д. С полным путем сценария PowerShell (т.е. -ExecutionPolicy Bypass -Command "& '%FPath%\PatchTest.ps1'").

Пример пакетного скрипта

@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

Дополнительные ресурсы

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .