Куда поместить сценарии PowerShell?
(Я не могу поверить, что я на самом деле спрашиваю об этом, но я не в силах в течение дня.)
Я только что написал свой первый серьезный PowerShell script, и я действительно доволен этим. Я планирую использовать его каждый день или около того. Я хочу иметь возможность вызвать его из командной строки Posh. Я дам ему имя типа глагола-существительного, но на данный момент это простой .ps1, а не одна из тех причудливых расширенных функций, которые принимают параметры и т.д.
Итак, куда он должен идти и как мне его называть из командной строки Posh? Я планирую написать больше! Куда они должны идти?
- Должна ли быть функция в моем профиле?
- Должен ли он идти по моему пути?
- Это происходит в PSMODULEPATH? Что там происходит? Он выглядит рекурсивно или это как обычный PATH?
Где вы все ставите свои сценарии PowerShell и как их организовать? У меня есть большой опыт создания инструментов С# и С++ и знаю, как их назвать и где их разместить. И с другой стороны, я сделал много дерьмовых файлов .bat, которые обычно являются автономными или сложены в кучу в какой-то папке. Но PowerShell кажется совсем другим. Вы можете сделать crappy файл типа файла в нем очень быстро, или вы можете создавать с ним библиотеки и сложные сервисы.
Мне бы очень понравились некоторые идеи о том, как я должен начать организовывать эти вещи, прежде чем я начну. Очевидно, все разные, поэтому я надеюсь на некоторое обсуждение. Спасибо!
Ответы
Ответ 1
Я помещаю свои личные скрипты в ту же папку, что и мой профиль. Затем я могу выполнить резервное копирование и выпустить их вместе. Мой профиль начинается с:
$ProfileRoot = (Split-Path -Parent $MyInvocation.MyCommand.Path)
$env:path += ";$ProfileRoot"
Ответ 2
С V2 вы можете создать каталог модулей в каталоге WindowsPowerShell, где находится ваш профиль. PS будет автоматически искать в этом каталоге загрузку модулей при запуске import-module. Я также создал каталог "Scripts" под WindowsPowerShell, который является каталогом дочерних элементов модулей.
Я использую свой профиль для установки некоторых каталогов с использованием переменных со следующим кодом:
PS> cat $Profile
$scripts = "$(split-path $profile)\Scripts"
$modules = "$(split-path $profile)\Modules"
$docs = $(resolve-path "$Env:userprofile\documents")
$desktop = $(resolve-path "$Env:userprofile\desktop")
PS> cat variable:\scripts
C:\Users\andy.schneider\Documents\WindowsPowerShell\Scripts
PS> cat variable:\modules
C:\Users\andy.schneider\Documents\WindowsPowerShell\Modules
Ответ 3
Мои рекомендации:
- Храните script в каталоге, как хотите; C:\шикарно
- Добавьте каталог в $env: путь
$env:path += ";c:\posh"
Это гарантирует, что вы можете находиться в другом каталоге, например c:\windows, но вы можете вызвать script
[c:\windows] > sampl[TAB] # it expands the name of file to sample.ps1, then hit enter
Если ваш файл sample.ps1 содержит определения функций, и вы каждый раз импортируете их, я бы подумал о добавлении этой строки в файл $profile
. c:\posh\sample.ps1
Относительно организации script.. всего несколько dirs в соответствии с назначением скриптов:) Личные, dev, внешние (загруженные), образцы,...
Ответ 4
Это то, что я делаю:
Примечание: замените "ModuleName" на что-то значимое.
Создайте модуль и сохраните его в папке глобальных модулей как
"C:\Windows\System32\WindowsPowerShell\v1.0\Modules\имя_модуля\ModuleName.psm1". например:.
function global:FancyFunction() {
# do something interesting here.
}
Export-ModuleMember -function FancyFunction
Откройте профиль powershell и добавьте следующую строку, чтобы убедиться, что ваш модуль загружается каждый раз, когда вы запускаете сеанс PowerShell:
Import-Module ModuleName -Force
Вы можете легко найти свой профиль powershell, набрав:
notepad $profile
Когда вы открываете новый сеанс PowerShell, вы должны иметь возможность вызывать свою функцию из консоли или из других сценариев, не делая ничего другого.