Powershell: почему так сложно запустить скрипт? - PullRequest
0 голосов
/ 03 марта 2020

Я хочу реализовать какую-нибудь псевдонимную команду, которая могла бы позволить мне перемещаться по длинному пути к каталогу, набирая меньше.

В этот ответ Я узнал, что создать невозможно псевдонимы для команд типа "cd c:\some\dir", но можно создать функцию, сохранить ее в сценарии и затем запустить.

Поэтому я создал сценарий и сохранил его в каталоге C: \ ps_scripts , удостоверился, что этот каталог указан в PATH, затем открыл PS из C: \ ps_scripts и попытался выдать команду. \ script.ps1, и ничего не произошло - ни ошибки, ни вывода, ни перехода к нужному пути каталога. script.ps1 содержит следующий код:

function fp { set-location "C:\Users\user\puppet\modules\fp\files\configs" }

Затем я искал решение здесь и попытался запустить скрипт, добавив powershell -noexit "&, как указано в принятом ответе, но получил ошибку term '$' is not recognized.

И моя политика выполнения установлена ​​на RemoteSigned.

В чем может быть проблема?

Ответы [ 2 ]

1 голос
/ 03 марта 2020

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

Вы можете получить путь к профилю для соответствующей области действия - Пользователь (текущий или все) и хост область (текущий хост или все хосты).

Например, чтобы получить путь профиля для текущего пользователя для всех хостов (Windows консоль PowerShell, ISE), вы можете ввести его в PowerShell -

Write-Output $PROFILE.CurrentUserAllHosts

, который сообщит вам путь к файлу профиля, который будет использоваться для области.

Создайте файл с тем же путем и именем, что и при выводе команды, и поместите свою функцию в этот файл. Он будет автоматически загружен для любого сеанса PowerShell текущим пользователем, и вы можете использовать эту функцию без предварительного запуска сценария вручную. Это ведет себя подобно файлу .bashr c в Linux.

Команды для настройки вашей функции в профиле

Запустите эти точные команды в PowerShell, а затем перезапустите PowerShell, он начнет работать, и вы можете использовать fp после этого для вызова этой функции из этого профиля пользователя.

New-Item -Path $PROFILE.CurrentUserAllHosts -Force
Add-Content -Path $PROFILE.CurrentUserAllHosts -Value 'function fp { set-location "C:\Users\user\puppet\modules\fp\files\configs" }'
exit
1 голос
/ 03 марта 2020

Вы помещаете определение функции в скрипт. Теперь вы должны где-нибудь вызвать / выполнить эту функцию. Ваша функция fp делает то же самое, что и cd C:\Users\user\puppet\modules\fp\files\configs, когда она вызывается.

Если вы хотите, чтобы ваша функция была доступна в командной строке, вы должны добавить к ее имени префикс global:, как описано здесь: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_functions?view=powershell-7#function -обзор

...