Я работаю с некоторыми скриптами, где я вызываю некоторые скрипты 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"
Ошибка при запуске пакетного файла:(Я вставил «паузу» в конец пакетного файла, чтобы зафиксировать это; я получаю 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, чтобы запустить скрипт. Когда я это делаю, происходит следующее, и мне приходится нажимать «Run Once» семь раз — по одному разу для каждой из команд, вызываемых в QuickAccessPin.ps1
Итак, PS1 работает, хотя и не так, как должен, когда я запускаю его напрямую, но не работает вообще, когда я вызываю его из пакетного файла. Я также должен отметить, что в настоящее время для тестирования моя политика выполненияНеограниченный(обычноУдалённо подписанный). Более того, чтобы исключить любые проблемы, я также попробовал запустить следующее, чтобы 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
Полученная вами ошибка указывает на то, что вы, вероятно, находитесь не в том каталоге, в котором, как вы думаете, находитесь, и выполнение файла сценария с полным путем не перенесет вас в этот каталог. Поэтому, если Set-QuickAccess.ps1
он находится в R:\Tools
, нет гарантии, что вы окажетесь в этом каталоге R:\Tools
при выполнении пакетного файла.
Для начала вам нужно указать Set-Location
путь, по которому Set-QuickAccess.ps1
расположен скрипт.