Nem írok sűrűn PowerShell szkripteket, ezért van néhány olyan probléma, amibe gyakran belefutok. Íme a megoldásuk, hátha más is hasznát veszi:
Kommentezés
# Egysoros komment kettőskereszt után
<#
Ez egy
több soron
átnyúló megjegyzés
#>
Leírás
A Get-Help cmdlet által kiírandó leírás tartalmát a szkript elejére tett komment blokkban adhatjuk meg az alábbi formában:
<#
.SYNOPSIS
Rövid leírás...
.DESCRIPTION
Hosszú leírás...
.PARAMETER MyParam1
A MyParam1 paraméter leírása...
.PARAMETER MyParam2
A MyParam2 paraméter leírása...
.EXAMPLE
C:\PS> .\MyScript.ps1 –MyParam1 "egy"
Az első példa leírása...
.EXAMPLE
C:\PS> .\MyScript.ps1 –MyParam2 2012
A második példa leírása...
.NOTES
Egyéb megjegyzés, például szerző, dátum...
Author: György Balássy
Date: 2012.07.11.
#>
Bemeneti paraméterek
Egy szkript vagy függvény bemeneti paramétereit a Param kulcsszóval definiálhatjuk. A paramétereknek adhatunk alapértéket is:
Param(
$MyParam1,
$MyParam2 = 10
)
Paraméter validálás
A paramétereknél a .NET-es attribútumokhoz hasonló szintakszissal megadhatunk típust, illetve néhány kényszert is:
Param(
[parameter(Mandatory=$true)]
[string]
[ValidateScript({Test-Path $_ -PathType 'Container'})]
$MyParam1,
[parameter(Mandatory=$false)]
[int]
[ValidateRange(-1, 31)]
$MyParam2 = 10
)
Ezeken az attribútumokon kívül van még ValidateLength, ValidateCount, ValidatePattern, ValidateNotNull, ValidateNotNullOrEmpty is.
Mappa létezésének ellenőrzése
A Test-Path cmdlet segítségével ellenőrizhetjük, hogy egy vagy több mappa vagy fájl (általánosabban: útvonal) létezik-e, vagy akár csak azt, hogy a megadott útvonal érvényes-e (ld. –IsValid kapcsoló). A cmdlet $true értékkel tér vissza, ha az adott útvonal létezik:
if( $myPath -ne $null -and ( Test-Path $myPath ) -eq $true )
{
Remove-Item $myPath -Recurse
}
Szkript leállítása
Egy futó szkript leállítására használhatjuk az exit kulcsszót, ami után tetszőleges hibakódot megadhatunk. Ha hibajelzéssel akarjuk leállítani a szkriptet, akkor jobb a throw kulcsszót használni, ami után megadhatunk egy szöveges hibaüzenetet és ami 1 hibakóddal állítja le a szkript futását. Normál esetben a szkript 0 hibakóddal fejeződik be.
if( ( Test-Path $cmd ) -eq $false )
{
throw "A $cmd értéke nem megfelelő!"
}
Színes betűk a konzolra
Ha jobban el akarjuk különíteni a szkriptünk által kiírt üzeneteket a felhasznált cmdletek vagy külső programok üzeneteitől, akkor írhatunk színesen a konzolra:
Write-Host "Valami történik..." -ForegroundColor Green
Dátum formázása
Néha szükségünk van a mai dátumra, méghozzá valamilyen formátumban, amit előállíthatunk például így:
$now = Get-Date -format yyyyMMdd_HHmmss;
Kimenet elhallgattatása
A kimenet “némítására” parancssorban általában a >null átirányítást szoktuk használni, de tapasztalataim szerint ez egy PowerShell szkriptben nem mindig azt csinálja, amit szeretnénk. Ez esetben bátran használhatjuk az Out-Null cmdletet:
mkdir $targetDir | Out-Null
[System.Reflection.Assembly]::LoadWithPartialName("MyAssembly") | Out-Null
Module vagy snap-in betöltése
Találkoztam olyan PowerShell bővítménnyel, amit PowerShell 1.0 alatt snapinként, 2.0 alatt pedig modulként kellett betölteni. Szerencsére le tudjuk kérdezni a PowerShell verziószámát és megifelhetjük a betöltést:
if( $PSVersionTable.PSVersion.Major -ge 2 )
{
Import-Module MyModule
}
else
{
Add-PSSnapin MyModule
}
Lásd Using Modules and Snap-Ins.
SQL adatbázis mentése
SMO segítségével így menthetünk SQL adatbázist:
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMO")
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SmoExtended")
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.ConnectionInfo")
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SmoEnum")
$s = New-Object ("Microsoft.SqlServer.Management.Smo.Server") "(local)"
$b = New-Object ("Microsoft.SqlServer.Management.Smo.Backup")
$b.Action = "Database"
$b.BackupSetDescription = "Full Northwind backup"
$b.BackupSetName = "Northwind backup"
$b.Database = "Northwind"
$b.MediaDescription = "Disk"
$b.Devices.AddDevice("C:\Backup\MyBackup.bak", "File")
$b.SqlBackup($s)
IIS konfiguráció mentése
Az IIS konfiguráció mentéséhez használhatjuk az IIS PowerShell Snap-Int:
Import-Module WebAdministration # vagy Add-PSSnapin
Backup-WebConfiguration "MyBackupName"
Szövegfájl sorainak feldolgozása
Get-Content $filePath | Foreach-Object
{
# Sor feldolgozása a $_ változóval
}
A PowerShell megismeréséhez nagyon hasznos forrás Soós Tibor Windows PowerShell 2.0 rendszergazdáknak c. könyve.
Like this:
Like Loading...