PowerShell
Modules, scripts en functies
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-consoleC:\
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
{
}
}