PowerShell
Moduły, skrypty i funkcje
Szukaj…
Wprowadzenie
Moduły PowerShell dają możliwość rozszerzenia administratorowi systemu, DBA i deweloperowi. Czy to po prostu metoda dzielenia się funkcjami i skryptami.
Funkcje PowerShell mają na celu unikanie powtarzalnych kodów. Zobacz [Funkcje PS] [1] [1]: Funkcje PowerShell
Skrypty PowerShell służą do automatyzacji zadań administracyjnych, które składają się z powłoki wiersza polecenia i powiązanych poleceń cmdlet zbudowanych na platformie .NET Framework.
Funkcjonować
Funkcja to nazwany blok kodu, który służy do definiowania kodu wielokrotnego użytku, który powinien być łatwy w użyciu. Zazwyczaj jest on zawarty w skrypcie, aby pomóc w ponownym użyciu kodu (aby uniknąć duplikacji kodu) lub rozpowszechniany jako część modułu, aby był przydatny dla innych w wielu skryptach.
Scenariusze, w których funkcja może być przydatna:
- Oblicz średnią z grupy liczb
- Wygeneruj raport dla uruchomionych procesów
- Napisz funkcję, która sprawdza, czy komputer jest „zdrowy”, wysyłając polecenie ping do komputera i uzyskując dostęp do udziału
c$
Funkcje są tworzone za pomocą słowa kluczowego function
, po którym następuje nazwa pojedynczego słowa i blok skryptu zawierający kod, który należy wykonać, gdy wywoływana jest nazwa funkcji.
function NameOfFunction {
Your code
}
Próbny
function HelloWorld {
Write-Host "Greetings from PowerShell!"
}
Stosowanie:
> HelloWorld
Greetings from PowerShell!
Scenariusz
Skrypt to plik tekstowy z rozszerzeniem .ps1
który zawiera polecenia programu PowerShell, które zostaną wykonane po wywołaniu skryptu. Ponieważ skrypty są zapisywanymi plikami, można je łatwo przenosić między komputerami.
Skrypty są często pisane w celu rozwiązania określonego problemu, np .:
- Uruchom cotygodniowe zadanie konserwacyjne
- Aby zainstalować i skonfigurować rozwiązanie / aplikację na komputerze
Próbny
MyFirstScript.ps1:
Write-Host "Hello World!"
2+2
Możesz uruchomić skrypt, wprowadzając ścieżkę do pliku za pomocą:
- Ścieżka absolutna, np.
c:\MyFirstScript.ps1
- Ścieżka względna, np
.\MyFirstScript.ps1
jeśli bieżącym katalogiem konsoli PowerShell byłC:\
Stosowanie:
> .\MyFirstScript.ps1
Hello World!
4
Skrypt może również importować moduły, definiować własne funkcje itp.
MySecondScript.ps1:
function HelloWorld {
Write-Host "Greetings from PowerShell!"
}
HelloWorld
Write-Host "Let's get started!"
2+2
HelloWorld
Stosowanie:
> .\MySecondScript.ps1
Greetings from PowerShell!
Let's get started!
4
Greetings from PowerShell!
Moduł
Moduł to zbiór powiązanych funkcji wielokrotnego użytku (lub poleceń cmdlet), które można łatwo dystrybuować do innych użytkowników PowerShell i używać w wielu skryptach lub bezpośrednio w konsoli. Moduł jest zwykle zapisywany we własnym katalogu i składa się z:
- Co najmniej jeden plik kodu z rozszerzeniem
.psm1
zawierający funkcje lub zespoły binarne (.dll
) zawierające polecenia cmdlet - Manifest modułu
.psd1
opisujący nazwę modułów, wersję, autora, opis, jakie funkcje / cmdlety udostępnia itp. - Inne wymagania do działania, w tym. zależności, skrypty itp.
Przykłady modułów:
- Moduł zawierający funkcje / cmdlety, które wykonują statystyki dla zestawu danych
- Moduł do zapytań i konfiguracji baz danych
Aby ułatwić programowi PowerShell wyszukiwanie i importowanie modułu, często umieszcza się go w jednej ze znanych lokalizacji modułów programu PowerShell zdefiniowanych w $env:PSModulePath
.
Próbny
Lista modułów zainstalowanych w jednej ze znanych lokalizacji modułów:
Get-Module -ListAvailable
Zaimportuj moduł, np. Moduł Hyper-V
:
Import-Module Hyper-V
Wyświetl listę dostępnych poleceń w module, np. moduł 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
Zaawansowane funkcje
Zaawansowane funkcje zachowują się tak samo jak polecenia cmdlet. PowerShell ISE zawiera dwa szkielety zaawansowanych funkcji. Dostęp do nich można uzyskać za pomocą menu, edycji, fragmentów kodu lub Ctrl + J. (Począwszy od PS 3.0, nowsze wersje mogą się różnić)
Kluczowe rzeczy, które obejmują zaawansowane funkcje to:
- wbudowana, dostosowana pomoc dla funkcji, dostępna za pośrednictwem
Get-Help
- można użyć [CmdletBinding ()], dzięki czemu funkcja działa jak cmdlet
- rozbudowane opcje parametrów
Prosta wersja:
<#
.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
{
}
}
Pełna wersja:
<#
.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
{
}
}