Megosztás a következőn keresztül:


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 MyPsScriptvan tárolva.

A modul könyvtárának a következőben $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, 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.

  1. 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
    }
    
  2. 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.

  3. Ha olyan modulokkal rendelkezik, amelyeket a saját moduljának be kell töltenie, használhatja Import-Modulea 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
    
  4. 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.

  5. 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.

  6. 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 a Import-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.

  7. 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