Где разместить скрипты PowerShell? - PullRequest
50 голосов
/ 18 июня 2009

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

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

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

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

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

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

Ответы [ 4 ]

23 голосов
/ 19 июня 2009

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

$ProfileRoot = (Split-Path -Parent $MyInvocation.MyCommand.Path)
$env:path += ";$ProfileRoot"
12 голосов
/ 20 июня 2009

С 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
10 голосов
/ 18 июня 2009

Мои рекомендации: - Сохраните сценарий в каталоге по вашему желанию, например, C: \ шикарно - Добавьте каталог в $ env: путь

$env:path += ";c:\posh"

Это гарантирует, что вы можете находиться в другом каталоге, скажем, c: \ windows, но вы можете вызвать скрипт

[c:\windows] > sampl[TAB] # it expands the name of file to sample.ps1, then hit enter

Если ваш файл sample.ps1 содержит определения функций, и вы импортируете его каждый раз, тогда я хотел бы добавить эту строку в ваш файл $ profile

. c:\posh\sample.ps1

Относительно организации сценариев ... всего несколько директорий в соответствии с назначением сценариев :) Personal, dev, external (загружено), примеры, ...

8 голосов
/ 01 октября 2009

Вот что я делаю:

примечание: замените «ModuleName» на что-то значимое.

Создайте модуль и сохраните его в папке глобальных модулей как "C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ Modules \ имя_модуля \ ModuleName.psm1". e.g.:

function global:FancyFunction() {
   # do something interesting here.
}

Export-ModuleMember -function FancyFunction 

Откройте свой профиль powershell и добавьте следующую строку, чтобы убедиться, что ваш модуль загружается при каждом запуске сеанса powershell:

Import-Module ModuleName -Force

Вы можете легко найти свой профиль powershell, набрав:

notepad $profile

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

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