PowerShell
Moduły PowerShell
Szukaj…
Wprowadzenie
Począwszy od wersji PowerShell 2.0, programiści mogą tworzyć moduły PowerShell. Moduły PowerShell zawierają zestaw wspólnych funkcji. Na przykład istnieją specyficzne dla dostawcy moduły PowerShell, które zarządzają różnymi usługami w chmurze. Istnieją również ogólne moduły PowerShell, które współdziałają z usługami mediów społecznościowych i wykonują typowe zadania programistyczne, takie jak kodowanie Base64, praca z potokami nazwanymi i inne.
Moduły mogą wyświetlać aliasy poleceń, funkcje, zmienne, klasy i wiele innych.
Utwórz manifest modułu
@{
RootModule = 'MyCoolModule.psm1'
ModuleVersion = '1.0'
CompatiblePSEditions = @('Core')
GUID = '6b42c995-67da-4139-be79-597a328056cc'
Author = 'Bob Schmob'
CompanyName = 'My Company'
Copyright = '(c) 2017 Administrator. All rights reserved.'
Description = 'It does cool stuff.'
FunctionsToExport = @()
CmdletsToExport = @()
VariablesToExport = @()
AliasesToExport = @()
DscResourcesToExport = @()
}
Każdy dobry moduł PowerShell ma manifest modułu. Manifest modułu po prostu zawiera metadane dotyczące modułu PowerShell i nie definiuje faktycznej zawartości modułu.
Plik manifestu to plik skryptu PowerShell z rozszerzeniem .psd1
, który zawiera .psd1
HashTable. Tabela HashTable w manifeście musi zawierać określone klucze, aby program PowerShell poprawnie zinterpretował go jako plik modułu PowerShell.
Powyższy przykład przedstawia listę kluczowych kluczy HashTable, które tworzą manifest modułu, ale istnieje wiele innych. Polecenie New-ModuleManifest
pomaga utworzyć nowy szkielet manifestu modułu.
Prosty przykład modułu
function Add {
[CmdletBinding()]
param (
[int] $x
, [int] $y
)
return $x + $y
}
Export-ModuleMember -Function Add
Jest to prosty przykład tego, jak może wyglądać plik modułu skryptu PowerShell. Ten plik MyCoolModule.psm1
i jest przywoływany z pliku manifestu modułu (.psd1). Zauważysz, że polecenie Export-ModuleMember
pozwala nam określić, które funkcje w module chcemy „wyeksportować” lub udostępnić użytkownikowi modułu. Niektóre funkcje będą przeznaczone tylko do Export-ModuleMember
wewnętrznego i nie powinny być ujawniane, więc zostałyby pominięte w wywołaniu Export-ModuleMember
.
Eksportowanie zmiennej z modułu
$FirstName = 'Bob'
Export-ModuleMember -Variable FirstName
Aby wyeksportować zmienną z modułu, należy użyć Export-ModuleMember
polecenia z -Variable
parametru. Pamiętaj jednak, że jeśli zmienna nie jest również jawnie eksportowana do pliku manifestu modułu (.psd1), wówczas zmienna nie będzie widoczna dla konsumenta modułu. Pomyśl o module manifestującym się jak o „strażniku”. Jeśli funkcja lub zmienna nie jest dozwolona w manifeście modułu, nie będzie widoczna dla użytkownika modułu.
Uwaga: eksport zmiennej jest podobny do upublicznienia pola w klasie. Nie jest wskazane. Lepiej byłoby udostępnić funkcję, aby uzyskać pole i funkcję, aby ustawić pole.
Strukturyzacja modułów PowerShell
Zamiast definiować wszystkie funkcje w jednym pliku modułu skryptu PowerShell .psm1
, możesz podzielić swoją funkcję na pojedyncze pliki. Możesz następnie pobrać te pliki z pliku modułu skryptu, co w zasadzie traktuje je tak, jakby były częścią .psm1
pliku .psm1
.
Rozważ tę strukturę katalogów modułu:
\MyCoolModule
\Functions
Function1.ps1
Function2.ps1
Function3.ps1
MyCoolModule.psd1
MyCoolModule.psm1
W pliku MyCoolModule.psm1
możesz wstawić następujący kod:
Get-ChildItem -Path $PSScriptRoot\Functions |
ForEach-Object -Process { . $PSItem.FullName }
Spowodowałoby to dot-source poszczególnych plików funkcji do pliku modułu .psm1
.
Lokalizacja modułów
PowerShell szuka modułów w katalogach wymienionych w $ Env: PSModulepath.
Moduł o nazwie foo , w folderze o nazwie foo zostanie znaleziony wraz z Import-Module foo
W tym folderze PowerShell wyszuka manifest modułu (foo.psd1), plik modułu (foo.psm1), bibliotekę DLL (foo.dll).
Widoczność członka modułu
Domyślnie tylko funkcje zdefiniowane w module są widoczne poza modułem. Innymi słowy, jeśli zdefiniujesz zmienne i aliasy w module, nie będą one dostępne poza kodem modułu.
Aby zastąpić to zachowanie, możesz użyć Export-ModuleMember
cmdlet Export-ModuleMember
. Ma parametry zwane -Function
, -Variable
i -Alias
które pozwalają dokładnie określić, której członkowie są eksportowane.
Należy pamiętać, że jeśli użyjesz Export-ModuleMember
, widoczne będą tylko określone elementy.