1

Я работаю с некоторыми сценариями, где я вызываю некоторые сценарии 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.

Кто-нибудь знает, как я могу решить эту проблему?

1 ответ1

2

Получаемая ошибка указывает на то, что вы, вероятно, не находитесь в каталоге, в котором, по-вашему мнению, находитесь, и выполнение файла сценария с полным путем не помещает вас в этот каталог - поэтому, если Set-QuickAccess.ps1 находится в R:\Tools , вы не обязательно окажетесь в R:\Tools при запуске командного файла.

Вам нужно начать с установки Set-Location на путь, где расположен скрипт Set-QuickAccess.ps1 .

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