Попробуйте модули
Методика, которую мы приняли, заключается в загрузке всех наших функций через модуль сценария.Мы создали папку для хранения всех отдельных файлов функций и в дальнейшем подразделили их на соответствующие категории.Как только мы это сделаем, мы создадим файл .psm1
, чтобы сообщить модулю, что загружать, и затем добавим путь к модулю в наш профиль PowerShell (если он не находится в расположении модуля по умолчанию).
Структура папки
Module-Name\
Subfolder1\
Subfolder2\
...
Module-Name.psm1
.psm1 файл
Module-Name.psm1 (находится под папкой с тем же именем - обязательно)
# Script Module for Company Functions
Function Get-ScriptDirectory {
# $MyInvocation is an Automatic variable that contains runtime details and
# we can use this to get information about where the file is run from.
$Invocation = (Get-Variable MyInvocation -Scope 1).Value
Split-Path $Invocation.MyCommand.Path
}
Get-ChildItem (Get-ScriptDirectory) -Recurse `
| Where-Object { $_.Name -like "func_*" } `
| %{
. $_.FullName
}
Файл профиля
Microsoft.PowershellISE_profile.ps1 / Microsoft.Powershell_profile.ps1
$LocalLibraries = "C:\Local\Path\On\Disk\"
$env:PSModulePath = $env:PSModulePath + ";$LocalLibraries"
Приведенный выше код означает, что вам не нужно хранить модуль в том же месте, что и остальные (полезно в нашем случае, так как мы используем SVN дляи поделитесь нашими материалами с нашей командой).
Резюме
Напомним:
- Назовите файлы функций как "func_ {Verb} - {Namespace} {Существительное} .ps1 "
- Создайте папку верхнего уровня для хранения файла модуля psm1
- Создайте подпапки для классификации и хранения функций, например, Утилиты, Active Directory, Exchange и т. д.
- Создайте свой файл "psm1"
- Необязательно: Добавить добавитьРасположение модуля itional в вашем профиле
Мы ставим файлы "ps1" перед "func_", чтобы при завершении табуляции имени функции, если она находилась в том же каталоге, что и файл, она не путалась,Кроме того, мы добавляем пространство имен (инициалы компании и т. Д.) Впереди, чтобы имена наших функций не сталкивались с другими добавленными функциями.
Удобная функция перезагрузки
Еще один полезный совет:во время разработки может пригодиться определение псевдонима «перезагрузка» в нашем случае, который заставит модуль перезагрузиться.Это означает, что после того, как вы изменили файл, все, что вам нужно сделать, это набрать его, и он будет снова возвращен в память с вашими изменениями.
# Function to reload Module
Function int_ModuleNameModuleLoad {
Import-Module Module-Name -Force -WarningAction SilentlyContinue
Write-Host "Module-Name Reloaded"
}
# Set Aliases
If (-not(Get-Alias "reload" -ErrorAction SilentlyContinue)) {
New-Alias -Name reload -Value int_ModuleNameModuleLoad -Force
}
Причина, по которой я использую "int_" вместонаша нормальная структура имен такова, что эта функция находится в нашем профиле, и я считаю ее внутренней, а не полноценной функцией.
Надеюсь, это даст вам несколько хороших идей, она отлично сработала для нас!
-Адам