Я работаю с некоторыми сценариями, где я вызываю некоторые сценарии PowerShell (.ps1) из пакетных файлов. Я не могу заставить это работать для этой конкретной ситуации:
У меня есть следующий пакетный файл:
@echo off
TITLE Modifying Quick Access Pinned Items
color f0
PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& 'r:\Tools\QuickAccessPin.ps1'";
QuickAccessPin.ps1:
.\Set-QuickAccess.ps1 -Action Unpin -Path "$env:userprofile\Desktop"
.\Set-QuickAccess.ps1 -Action Unpin -Path "$env:userprofile\Downloads"
.\Set-QuickAccess.ps1 -Action Unpin -Path "$env:userprofile\Documents"
.\Set-QuickAccess.ps1 -Action Pin -Path "$env:userprofile"
.\Set-QuickAccess.ps1 -Action Pin -Path "$env:userprofile\Desktop"
.\Set-QuickAccess.ps1 -Action Pin -Path "$env:userprofile\Documents"
.\Set-QuickAccess.ps1 -Action Pin -Path "$env:userprofile\Downloads"
Ошибка, когда я запускаю пакетный файл: (я вставил «pause» в конец пакетного файла, чтобы захватить это; я получаю 8 из них, причем это последний, как указано в .ps1:8)
.\Set-QuickAccess.ps1 : The term '.\Set-QuickAccess.ps1' is not recognized as the name of a cmdlet, function, script
file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct
and try again.
At R:\Tools\QuickAccessPin.ps1:7 char:1
+ .\Set-QuickAccess.ps1 -Action Pin -Path "$env:userprofile\Downloads
+ ~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (.\Set-QuickAccess.ps1:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
Я подумал, что это может быть проблема с моим сценарием PS1, поэтому я открыл файл в PowerShell ISE и нажал F5 для запуска сценария. Когда я это делаю, происходит следующее, и мне приходится нажимать "Выполнить один раз" семь раз - один раз для каждой из команд, вызываемых в QuickAccessPin.ps1.
Итак, PS1 работает, хотя и не так, как предполагается, когда я запускаю его напрямую, но не работает вообще, когда я вызываю его из командного файла. Я должен также указать, что в настоящее время для тестирования моя политика выполнения является неограниченной (обычно RemoteSigned). Более того, чтобы устранить любые проблемы, я также попытался запустить нижеприведенное, поэтому PowerShell не запрашивает в графическом интерфейсе для запуска файлов:
@echo off
TITLE Unblocking PowerShell Tools
color f0
PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& 'r:\Tools\UnblockThisFolder.ps1'";
PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& {Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope CurrentUser -Force}"
UnblockThisFolder.ps1 это просто
Get-ChildItem r:\Tools | Unblock-File
... но это, похоже, ничего не делает, так как PowerShell ISE по-прежнему предлагает мне запустить его, говоря, что я могу "разблокировать" файлы, если они безопасны (что я уже сделал, может быть, 13 раз сейчас). Если я установил свою политику на RemoteSigned и затем запустил сценарий, описанный выше, то снова Get-ExecutionPolicy, он показывает Unrestricted, так что 4-я строка работает, а 3-я ничего не делает.
Так что тот факт, что он каждый раз подсказывает мне, является лишь незначительным раздражением, потому что все это будет автоматизировано, и я вообще не буду использовать какой-либо графический интерфейс. Но сейчас я не могу вызвать сценарий PS1 из командного файла, что мне нужно сделать, и единственный способ, которым я могу запустить свой сценарий, - это сделать это вручную внутри ISE.
Кто-нибудь знает, как я могу решить эту проблему?