Подтвердить что ты не робот

Куда поместить сценарии PowerShell?

(Я не могу поверить, что я на самом деле спрашиваю об этом, но я не в силах в течение дня.)

Я только что написал свой первый серьезный PowerShell script, и я действительно доволен этим. Я планирую использовать его каждый день или около того. Я хочу иметь возможность вызвать его из командной строки Posh. Я дам ему имя типа глагола-существительного, но на данный момент это простой .ps1, а не одна из тех причудливых расширенных функций, которые принимают параметры и т.д.

Итак, куда он должен идти и как мне его называть из командной строки Posh? Я планирую написать больше! Куда они должны идти?

  • Должна ли быть функция в моем профиле?
  • Должен ли он идти по моему пути?
  • Это происходит в PSMODULEPATH? Что там происходит? Он выглядит рекурсивно или это как обычный PATH?

Где вы все ставите свои сценарии PowerShell и как их организовать? У меня есть большой опыт создания инструментов С# и С++ и знаю, как их назвать и где их разместить. И с другой стороны, я сделал много дерьмовых файлов .bat, которые обычно являются автономными или сложены в кучу в какой-то папке. Но PowerShell кажется совсем другим. Вы можете сделать crappy файл типа файла в нем очень быстро, или вы можете создавать с ним библиотеки и сложные сервисы.

Мне бы очень понравились некоторые идеи о том, как я должен начать организовывать эти вещи, прежде чем я начну. Очевидно, все разные, поэтому я надеюсь на некоторое обсуждение. Спасибо!

4b9b3361

Ответ 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, вы должны иметь возможность вызывать свою функцию из консоли или из других сценариев, не делая ничего другого.