1

Я храню часто используемые скрипты powershell в %USERPROFILE%\Bin . Я создал переменную среды USER_BIN которую добавил в переменную среды PATH пользователя через Control Panel > System and Security > System > Advanced system setting > Environment Variables .

Когда я вписываю имя сценария, хранящегося в Bin , т.е. my-script.ps1 , в приглашение cmd или powershell, я получаю сообщение my-script.ps1 : The term 'my-script.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.

Если я предоставлю полный путь, то есть C:\Users\Ari\Bin\my-script.ps1 скрипт будет работать нормально.

2 ответа2

1

Windows инициализирует путь для CMD и Powershell при входе в систему. Вам нужно будет выйти и снова войти, прежде чем кто-либо проверит новые каталоги.

0

Это функция безопасности PowerShell. Вы можете вызывать сценарии только по относительному или абсолютному пути, но не по имени файла.

Чтобы запустить скрипт, введите путь и имя файла скрипта. Путь требуется, даже если сценарий находится в текущем каталоге, чтобы вредоносному коду было сложнее запускать сценарии. Расширение имени файла является необязательным, и, как всегда, Windows PowerShell не учитывает регистр.

Обоснование этого решения заключается в следующем:

Один из приемов, которые злоумышленники обычно пытаются использовать в других оболочках, - это создание сценария с тем же именем файла, что и у встроенной команды. Так, например, если вы хотите, чтобы пользователь запускал ваш скрипт, вы можете назвать его Dir.ps1 и поместить в папку. Если вы убедили пользователя набрать Dir и нажать Enter, ваш скрипт может выполняться, а не команда Dir, которую ожидал пользователь. Эта техника называется захватом команд. В Windows PowerShell вы всегда должны указывать путь к такому сценарию, что делает Windows PowerShell довольно хорошо защищенным от перехвата команд. Запуск demo1 не работает, так как пути нет, но работает ./demo1 работает. Это потому, что я сейчас указал путь - текущую папку. Скорее всего, эту командную строку не следует путать со встроенной командой, поскольку вы никогда не наберете какой-либо путь, если будете ссылаться на встроенную команду. Таким образом, требование пути помогает Windows PowerShell избежать перехвата команд и путаницы в отношении того, что может произойти при нажатии клавиши Enter.

Источники: http://technet.microsoft.com/en-us/magazine/2007.09.powershell.aspx http://technet.microsoft.com/en-us/library/bb613481%28v=vs.85%29.aspx

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