2012-01-24 2 views
5

Я только что скачал командлет Register-TemporaryEvent от http://poshcode.org/2205 и разместил его в моем каталоге профилей powershell возле сценария $profile.Как импортировать новый командлет powershell?

Как создать новую команду Register-TemporaryEvent, которая будет связана с этим скриптом?

Спасибо.

ответ

2

С помощью PowerShell вы можете выполнять скрипты как команды, если они помещены в каталоги, содержащиеся в переменной среды PATH. Чтобы увидеть, какие каталоги находятся в пути, вы можете использовать:

$env:Path -split ';'| sort 

Вы можете изменить путь навсегда из Свойства системы Windows', чтобы включить местоположение ваших скриптов, или вы можете временно изменить путь из вашего профиля или скрипт. В вашем конкретном случае, вы можете добавить следующие строки в свой профиль, чтобы добавить каталог профиля в пути:

$ScriptRoot = Split-Path $SCRIPT:MyInvocation.MyCommand.Path 

if(($env:Path -split ';') -notcontains $ScriptRoot) { 
    $env:Path += ';' + $ScriptRoot 
} 

Вы можете запустить команду как:

PS >$timer = New-Object Timers.Timer 
PS >Register-TemporaryEvent $timer Disposed { [Console]::Beep(100,100) } 

Примечание: При закладке завершения, он будет завершен как Register-TemporaryEvent.ps1, но вы можете удалить «.ps1», и он все равно будет работать.

+0

Действительно ли это так? У меня есть папка внутри моего PATH с файлами .ps1 в нем. Расширение .ps1 в моем PATHEXT, и когда я пытаюсь вызвать скрипт по его имени, я получаю «Термин« foo »не распознается как имя командлет, функция, файл сценария или операционная программа . " (но он работает из командной строки) – zneak

+0

Он всегда работал для меня во всех версиях PowerShell с версии от v2 до v5. Если вы введете '$ env: PATH' в приглашении powershell, вы видите папку там? Возможно, PATH не был добавлен навсегда или explorer.exe не был перезапущен с момента изменения PATH. Кроме того, .ps1 не обязательно должен находиться в PATHEXT, чтобы вызвать скрипт из powershell. – Rynant

2

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

$sb = Get-Content .\script.ps1 | Out-String 
Invoke-Expression "function Register-TemporaryEvent {`n $sb `n} " 
Смежные вопросы