Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A szkriptmodul egy .psm1 bővítményben 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 a kód más rendszerekre való telepítésében, valamint a hatókörkezelés kezelésében. 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 MyPsScript.psm1 nevű szkript például egy MyPsScriptnevű könyvtárban van tárolva.
A modul könyvtárának a $Env:PSModulePathmegadott 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, és 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 bemutatják, hogyan hozhat létre PowerShell-modult.
PowerShell-szkript mentése
.psm1kiterjesztéssel. Használja ugyanazt a nevet a szkripthez és a könyvtárhoz, amelyben a szkriptet menti.A szkriptek
.psm1kiterjesztéssel való mentése azt jelenti, hogy használhatja a modul parancsmagjait, például Import-Module. 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 rendszerekre töltené be, majd pontozná be az aktív memóriába, ami nem skálázható megoldás. További információ: Windows PowerShell-modulismertetése. Alapértelmezés szerint, amikor a felhasználók importálják a.psm1fájlt, a szkript összes függvénye elérhető, de a változók nem.A cikk végén egy
Show-Calendarcímű PowerShell-példaszkript é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 }Ha szabályozni szeretné a felhasználók hozzáférését bizonyos függvényekhez vagy változókhoz, hívja meg Export-ModuleMember a szkript végén.
A cikk alján található példakódnak csak egy függvénye van, amely alapértelmezés szerint elérhető lesz. Javasoljuk azonban, hogy kifejezetten hívja fel, 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-CalendarA moduljegyzék használatával korlátozhatja az importált adatokat. További információ: PowerShell-modul importálása és PowerShell-moduljegyzékírása.
Ha vannak olyan moduljai, amelyeket a saját moduljának be kell töltenie, használhatja a
Import-Module, a modul tetején.A
Import-Moduleparancsmag egy célzott modult importál egy rendszerbe, és az eljárás egy későbbi szakaszában a saját modul telepítéséhez használható. A cikk alján található mintakód nem használ importálási modulokat. Ha mégis, akkor a fájl tetején jelennek meg, ahogy az a következő kódban is látható:Import-Module GenericModuleA modul PowerShell-súgórendszerben való leírásához 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, a modulhoz csomagolni kívánt tartalommal rendelkezik, használhat egy moduljegyzéket.
A moduljegyzék olyan fájl, amely más modulok nevét, könyvtárelrendezéseket, verzió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ére és üzembe helyezésére. 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
Import-Module.A modul telepítéséhez szükséges útvonalak a
$Env:PSModulePathglobális változóban találhatók. Egy modul rendszeren való mentésének gyakori elérési útja például%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.psm1fájlról van szó. Ha nem mentette a modult ezen útvonalak egyikére, meg kell adnia a modul helyét aImport-Moduleparancsban. Ellenkező esetben a PowerShell nem találja 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. A modul elérési útjáról további információt PowerShell-modul importálása és about_PSModulePathcímű témakörben talál.
Ha el szeretne távolítani egy modult az aktív szolgáltatásból az aktuális PowerShell-munkamenetben, használja Remove-Module.
Megjegyzés
Remove-Moduleeltá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 Show-Calendarnevű függvényt tartalmaz. Ez a függvény egy naptár vizuális ábrázolását jeleníti meg. A minta tartalmazza a PowerShell súgósztringeit a szinopszishoz, a leíráshoz, a paraméterértékekhez és a kódhoz. A modul importálásakor a Export-ModuleMember parancs gondoskodik arról, 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