PowerShell-szkriptmodul írása
A szkriptmodul bármely, a bővítményben .psm1
mentett érvényes PowerShell-szkript. Ez a bővítmény lehetővé teszi, hogy a PowerShell-motor szabályokat és modulparancsmagokat használjon a fájlon. A legtöbb ilyen képesség segít más rendszereken telepíteni a kódot, valamint kezelni a hatókörkezelést. Használhat egy moduljegyzékfájlt is, amely összetettebb telepítéseket és megoldásokat ír le.
PowerShell-szkriptmodul írása
Szkriptmodul létrehozásához mentsen egy érvényes PowerShell-szkriptet egy .psm1
fájlba. A szkriptnek és a könyvtárnak, ahol a tároló található, ugyanazt a nevet kell használnia. Egy elnevezett MyPsScript.psm1
szkript például egy könyvtárban MyPsScript
van tárolva.
A modul könyvtárának a következőben $env:PSModulePath
megadott elérési úton kell lennie: . A modul könyvtára tartalmazhat minden olyan erőforrást, amely a szkript futtatásához szükséges, valamint egy moduljegyzékfájlt, amely leírja a PowerShellnek a modul működését.
Alapszintű PowerShell-modul létrehozása
Az alábbi lépések a PowerShell-modulok létrehozását írják le.
PowerShell-szkript mentése bővítménnyel
.psm1
. Használja ugyanazt a nevet a szkripthez és a könyvtárhoz, ahová a szkriptet mentette.Ha egy szkriptet a
.psm1
bővítménnyel ment, az azt jelenti, hogy használhatja a modul parancsmagjait, például az Import-Module parancsmagokat. A modul parancsmagjai elsősorban azért léteznek, hogy importálhassa és exportálhassa a kódot más felhasználók rendszereibe. A másik megoldás az lenne, ha a kódot más rendszerekbe töltené be, majd pontozná be az aktív memóriába, ami nem skálázható megoldás. További információ: A Windows PowerShell modul ismertetése. Alapértelmezés szerint, amikor a felhasználók importálják a.psm1
fájlt, a szkript összes függvénye elérhető, de a változók nem.A cikk végén egy powershell-példaszkript
Show-Calendar
érhető el.function Show-Calendar { param( [DateTime] $start = [DateTime]::Today, [DateTime] $end = $start, $firstDayOfWeek, [int[]] $highlightDay, [string[]] $highlightDate = [DateTime]::Today.ToString('yyyy-MM-dd') ) #actual code for the function goes here see the end of the topic for the complete code sample }
Bizonyos függvényekhez vagy változókhoz való felhasználói hozzáférés szabályozásához hívja meg az Export-ModuleMember függvényt a szkript végén.
A cikk alján található példakód csak egy függvénnyel rendelkezik, amely alapértelmezés szerint elérhető lesz. Javasoljuk azonban, hogy explicit módon hívja meg, hogy mely függvényeket szeretné elérhetővé tenni, az alábbi kódban leírtak szerint:
function Show-Calendar { } Export-ModuleMember -Function Show-Calendar
A moduljegyzék használatával korlátozhatja az importált tartalmakat. További információ: PowerShell-modul importálása és PowerShell-moduljegyzék írása.
Ha olyan modulokkal rendelkezik, amelyeket a saját moduljának be kell töltenie, használhatja
Import-Module
a modul tetején.A
Import-Module
parancsmag egy célzott modult importál egy rendszerbe, és az eljárás egy későbbi pontján használhatja a saját modul telepítéséhez. A cikk alján található mintakód nem használ importálási modulokat. Ha azonban igen, akkor a fájl tetején jelennek meg, ahogy az a következő kódban is látható:Import-Module GenericModule
Ha le szeretné írni a modult a PowerShell súgórendszerében, használhat szabványos súgó megjegyzéseket a fájlban, vagy létrehozhat egy további súgófájlt.
A cikk alján található kódminta a megjegyzésekben található súgóinformációkat tartalmazza. Kibontott XML-fájlokat is írhat, amelyek további súgótartalmakat tartalmaznak. További információ: Súgó írása Windows PowerShell modulokhoz.
Ha további modulokkal, XML-fájlokkal vagy más tartalommal rendelkezik, amelyeket be szeretne csomagolni a modulba, használhatja a moduljegyzéket.
A moduljegyzék olyan fájl, amely más modulok nevét, könyvtárelrendezéseket, verziószámozási számokat, szerzői adatokat és egyéb információkat tartalmaz. A PowerShell a modul jegyzékfájlját használja a megoldás rendszerezéséhez és üzembe helyezéséhez. További információ: PowerShell-moduljegyzék írása.
A modul telepítéséhez és futtatásához mentse a modult a megfelelő PowerShell-elérési utak egyikére, és használja a következőt
Import-Module
:A modul telepítési útvonalai a
$env:PSModulePath
globális változóban találhatók. Egy modul rendszeren való mentésének gyakori útvonala például a következő:%SystemRoot%/users/<user>/Documents/PowerShell/Modules/<moduleName>
. Mindenképpen hozzon létre egy könyvtárat a modulhoz, amely ugyanazt a nevet használja, mint a szkriptmodul, még akkor is, ha csak egyetlen.psm1
fájlról van szó. Ha nem mentette a modult ezen útvonalak egyikére, meg kell adnia a modul helyét aImport-Module
parancsban. Ellenkező esetben a PowerShell nem találná meg a modult.Megjegyzés
A PowerShell 3.0-tól kezdve, ha a modult a PowerShell-modul egyik elérési útján helyezte el, nem kell explicit módon importálnia. A modul automatikusan betöltődik, amikor egy felhasználó meghívja a függvényt. További információ a modul elérési útjáról: PowerShell-modul importálása és about_PSModulePath.
Ha el szeretne távolítani egy modult az aktív szolgáltatásból az aktuális PowerShell-munkamenetben, használja a Remove-Module parancsot.
Megjegyzés
Remove-Module
eltávolít egy modult az aktuális PowerShell-munkamenetből, de nem távolítja el a modult, és nem törli a modul fájljait.
példakód Show-Calendar
Az alábbi példa egy szkriptmodul, amely egyetlen függvényt tartalmaz .Show-Calendar
Ez a függvény egy naptár vizuális ábrázolását jeleníti meg. A minta tartalmazza a PowerShell súgósztringjait a szinopszishoz, a leíráshoz, a paraméterértékekhez és a kódhoz. A modul importálásakor a Export-ModuleMember
parancs biztosítja, hogy a Show-Calendar
függvényt a rendszer modultagként exportálja.
<#
.Synopsis
Displays a visual representation of a calendar.
.Description
Displays a visual representation of a calendar. This function supports multiple months
and lets you highlight specific date ranges or days.
.Parameter Start
The first month to display.
.Parameter End
The last month to display.
.Parameter FirstDayOfWeek
The day of the month on which the week begins.
.Parameter HighlightDay
Specific days (numbered) to highlight. Used for date ranges like (25..31).
Date ranges are specified by the Windows PowerShell range syntax. These dates are
enclosed in square brackets.
.Parameter HighlightDate
Specific days (named) to highlight. These dates are surrounded by asterisks.
.Example
# Show a default display of this month.
Show-Calendar
.Example
# Display a date range.
Show-Calendar -Start "March, 2010" -End "May, 2010"
.Example
# Highlight a range of days.
Show-Calendar -HighlightDay (1..10 + 22) -HighlightDate "2008-12-25"
#>
function Show-Calendar {
param(
[DateTime] $start = [DateTime]::Today,
[DateTime] $end = $start,
$firstDayOfWeek,
[int[]] $highlightDay,
[string[]] $highlightDate = [DateTime]::Today.ToString('yyyy-MM-dd')
)
## Determine the first day of the start and end months.
$start = New-Object DateTime $start.Year,$start.Month,1
$end = New-Object DateTime $end.Year,$end.Month,1
## Convert the highlighted dates into real dates.
[DateTime[]] $highlightDate = [DateTime[]] $highlightDate
## Retrieve the DateTimeFormat information so that the
## calendar can be manipulated.
$dateTimeFormat = (Get-Culture).DateTimeFormat
if($firstDayOfWeek)
{
$dateTimeFormat.FirstDayOfWeek = $firstDayOfWeek
}
$currentDay = $start
## Process the requested months.
while($start -le $end)
{
## Return to an earlier point in the function if the first day of the month
## is in the middle of the week.
while($currentDay.DayOfWeek -ne $dateTimeFormat.FirstDayOfWeek)
{
$currentDay = $currentDay.AddDays(-1)
}
## Prepare to store information about this date range.
$currentWeek = New-Object PsObject
$dayNames = @()
$weeks = @()
## Continue processing dates until the function reaches the end of the month.
## The function continues until the week is completed with
## days from the next month.
while(($currentDay -lt $start.AddMonths(1)) -or
($currentDay.DayOfWeek -ne $dateTimeFormat.FirstDayOfWeek))
{
## Determine the day names to use to label the columns.
$dayName = "{0:ddd}" -f $currentDay
if($dayNames -notcontains $dayName)
{
$dayNames += $dayName
}
## Pad the day number for display, highlighting if necessary.
$displayDay = " {0,2} " -f $currentDay.Day
## Determine whether to highlight a specific date.
if($highlightDate)
{
$compareDate = New-Object DateTime $currentDay.Year,
$currentDay.Month,$currentDay.Day
if($highlightDate -contains $compareDate)
{
$displayDay = "*" + ("{0,2}" -f $currentDay.Day) + "*"
}
}
## Otherwise, highlight as part of a date range.
if($highlightDay -and ($highlightDay[0] -eq $currentDay.Day))
{
$displayDay = "[" + ("{0,2}" -f $currentDay.Day) + "]"
$null,$highlightDay = $highlightDay
}
## Add the day of the week and the day of the month as note properties.
$currentWeek | Add-Member NoteProperty $dayName $displayDay
## Move to the next day of the month.
$currentDay = $currentDay.AddDays(1)
## If the function reaches the next week, store the current week
## in the week list and continue.
if($currentDay.DayOfWeek -eq $dateTimeFormat.FirstDayOfWeek)
{
$weeks += $currentWeek
$currentWeek = New-Object PsObject
}
}
## Format the weeks as a table.
$calendar = $weeks | Format-Table $dayNames -AutoSize | Out-String
## Add a centered header.
$width = ($calendar.Split("`n") | Measure-Object -Maximum Length).Maximum
$header = "{0:MMMM yyyy}" -f $start
$padding = " " * (($width - $header.Length) / 2)
$displayCalendar = " `n" + $padding + $header + "`n " + $calendar
$displayCalendar.TrimEnd()
## Move to the next month.
$start = $start.AddMonths(1)
}
}
Export-ModuleMember -Function Show-Calendar
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: