Zoeken…


Invoering

PowerShell-modules bieden uitbreidingsmogelijkheden voor de systeembeheerder, DBA en ontwikkelaar. Of het nu gewoon is als een methode om functies en scripts te delen.

Powershell-functies zijn om herhalende codes te voorkomen. Raadpleeg [PS-functies] [1] [1]: PowerShell-functies

PowerShell-scripts worden gebruikt voor het automatiseren van beheertaken die bestaan uit opdrachtregel shell en bijbehorende cmdlets gebouwd bovenop .NET Framework.

Functie

Een functie is een benoemd codeblok dat wordt gebruikt om herbruikbare code te definiëren die gemakkelijk te gebruiken moet zijn. Het wordt meestal opgenomen in een script om code te helpen hergebruiken (om dubbele code te voorkomen) of verspreid als onderdeel van een module om het bruikbaar te maken voor anderen in meerdere scripts.

Scenario's waarin een functie nuttig kan zijn:

  • Bereken het gemiddelde van een groep getallen
  • Genereer een rapport voor lopende processen
  • Schrijf een functie die test of een computer 'gezond' is door de computer te pingen en toegang te krijgen tot de c$ -share

Functies worden gemaakt met behulp van het function , gevolgd door de naam van een enkel woord en een scriptblok met de code die moet worden uitgevoerd wanneer de functienaam wordt aangeroepen.

function NameOfFunction {
    Your code
}

demonstratie

function HelloWorld {
    Write-Host "Greetings from PowerShell!"
}

Gebruik:

> HelloWorld
Greetings from PowerShell!

Script

Een script is een tekstbestand met de bestandsextensie .ps1 dat PowerShell-opdrachten bevat die worden uitgevoerd wanneer het script wordt aangeroepen. Omdat scripts opgeslagen bestanden zijn, zijn ze gemakkelijk over te dragen tussen computers.

Scripts worden vaak geschreven om een specifiek probleem op te lossen, bijvoorbeeld:

  • Voer een wekelijkse onderhoudstaak uit
  • Een oplossing / toepassing op een computer installeren en configureren

demonstratie

MyFirstScript.ps1:

Write-Host "Hello World!"
2+2

U kunt een script uitvoeren door het pad naar het bestand in te voeren met een:

  • Absoluut pad, ex. c:\MyFirstScript.ps1
  • Relatief pad, bijv .\MyFirstScript.ps1 als de huidige map van uw PowerShell-console C:\

Gebruik:

> .\MyFirstScript.ps1
Hello World!
4

Een script kan ook modules importeren, eigen functies definiëren, enz.

MySecondScript.ps1:

function HelloWorld {
    Write-Host "Greetings from PowerShell!"
}

HelloWorld
Write-Host "Let's get started!"
2+2
HelloWorld

Gebruik:

> .\MySecondScript.ps1
Greetings from PowerShell!
Let's get started!
4
Greetings from PowerShell!

module

Een module is een verzameling gerelateerde herbruikbare functies (of cmdlets) die gemakkelijk kunnen worden gedistribueerd naar andere PowerShell-gebruikers en kunnen worden gebruikt in meerdere scripts of rechtstreeks in de console. Een module wordt meestal opgeslagen in een eigen map en bestaat uit:

  • Een of meer .psm1 met de .psm1 bestandsextensie met functies of binaire samenstellingen ( .dll ) met cmdlets
  • Een module-manifest .psd1 dat de .psd1 , versie, auteur, beschrijving beschrijft, welke functies / cmdlets het biedt etc.
  • Andere vereisten om te werken incl. afhankelijkheden, scripts etc.

Voorbeelden van modules:

  • Een module met functies / cmdlets die statistieken over een gegevensset uitvoeren
  • Een module voor het opvragen en configureren van databases

Om het voor PowerShell gemakkelijk te maken om een module te vinden en te importeren, wordt deze vaak op een van de bekende PowerShell- $env:PSModulePath gedefinieerd in $env:PSModulePath .

