Загрузите скрипт powershell для вызова в любое время - PullRequest
5 голосов
/ 02 февраля 2012

Я новичок в powershell и пытался использовать пример сценария, размещенный здесь (сам сценарий ) для вычисления хэша файла. Я могу заставить его работать, используя точечную запись

. 'E:\Tools\Power Shell Scripts\Get-FileHash.ps1' E:\testfile.bin

однако я хочу использовать его, как это делает автор, и просто набрать

Get-Filehash E:\testfile.bin

Я нашел, что могу сделать

function Get-FileHash {. 'E:\Tools\Power Shell Scripts\Get-FileHash.ps1'}

но это не ведет себя правильно, он запрашивает у меня файл, когда я делаю Get-Filehash E:\testfile.bin

Что мне нужно добавить в скрипт моего профиля, чтобы правильно загрузить этот скрипт, и Get-Help Get-FileHash работает правильно?

Ответы [ 3 ]

10 голосов
/ 03 февраля 2012

На самом деле, лучшая практика в этой ситуации - поместить функцию в модуль , а не в скрипт .Как бы зловеще это ни звучало, все, что это означает, - это переименовать содержащий файл с расширением .ps1 на расширение .psm1, а затем сохранить его в каталоге «Документы» (...\Documents\WindowsPowerShell\Modules\<Name>\<Name>.psm1), где <Name> - базовое имя вашего файла..

Затем вы загружаете модуль с помощью этой команды:

Import-Module Name

После загрузки вы можете вызывать функции, содержащиеся в модуле , и Get-Help распознаеткоманды также.Помимо прочего, модули обеспечивают инкапсуляцию, поэтому один файл не загрязняет пространство контекста другого.И, кстати, вам не нужно писать командлеты на C #;Вы также можете написать их в самой PowerShell.В качестве примера, взгляните на мою библиотеку PowerShell с открытым исходным кодом , которая полностью написана на PowerShell и содержит множество справок, признанных Get-Help.

.Я знаю, чтобы в полной мере воспользоваться преимуществами использования функций и модулей - я отсылаю вас к моей статье Изучение кроличьей норы-A по конвейерам, функциям и параметрам PowerShell на Simple-Talk.com.

5 голосов
/ 02 февраля 2012

Вы можете сделать:

Set-Alias Get-Filehash "E:\Tools\Power Shell Scripts\Get-FileHash.ps1"
4 голосов
/ 02 февраля 2012

Поместите каталог, в котором находится ваш скрипт, на ваш исполняемый файл PATH (то есть переменная окружения PATH).

Кстати, ваш обход функции-оболочки не работает, потому что вы не передаете аргумент скрипту:

function Get-FileHash {. 'E:\Tools\Power Shell Scripts\Get-FileHash.ps1' $args}

или вы можете создать псевдоним (как предлагается в других ответах)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...