POSH (aka PowerShell) – Funktsioonid

Märkasin, et minu töökeskonna SCCMis on Obsolete Clientide arv 36 ja tänu sellele hakkas uuenduste compliance langema. Võtsin obsolete hostide nimekirja ja koostasin excelis skripti, mis testib kõik hostid üle ja sülitab väljundi ühte txt faili kust näeb kohe ära, mis hostid võrgus kättesaadavad on ja millised mitte. Selle info alusel saab juba konkreetsemalt mõne masina ette võtta ja uurida, miks SCCM klient obsolete staatuses on ja teha vastavad parandused.

$space=" "
$hostname="16-CXC4511D0P"
$result= Test-NetConnection $hostname | Select-Object -ExpandProperty pingsucceeded
$hostname+$space+$result | Add-Content C:\Users\$env:username\Desktop\obsolete_hosts.txt
$hostname="14-8PY3P56"
$result= Test-NetConnection $hostname | Select-Object -ExpandProperty pingsucceeded
$hostname+$space+$result | Add-Content C:\Users\$env:username\Desktop\obsolete_hosts.txt
...etc

Juhuslikult jäi mulle ette artikkel Introduction to Advanced PowerShell Functions.

Excel ja POSH sobivad üsna hästi kokku, valemite abiga saab suvalise listi teha scriptiks ja siis copy & paste POSHi. Ühekordsete tegevuste puhul on selline lahendust isegi talutav. Pidevalt korduvate tegevuste puhul peaks koostama POSH funktsioone, mis hoiavad üsna tublisti edaspidi aega kokku. Loetud artiklist inspireerituna otsustasin proovida Excelis koostatud script muuta POSH funktsiooniks. Peale paari tunnist nokitsemist oli tulemus käes ja olin Excelist selle ülesande täitmisel vaba. Koostatud funktsioone saab vajadusel ka permanentselt powershelli sisse integreerida, mis on samuti suureks plussiks. Funktsioon ise kukkus välja selline:

Function Test-NetStatus 
{
 [CmdletBinding()]
 Param(
[Parameter(Mandatory=$true,ValueFromPipeLine)][String]$ComputerName)
Process 
 {
$aaa = "Host is "
$bbb = " --- "
$ccc = " -- "
$result = Test-Connection -ComputerName $ComputerName -Count 1 -Quiet -ErrorAction SilentlyContinue
If ($result -eq "True") {$result = "Online"}
Else {$result = "Offline"}
IF ($result -eq "Online") {Write-host $aaa$result$bbb$computername -ForegroundColor Green}
Else {Write-host $aaa$result$ccc$computername -ForegroundColor Red}
 }
}

PasteBin link

Kui see plokk powershelli sööta tekib uus käsk nimega “Test-NetStatus”. Funktsiooni koostamise ajal oli minu jaoks kõige olulisem, et funktsioon aktsepteeriks pipeline inputi st. saab sööta sisse korraga rohkem kui ühe hosti.

Näiteks on mu töölaual hostid.txt fail, järgneva sisuga:

127.0.0.1
227.0.0.1
8.8.8.8
err.ee
www.err.ee
www.neti.ee
www.neti.com
Test-PC

Nüüd söödan need hostid vastloodud funktsiooni sisse:

Get-Content "C:\Users\Taunov\Desktop\Hostid.txt" | Test-NetStatus

Skript ise-enesest on kiire ja tõhus ja pikalt tulemust ootama ei pea. Ehk on see kellegile veel abiks peale minu 🙂

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s