Пакетный файл должен быть запущен из корня диска из-за командных строк:
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
также его выполнение с /?
в качестве параметра для отображения справки этого приложения.