Как изменить код командного файла, чтобы он мог выполняться из сетевого ресурса, а не из корня диска? - PullRequest
0 голосов
/ 21 октября 2019

Мне нужен этот код для запуска непосредственно с компьютера (общая сетевая папка), а не с USB-накопителя, что является обязательным, как это видно в коде.

@echo off
REM MUST BE RUN FROM THE ROOT OF A USB KEY WITH THE LGPO.EXE, TEMPLATEGPO AND RESOURCES
REM copy file for further use
REM RUN AS ADMIN

REM %~d0 is the drive letter where the script is run
set pathToScript=%~d0
set pathToRessources=%~d0\Resources
set pathToGPO=%~d0\TemplateGPO

cscript //B "%windir%\system32\slmgr.vbs" /ato 

mkdir "%WINDIR%\display"

copy /y "%pathToRessources%\Teneris-Background-Bilingual.jpg" "%PUBLIC%\Pictures\"

copy /y "%pathToRessources%\ssText3d.scr" "%PUBLIC%\Pictures\"

copy /y "%pathToRessources%\Teneris-Lock-Bilingual.jpg" "%WINDIR%\display"

cd /d "%pathToScript%"
lgpo.exe /g %pathToGPO%\{A213BE3C-CA6C-4F72-9235-FC52719EB79F}

shutdown /r /t 15 /c "post config shutdown in less than 30 sec"

Как изменить кодэтого пакетного файла, чтобы его можно было выполнить из каталога на сетевом ресурсе вместо корня диска?

1 Ответ

0 голосов
/ 22 октября 2019

Пакетный файл должен быть запущен из корня диска из-за командных строк:

set pathToScript=%~d0
set pathToRessources=%~d0\Resources
set pathToGPO=%~d0\TemplateGP

Эти три строки должны быть изменены на:

set "pathToScript=%~dp0"
set "pathToRessources=%~dp0Resources"
set "pathToGPO=%~dp0TemplateGPO"

Затем пакетные файлыможет быть успешно выполнен из любого каталога локального диска. Но пакетный файл все равно не сможет успешно выполняться из каталога сетевого ресурса, доступ к которому осуществляется по пути UNC из-за командной строки:

cd /d "%pathToScript%"

Windows по умолчанию предотвращает доступ к каталогу сетевого ресурса с помощьюUNC-путь задается в качестве текущего каталога по причинам совместимости для исполняемых файлов, не поддерживающих, что текущий каталог является каталогом, путь которого не начинается с буквы диска и двоеточия. Решение использует pushd и popd вместо cd.

Модифицированный пакетный файл, который может быть выполнен из любого каталога с локальными административными привилегиями:

@echo off
rem RUN AS ADMIN
setlocal EnableExtensions DisableDelayedExpansion

set "pathToScript=%~dp0"
set "pathToRessources=%~dp0Resources"
set "pathToGPO=%~dp0TemplateGPO"

%SystemRoot%\System32\cscript.exe //B "%SystemRoot%\System32\slmgr.vbs" /ato

mkdir "%SystemRoot%\display"

copy /y "%pathToRessources%\Teneris-Background-Bilingual.jpg" "%PUBLIC%\Pictures\"

copy /y "%pathToRessources%\ssText3d.scr" "%PUBLIC%\Pictures\"

copy /y "%pathToRessources%\Teneris-Lock-Bilingual.jpg" "%SystemRoot%\display"

pushd "%pathToScript%"
lgpo.exe /g "%pathToGPO%\{A213BE3C-CA6C-4F72-9235-FC52719EB79F}"
popd

endlocal
%SystemRoot%\System32\shutdown.exe /r /t 15 /c "post config shutdown in less than 30 sec"

три строки

pushd "%pathToScript%"
lgpo.exe /g "%pathToGPO%\{A213BE3C-CA6C-4F72-9235-FC52719EB79F}"
popd

, возможно, могут быть изменены на

"%pathToScript%lgpo.exe" /g "%pathToGPO%\{A213BE3C-CA6C-4F72-9235-FC52719EB79F}"

, если исполняемый файл lgpo.exe может быть выполнен также из каталога, отличного от его места хранения, что делает пакетный файлбыстрее и будет также лучше, если пакетный файл будет выполнен с использованием групповой политики или запланированной задачи.

Чтобы понять используемые команды и их работу, откройте окно командной строки , выполнитетам приведены следующие команды и полностью прочитаны все страницы справки, отображаемые для каждой команды.

  • call /? ... поясняет %~d0, который ссылается на диск аргумента 0, то есть диск, на которомПакетный файл сохраняется соответственно сетевым ресурсом при запуске пакетного файла с использованием UNC-пути и %~dp0, который ссылается на диск и путь аргумента. 0, который представляет собой полный путь к пакетному файлу, который всегда заканчивается обратной косой чертой.
  • cscript /?
  • echo /?
  • endlocal /?
  • mkdir /?
  • popd /?
  • pushd /?
  • rem /?
  • set /?
  • setlocal /?
  • shutdown /?

Я не знаю, поддерживает ли lgpo.exe также его выполнение с /? в качестве параметра для отображения справки этого приложения.

...