demonstratie

Lijst modules die zijn geïnstalleerd op een van de bekende module-locaties:

Get-Module -ListAvailable

Een module importeren, bijv. Hyper-V module:

Import-Module Hyper-V

Lijst beschikbare opdrachten in een module, bijv. de Microsoft.PowerShell.Archive module

> Import-Module Microsoft.PowerShell.Archive
> Get-Command -Module Microsoft.PowerShell.Archive

CommandType Name             Version Source                      
----------- ----             ------- ------                      
Function    Compress-Archive 1.0.1.0 Microsoft.PowerShell.Archive
Function    Expand-Archive   1.0.1.0 Microsoft.PowerShell.Archive

Geavanceerde functies

Geavanceerde functies gedragen zich op dezelfde manier als cmdlets. De PowerShell ISE bevat twee skeletten met geavanceerde functies. Open deze via het menu, bewerken, codefragmenten of door Ctrl + J. (Vanaf PS 3.0 kunnen latere versies verschillen)

Belangrijke dingen die geavanceerde functies omvatten, zijn

  • ingebouwde, aangepaste hulp voor de functie, toegankelijk via Get-Help
  • kan [CmdletBinding ()] gebruiken waardoor de functie als een cmdlet werkt
  • uitgebreide parameteropties

Eenvoudige versie:

<#
.Synopsis
   Short description
.DESCRIPTION
   Long description
.EXAMPLE
   Example of how to use this cmdlet
.EXAMPLE
   Another example of how to use this cmdlet
#>
function Verb-Noun
{
    [CmdletBinding()]
    [OutputType([int])]
    Param
    (
        # Param1 help description
        [Parameter(Mandatory=$true,
                   ValueFromPipelineByPropertyName=$true,
                   Position=0)]
        $Param1,

        # Param2 help description
        [int]
        $Param2
    )

    Begin
    {
    }
    Process
    {
    }
    End
    {
    }
}

Volledige versie:

<#
.Synopsis
   Short description
.DESCRIPTION
   Long description
.EXAMPLE
   Example of how to use this cmdlet
.EXAMPLE
   Another example of how to use this cmdlet
.INPUTS
   Inputs to this cmdlet (if any)
.OUTPUTS
   Output from this cmdlet (if any)
.NOTES
   General notes
.COMPONENT
   The component this cmdlet belongs to
.ROLE
   The role this cmdlet belongs to
.FUNCTIONALITY
   The functionality that best describes this cmdlet
#>
function Verb-Noun
{
    [CmdletBinding(DefaultParameterSetName='Parameter Set 1', 
                  SupportsShouldProcess=$true, 
                  PositionalBinding=$false,
                  HelpUri = 'http://www.microsoft.com/',
                  ConfirmImpact='Medium')]
    [OutputType([String])]
    Param
    (
        # Param1 help description
        [Parameter(Mandatory=$true, 
                   ValueFromPipeline=$true,
                   ValueFromPipelineByPropertyName=$true, 
                   ValueFromRemainingArguments=$false, 
                   Position=0,
                   ParameterSetName='Parameter Set 1')]
        [ValidateNotNull()]
        [ValidateNotNullOrEmpty()]
        [ValidateCount(0,5)]
        [ValidateSet("sun", "moon", "earth")]
        [Alias("p1")] 
        $Param1,

        # Param2 help description
        [Parameter(ParameterSetName='Parameter Set 1')]
        [AllowNull()]
        [AllowEmptyCollection()]
        [AllowEmptyString()]
        [ValidateScript({$true})]
        [ValidateRange(0,5)]
        [int]
        $Param2,

        # Param3 help description
        [Parameter(ParameterSetName='Another Parameter Set')]
        [ValidatePattern("[a-z]*")]
        [ValidateLength(0,15)]
        [String]
        $Param3
    )

    Begin
    {
    }
    Process
    {
        if ($pscmdlet.ShouldProcess("Target", "Operation"))
        {
        }
    }
    End
    {
    }
}


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow