PowerShell
Moduli, script e funzioni
Ricerca…
introduzione
I moduli PowerShell portano l'estendibilità all'amministratore di sistemi, DBA e sviluppatore. Che si tratti semplicemente di un metodo per condividere funzioni e script.
Le funzioni di Powershell servono per evitare codici ripetitivi. Fare riferimento a [Funzioni PS] [1] [1]: Funzioni PowerShell
Gli script di PowerShell vengono utilizzati per automatizzare le attività di amministrazione che comprendono shell della riga di comando e cmdlet associati creati su .NET Framework.
Funzione
Una funzione è un blocco di codice denominato che viene utilizzato per definire il codice riutilizzabile che dovrebbe essere facile da usare. Di solito è incluso in uno script per aiutare a riutilizzare il codice (per evitare il codice duplicato) o distribuito come parte di un modulo per renderlo utile per gli altri in più script.
Scenari in cui una funzione potrebbe essere utile:
- Calcola la media di un gruppo di numeri
- Genera un report per i processi in esecuzione
- Scrivi una funzione che verifica che un computer sia "sano" eseguendo il ping del computer e accedendo a
c$
-share
Le funzioni vengono create utilizzando la parola chiave function
, seguita da un nome di una sola parola e da un blocco di script contenente il codice da eseguire quando viene chiamato il nome della funzione.
function NameOfFunction {
Your code
}
dimostrazione
function HelloWorld {
Write-Host "Greetings from PowerShell!"
}
Uso:
> HelloWorld
Greetings from PowerShell!
copione
Uno script è un file di testo con l'estensione .ps1
che contiene i comandi di PowerShell che verranno eseguiti quando viene chiamato lo script. Poiché gli script sono file salvati, sono facili da trasferire tra computer.
Gli script sono spesso scritti per risolvere un problema specifico, es .:
- Esegui un'attività di manutenzione settimanale
- Per installare e configurare una soluzione / applicazione su un computer
dimostrazione
MyFirstScript.ps1:
Write-Host "Hello World!"
2+2
Puoi eseguire uno script inserendo il percorso del file usando un:
- Percorso assoluto, es.
c:\MyFirstScript.ps1
- Percorso relativo, ex
.\MyFirstScript.ps1
se la directory corrente della console PowerShell eraC:\
Uso:
> .\MyFirstScript.ps1
Hello World!
4
Uno script può anche importare moduli, definirne le proprie funzioni, ecc.
MySecondScript.ps1:
function HelloWorld {
Write-Host "Greetings from PowerShell!"
}
HelloWorld
Write-Host "Let's get started!"
2+2
HelloWorld
Uso:
> .\MySecondScript.ps1
Greetings from PowerShell!
Let's get started!
4
Greetings from PowerShell!
Modulo
Un modulo è una raccolta di funzioni riutilizzabili correlate (o cmdlet) che possono essere facilmente distribuite ad altri utenti PowerShell e utilizzate in più script o direttamente nella console. Un modulo viene solitamente salvato nella propria directory ed è composto da:
- Uno o più file di codice con estensione
.psm1
contenente funzioni o assembly binari (.dll
) contenenti cmdlet - Un modulo manifest
.psd1
descrive il nome, la versione, l'autore, la descrizione dei moduli, quali funzioni / cmdlet fornisce ecc. - Altri requisiti per farlo funzionare incl. dipendenze, script ecc.
Esempi di moduli:
- Un modulo contenente funzioni / cmdlet che eseguono statistiche su un set di dati
- Un modulo per interrogare e configurare database
Per semplificare il reperimento e l'importazione di un modulo da parte di PowerShell, questo viene spesso inserito in uno dei percorsi del modulo PowerShell noti, definiti in $env:PSModulePath
.
dimostrazione
Elenca i moduli che vengono installati in una delle posizioni dei moduli conosciute:
Get-Module -ListAvailable
Importa un modulo, es. Modulo Hyper-V
:
Import-Module Hyper-V
Elenca i comandi disponibili in un modulo, es. il modulo Microsoft.PowerShell.Archive
> 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
Funzioni avanzate
Le funzioni avanzate si comportano allo stesso modo dei cmdlet. PowerShell ISE include due scheletri di funzioni avanzate. Accedi a questi tramite il menu, modifica, frammenti di codice o Ctrl + J. (A partire da PS 3.0, le versioni successive potrebbero differire)
Le cose chiave che includono le funzioni avanzate sono
- Guida integrata e personalizzata per la funzione, accessibile tramite
Get-Help
- può usare [CmdletBinding ()] che fa sì che la funzione si comporti come un cmdlet
- ampie opzioni di parametri
Versione semplice:
<#
.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
{
}
}
Versione completa:
<#
.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
{
}
}