поместите простой файл .cmd в мою подпапку с моим файлом .ps1 с тем же именем, поэтому, например, сценарий с именем «foobar» будет иметь «foobar.ps1» и «foobar.cmd». Таким образом, чтобы запустить .ps1, все, что мне нужно сделать, это щелкнуть файл .cmd в проводнике или запустить .cmd из командной строки. Я использую то же самое базовое имя, потому что .cmd файл будет автоматически искать .ps1, используя свое собственное имя.
::====================================================================
:: Powershell script launcher
::=====================================================================
:MAIN
@echo off
for /f "tokens=*" %%p in ("%~p0") do set SCRIPT_PATH=%%p
pushd "%SCRIPT_PATH%"
powershell.exe -sta -c "& {.\%~n0.ps1 %*}"
popd
set SCRIPT_PATH=
pause
Pushd / popd позволяет запускать файл .cmd из командной строки, не переходя в конкретный каталог, в котором находятся скрипты. Он перейдет в каталог сценариев, а затем по завершении вернется в исходный каталог.
Вы также можете снять паузу, если хотите, чтобы окно командной строки исчезло после завершения сценария.
Если мой сценарий .ps1 имеет параметры, я запрашиваю их с помощью графического интерфейса, используя .NET Forms, но также делаю сценарии достаточно гибкими, чтобы принимать параметры, если я хочу вместо них передать их. Таким образом, я могу просто дважды щелкнуть по нему из Проводника и не знать детали параметров, так как он спросит меня, что мне нужно, со списками или другими формами.