С помощью 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», и он все равно будет работать.
Действительно ли это так? У меня есть папка внутри моего PATH с файлами .ps1 в нем. Расширение .ps1 в моем PATHEXT, и когда я пытаюсь вызвать скрипт по его имени, я получаю «Термин« foo »не распознается как имя командлет, функция, файл сценария или операционная программа . " (но он работает из командной строки) – zneak
Он всегда работал для меня во всех версиях PowerShell с версии от v2 до v5. Если вы введете '$ env: PATH' в приглашении powershell, вы видите папку там? Возможно, PATH не был добавлен навсегда или explorer.exe не был перезапущен с момента изменения PATH. Кроме того, .ps1 не обязательно должен находиться в PATHEXT, чтобы вызвать скрипт из powershell. – Rynant