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.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow