Windows PowerShell ndi chiyani ndipo imagwiritsidwa ntchito bwanji? Gawo 4: Kugwira ntchito ndi zinthu, makalasi anu

Windows PowerShell ndi chiyani ndipo imagwiritsidwa ntchito bwanji? Gawo 4: Kugwira ntchito ndi zinthu, makalasi anu

Kutulutsa mawu kwa malamulo pazenera lomasulira la PowerShell ndi njira yokhayo yowonetsera chidziwitso mu mawonekedwe oyenera kuzindikira kwa anthu. Kwenikweni Lachitatu wolunjika kugwira ntchito ndi zinthu: cmdlets ndi ntchito zimawalandira ngati zolowera ndi anabwerera potuluka, ndi mitundu yosinthika yomwe ilipo molumikizana komanso muzolemba zimatengera makalasi a .NET. M'nkhani yachinayi ya mndandanda, tiphunzira kugwira ntchito ndi zinthu mwatsatanetsatane.

M'ndandanda wazopezekamo:

Zinthu mu PowerShell
Kuwona kapangidwe ka zinthu
Kusefa zinthu
Kusanja zinthu
Kusankha zinthu ndi zigawo zake
ForEach-Object, Gulu-Object ndi Measure-Object
Kupanga zinthu za .NET ndi COM (Chinthu Chatsopano)
Kuyimbira Njira Zokhazikika
Lembani PSCustomObject
Kupanga Makalasi Anu Omwe

Zinthu mu PowerShell

Tikumbukenso kuti chinthu ndi kusonkhanitsa deta minda (katundu, zochitika, etc.) ndi njira pokonza izo (njira). Mapangidwe ake amatchulidwa ndi mtundu, womwe nthawi zambiri umachokera ku makalasi omwe amagwiritsidwa ntchito pa nsanja yogwirizana ya .NET Core. Ndizothekanso kugwira ntchito ndi zinthu za COM, CIM (WMI) ndi ADSI. Katundu ndi njira zimafunikira kuti muzichita zinthu zosiyanasiyana pa data; Kuphatikiza apo, mu PowerShell, zinthu zitha kuperekedwa ngati mikangano ku ntchito ndi ma cmdlets, kugawa zomwe zimafunikira pazosintha, komanso palinso. command composition mechanism (conveyor kapena pipeline). Lamulo lililonse mupaipi limapereka zotsatira zake kwa lotsatira motsatira, chinthu ndi chinthu. Pokonza, mutha kugwiritsa ntchito ma cmdlets ophatikizidwa kapena kupanga anu zida zapamwambakuchita zosintha zosiyanasiyana ndi zinthu zomwe zili mupaipi: kusefa, kusanja, kupanga magulu, ngakhale kusintha mawonekedwe awo. Kutumiza deta mu fomu iyi kuli ndi ubwino waukulu: gulu lolandira siliyenera kusiyanitsa mtsinje wa byte (zolemba), zidziwitso zonse zofunika zimachotsedwa mosavuta poyitana katundu ndi njira zoyenera.

Kuwona kapangidwe ka zinthu

Mwachitsanzo, tiyeni tiyendetse Get-Process cmdlet, yomwe imakupatsani mwayi wodziwa zambiri zamayendedwe omwe akuyenda mudongosolo:

Windows PowerShell ndi chiyani ndipo imagwiritsidwa ntchito bwanji? Gawo 4: Kugwira ntchito ndi zinthu, makalasi anu

Iwonetsa zolemba zina zojambulidwa zomwe sizipereka lingaliro lililonse lazinthu zomwe zabwezedwa ndi njira zawo. Kuti tikonze zotuluka, tiyenera kuphunzira momwe tingayang'anire kapangidwe kazinthu, ndipo Get-Member cmdlet itithandiza ndi izi:

Get-Process | Get-Member

Windows PowerShell ndi chiyani ndipo imagwiritsidwa ntchito bwanji? Gawo 4: Kugwira ntchito ndi zinthu, makalasi anu

Apa tikuwona kale mtundu ndi kapangidwe kake, ndipo mothandizidwa ndi magawo owonjezera, titha, mwachitsanzo, kuwonetsa zinthu zomwe zikuphatikizidwa muzolowera:

Get-Process | Get-Member -MemberType Property

Chidziwitsochi chidzafunika kuthetsa mavuto a kayendetsedwe ka kayendetsedwe ka kayendetsedwe kake kapena kulemba zolemba zanu: mwachitsanzo, kuti mudziwe zambiri zokhudza njira zopachikidwa pogwiritsa ntchito katundu Woyankha.

Kusefa zinthu

PowerShell imalola kuti zinthu zomwe zimakwaniritsa vuto linalake zidutse paipi:

Where-Object { блок сценария }

Chotsatira chotsatira script block mkati mwa makolo ayenera kukhala mtengo wa boolean. Ngati zili zoona ($zoona), chinthu chomwe chimalowetsedwa ku Where-Object cmdlet chidzadutsa paipi, apo ayi ($false) chidzachotsedwa. Mwachitsanzo, tiyeni tiwonetse mndandanda wa ntchito zoyimitsidwa za Windows Server, i.e. omwe katundu wawo wakhazikitsidwa kuti "Ayimitsidwa":

Get-Service | Where-Object {$_.Status -eq "Stopped"}

Windows PowerShell ndi chiyani ndipo imagwiritsidwa ntchito bwanji? Gawo 4: Kugwira ntchito ndi zinthu, makalasi anu

Apanso tikuwona chithunzithunzi cha malemba, koma ngati mukufuna kumvetsetsa mtundu ndi mawonekedwe a mkati mwa zinthu zomwe zimadutsa paipi sizovuta:

Get-Service | Where-Object {$_.Status -eq "Stopped"} | Get-Member

Windows PowerShell ndi chiyani ndipo imagwiritsidwa ntchito bwanji? Gawo 4: Kugwira ntchito ndi zinthu, makalasi anu

Kusanja zinthu

Pokonza mapaipi a zinthu, nthawi zambiri pamafunika kusanja. The Sort-Object cmdlet imaperekedwa mayina a katundu (makiyi osankhira) ndikubweza zinthu zoyendetsedwa ndi mtengo wawo. Ndiosavuta kukonza zomwe zikuyenda ndi nthawi ya CPU (cpu katundu):

Get-Process | Sort-Object –Property cpu

The -Property parameter ikhoza kusiyidwa poyitana Sort-Object cmdlet; imagwiritsidwa ntchito mwachisawawa. Kuti musinthe mobwerera, gwiritsani ntchito -Descending parameter:

Get-Process | Sort-Object cpu -Descending

Windows PowerShell ndi chiyani ndipo imagwiritsidwa ntchito bwanji? Gawo 4: Kugwira ntchito ndi zinthu, makalasi anu

Kusankha zinthu ndi zigawo zake

The Select-Object cmdlet amakulolani kusankha nambala yeniyeni ya zinthu kumayambiriro kapena kumapeto kwa payipi pogwiritsa ntchito -First kapena -Last magawo. Ndi chithandizo chake, mutha kusankha zinthu zamtundu umodzi kapena zinthu zina, ndikupanganso zinthu zatsopano potengera iwo. Tiyeni tiwone momwe cmdlet imagwirira ntchito pogwiritsa ntchito zitsanzo zosavuta.

Lamulo lotsatirali likuwonetsa zambiri za njira 10 zomwe zimadya kuchuluka kwa RAM (katundu wa WS):

Get-Process | Sort-Object WS -Descending | Select-Object -First 10

Windows PowerShell ndi chiyani ndipo imagwiritsidwa ntchito bwanji? Gawo 4: Kugwira ntchito ndi zinthu, makalasi anu

Mutha kusankha zinthu zina zokha zomwe zikudutsa mapaipi ndikupanga zatsopano potengera izi:

Get-Process | Select-Object ProcessName, Id -First 1

Chifukwa cha ntchito ya payipi, tidzalandira chinthu chatsopano, chomwe chidzakhala chosiyana ndi kamangidwe kamene kamabwezedwa ndi Get-Process cmdlet. Tiyeni titsimikizire izi pogwiritsa ntchito Get-Member:

Get-Process | Select-Object ProcessName, Id -First 1 | Get-Member

Windows PowerShell ndi chiyani ndipo imagwiritsidwa ntchito bwanji? Gawo 4: Kugwira ntchito ndi zinthu, makalasi anu

Dziwani kuti Select-Object imabweza chinthu chimodzi (-Choyamba 1) chomwe chili ndi magawo awiri okha omwe tidawafotokozera: mfundo zawo zidakopera kuchokera ku chinthu choyambirira chomwe chidadutsa paipi ndi Get-Process cmdlet. Njira imodzi yopangira zinthu muzolemba za PowerShell ndikugwiritsa ntchito Select-Object:

$obj = Get-Process | Select-Object ProcessName, Id -First 1
$obj.GetType()

Windows PowerShell ndi chiyani ndipo imagwiritsidwa ntchito bwanji? Gawo 4: Kugwira ntchito ndi zinthu, makalasi anu

Pogwiritsa ntchito Select-Object, mutha kuwonjezera katundu wopangidwa ndi zinthu zomwe zimayenera kuyimiridwa ngati matebulo a hashi. Pachifukwa ichi, mtengo wa kiyi yake yoyamba ikugwirizana ndi dzina la katundu, ndipo mtengo wa kiyi wachiwiri umagwirizana ndi mtengo wa chinthu chapaipi yamakono:

Get-Process | Select-Object -Property ProcessName, @{Name="StartTime"; Expression = {$_.StartTime.Minute}}

Windows PowerShell ndi chiyani ndipo imagwiritsidwa ntchito bwanji? Gawo 4: Kugwira ntchito ndi zinthu, makalasi anu

Tiyeni tiwone momwe zinthu zimadutsa pa conveyor:

Get-Process | Select-Object -Property ProcessName, @{Name="StartTime"; Expression = {$_.StartTime.Minute}} | Get-Member

Windows PowerShell ndi chiyani ndipo imagwiritsidwa ntchito bwanji? Gawo 4: Kugwira ntchito ndi zinthu, makalasi anu

ForEach-Object, Gulu-Object ndi Measure-Object

Palinso ma cmdlets ogwirira ntchito ndi zinthu. Mwachitsanzo, tiyeni tikambirane zitatu zothandiza kwambiri:

Pachilichonse imakupatsani mwayi woyendetsa khodi ya PowerShell pa chinthu chilichonse chomwe chili paipi:

ForEach-Object { блок сценария }

Gulu-Chinthu magulu zinthu ndi mtengo wa katundu:

Group-Object PropertyName

Ngati mutayendetsa ndi -NoElement parameter, mukhoza kupeza chiwerengero cha zinthu m'magulu.

Muyeso-Chinthu amaphatikiza magawo achidule osiyanasiyana ndi zinthu zomwe zili mu payipi (amawerengera kuchuluka kwake, ndikupezanso zochepera, zopambana kapena zapakati):

Measure-Object -Property PropertyName -Minimum -Maximum -Average -Sum

Nthawi zambiri, ma cmdlets omwe amakambidwa amagwiritsidwa ntchito molumikizana, ndipo nthawi zambiri amapangidwa m'malemba. ntchito ndi Start, Process and End midadada.

Kupanga zinthu za .NET ndi COM (Chinthu Chatsopano)

Pali zida zambiri zamapulogalamu zomwe zili ndi .NET Core ndi COM zolumikizira zomwe zili zothandiza kwa oyang'anira dongosolo. Pogwiritsa ntchito kalasi ya System.Diagnostics.EventLog, mukhoza kuyang'anira zolemba zadongosolo kuchokera ku Windows PowerShell. Tiyeni tiwone chitsanzo chopanga chitsanzo cha kalasiyi pogwiritsa ntchito New-Object cmdlet ndi -TypeName parameter:

New-Object -TypeName System.Diagnostics.EventLog

Windows PowerShell ndi chiyani ndipo imagwiritsidwa ntchito bwanji? Gawo 4: Kugwira ntchito ndi zinthu, makalasi anu

Popeza sitinatchule chipika cha zochitika zinazake, zotsatira za kalasiyi zilibe deta. Kuti musinthe izi, muyenera kuyitanira njira yapadera yomanga panthawi yomwe idapangidwa pogwiritsa ntchito -ArgumentList parameter. Ngati tikufuna kupeza chipika cha pulogalamuyo, tiyenera kupereka "Application" ngati mkangano kwa wopanga:

$AppLog = New-Object -TypeName System.Diagnostics.EventLog -ArgumentList Application
$AppLog

Windows PowerShell ndi chiyani ndipo imagwiritsidwa ntchito bwanji? Gawo 4: Kugwira ntchito ndi zinthu, makalasi anu

Chonde dziwani kuti tasunga zotuluka za lamulo mu $AppLog variable. Ngakhale kuti mapaipi nthawi zambiri amagwiritsidwa ntchito polumikizana, kulemba zolemba nthawi zambiri kumafuna kutchula chinthu. Kuphatikiza apo, makalasi apakati a .NET Core ali mu System namespace: PowerShell mwachisawawa imayang'ana mitundu yodziwika mmenemo, kotero kulemba Diagnostics.EventLog m'malo mwa System.Diagnostics.EventLog ndikolondola.

Kuti mugwiritse ntchito chipika, mungagwiritse ntchito njira zoyenera:

$AppLog | Get-Member -MemberType Method

Windows PowerShell ndi chiyani ndipo imagwiritsidwa ntchito bwanji? Gawo 4: Kugwira ntchito ndi zinthu, makalasi anu

Tinene kuti zimayeretsedwa ndi njira ya Clear() ngati pali ufulu wopeza:

$AppLog.Clear()

The New-Object cmdlet imagwiritsidwanso ntchito kugwira ntchito ndi zigawo za COM. Pali zambiri - kuchokera kuma library omwe amaperekedwa ndi Windows script server kupita ku ActiveX applications, monga Internet Explorer. Kuti mupange chinthu cha COM, muyenera kukhazikitsa -ComObject parameter ndi ProgId ya kalasi yomwe mukufuna:

New-Object -ComObject WScript.Shell
New-Object -ComObject WScript.Network
New-Object -ComObject Scripting.Dictionary
New-Object -ComObject Scripting.FileSystemObject

Kuti mupange zinthu zanu ndi mawonekedwe osasintha, kugwiritsa ntchito New-Object kumawoneka ngati kwakanthawi komanso kovutirapo; cmdlet iyi imagwiritsidwa ntchito ndi mapulogalamu akunja kwa PowerShell. M’nkhani zamtsogolo nkhaniyi idzakambidwa mwatsatanetsatane. Kuphatikiza pa zinthu za .NET ndi COM, tidzafufuzanso zinthu za CIM (WMI) ndi ADSI.

Kuyimbira Njira Zokhazikika

Ena .NET Core makalasi sangathe instantiated, kuphatikizapo System.Environment ndi System.Math. Ali static ndipo ali ndi katundu wokhazikika komanso njira. Awa ndiwo malaibulale omwe amagwiritsidwa ntchito popanda kupanga zinthu. Mutha kulozera ku gulu lokhazikika kudzera mu liwu lenileni potsekera dzina la mtunduwo m'mabulaketi apakati. Komabe, tikayang'ana kapangidwe ka chinthucho pogwiritsa ntchito Get-Member, tiwona mtundu wa System.RuntimeType m'malo mwa System.Environment:

[System.Environment] | Get-Member

Windows PowerShell ndi chiyani ndipo imagwiritsidwa ntchito bwanji? Gawo 4: Kugwira ntchito ndi zinthu, makalasi anu

Kuti muwone mamembala okhazikika, imbani Get-Member ndi -Static parameter (onani mtundu wa chinthu):

[System.Environment] | Get-Member -Static

Windows PowerShell ndi chiyani ndipo imagwiritsidwa ntchito bwanji? Gawo 4: Kugwira ntchito ndi zinthu, makalasi anu

Kuti mupeze ma static properties ndi njira, gwiritsani ntchito ma coloni awiri otsatizana m'malo mwa nthawi pambuyo pake:

[System.Environment]::OSVersion

Kapena

$test=[System.Math]::Sqrt(25) 
$test
$test.GetType()

Windows PowerShell ndi chiyani ndipo imagwiritsidwa ntchito bwanji? Gawo 4: Kugwira ntchito ndi zinthu, makalasi anu

Lembani PSCustomObject

Mwa mitundu yambiri ya data yomwe ikupezeka mu PowerShell, ndiyenera kutchulapo PSCustomObject, yopangidwira kusungira zinthu mongosintha. Kupanga chinthu choterocho pogwiritsa ntchito New-Object cmdlet kumatengedwa ngati njira yachikale, koma yovuta komanso yachikale:

$object = New-Object  –TypeName PSCustomObject -Property @{Name = 'Ivan Danko'; 
                                          City = 'Moscow';
                                          Country = 'Russia'}

Tiyeni tiwone kapangidwe ka chinthucho:

$object | Get-Member

Windows PowerShell ndi chiyani ndipo imagwiritsidwa ntchito bwanji? Gawo 4: Kugwira ntchito ndi zinthu, makalasi anu

Kuyambira ndi PowerShell 3.0, mawu enanso akupezeka:

$object = [PSCustomObject]@{Name = 'Ivan Danko'; 
                                          City = 'Moscow';
                                          Country = 'Russia'
}

Mukhoza kupeza deta mu imodzi mwa njira zofanana:

$object.Name

$object.'Name'

$value = 'Name'
$object.$value

Nachi chitsanzo chosinthira hashtable yomwe ilipo kukhala chinthu:

$hash = @{'Name'='Ivan Danko'; 'City'='Moscow'; 'Country'='Russia'}
$hash.GetType()
$object = [pscustomobject]$hash
$object.GetType()

Windows PowerShell ndi chiyani ndipo imagwiritsidwa ntchito bwanji? Gawo 4: Kugwira ntchito ndi zinthu, makalasi anu

Chimodzi mwa zovuta za zinthu zamtunduwu ndikuti dongosolo la katundu wawo likhoza kusintha. Kuti mupewe izi, muyenera kugwiritsa ntchito malingaliro [olamulidwa]:

$object = [PSCustomObject][ordered]@{Name = 'Ivan Danko'; 
                                          City = 'Moscow';
                                          Country = 'Russia'
}

Palinso zosankha zina popanga chinthu: pamwambapa tidayang'ana kugwiritsa ntchito cmdlet Sankhani-Chinthu. Chotsalira ndikulingalira kuwonjezera ndi kuchotsa zinthu. Kuchita izi kwa chinthu kuchokera ku chitsanzo chapitachi ndikosavuta:

$object | Add-Member –MemberType NoteProperty –Name Age  –Value 33
$object | Get-Member

Windows PowerShell ndi chiyani ndipo imagwiritsidwa ntchito bwanji? Gawo 4: Kugwira ntchito ndi zinthu, makalasi anu

The Add-Member cmdlet imakupatsani mwayi wongowonjezera katundu, komanso njira ku chinthu chomwe chidapangidwa kale pogwiritsa ntchito "-MemberType ScriptMethod" kumanga:

$ScriptBlock = {
    # код 
}
$object | Add-Member -Name "MyMethod" -MemberType ScriptMethod -Value $ScriptBlock
$object | Get-Member

Chonde dziwani kuti tagwiritsa ntchito mtundu wa $ScriptBlock wamtundu wa ScriptBlock kusunga khodi ya njira yatsopano.

Windows PowerShell ndi chiyani ndipo imagwiritsidwa ntchito bwanji? Gawo 4: Kugwira ntchito ndi zinthu, makalasi anu

Kuti muchotse katundu, gwiritsani ntchito njira yofananira:

$object.psobject.properties.remove('Name')

Kupanga Makalasi Anu Omwe

PowerShell 5.0 idayambitsa luso lofotokozera magiredi kugwiritsa ntchito mawonekedwe a syntax a zilankhulo zotsata zinthu. Mawu akuti Class Class apangidwira izi, pambuyo pake muyenera kufotokoza dzina la kalasi ndikufotokozera thupi lake m'mabulaketi ogwiritsira ntchito:

class MyClass
{
    # тело класса
}

Izi ndizowona .NET Core mtundu, wokhala ndi thupi lomwe limafotokoza zake, njira, ndi zinthu zina. Tiyeni tiwone chitsanzo chofotokozera kalasi yosavuta kwambiri:

class MyClass 
{
     [string]$Name
     [string]$City
     [string]$Country
}

Kuti mupange chinthu (kalasi), gwiritsani ntchito cmdlet Chinthu Chatsopano, kapena mtundu weniweni [MyClass] ndi njira ya pseudostatic zatsopano (zopanga zonse):

$object = New-Object -TypeName MyClass

kapena

$object = [MyClass]::new()

Tiyeni tiwunikenso kapangidwe ka chinthucho:

$object | Get-Member

Windows PowerShell ndi chiyani ndipo imagwiritsidwa ntchito bwanji? Gawo 4: Kugwira ntchito ndi zinthu, makalasi anu

Musaiwale za kukula: simungatchule dzina lamtundu ngati chingwe kapena kugwiritsa ntchito mtundu weniweni kunja kwa script kapena gawo lomwe kalasiyo imatanthauzidwa. Pankhaniyi, ntchito zitha kubweza zochitika zamakalasi (zinthu) zomwe zitha kupezeka kunja kwa gawo kapena script.

Mukapanga chinthucho, lembani katundu wake:

$object.Name = 'Ivan Danko'
$object.City = 'Moscow'
$object.Country = 'Russia'
$object

Windows PowerShell ndi chiyani ndipo imagwiritsidwa ntchito bwanji? Gawo 4: Kugwira ntchito ndi zinthu, makalasi anu

Zindikirani kuti kufotokozera m'kalasi sikungotchula mitundu ya katundu, komanso misinkhu yawo:

class Example
{
     [string]$Name = 'John Doe'
}

Kufotokozera kwa njira ya kalasi kumafanana ndi kufotokozera kwa ntchito, koma osagwiritsa ntchito liwu lothandizira. Monga ntchito, magawo amaperekedwa ku njira ngati kuli kofunikira:

class MyClass 
{
     [string]$Name
     [string]$City
     [string]$Country
     
     #описание метода
     Smile([bool]$param1)
     {
         If($param1) {
            Write-Host ':)'
         }
     }
}

Tsopano woimira kalasi yathu akhoza kumwetulira:

$object = [MyClass]::new()
$object.Smile($true)

Njira zitha kuchulukitsidwa; kuphatikizanso, kalasi ili nayo static katundu ndi njira, komanso omanga omwe mayina awo amagwirizana ndi dzina la kalasi yokha. Kalasi yofotokozedwa mu script kapena PowerShell module imatha kukhala maziko a ina - umu ndi momwe cholowa chimakhazikitsidwa. Pamenepa, ndizololedwa kugwiritsa ntchito makalasi a .NET omwe alipo ngati oyambira:

class MyClass2 : MyClass
{
      #тело нового класса, базовым для которого является MyClass
}
[MyClass2]::new().Smile($true)

Kufotokozera kwathu pogwira ntchito ndi zinthu mu PowerShell sikungomaliza. M'mabuku otsatirawa, tidzayesa kuzama ndi zitsanzo zothandiza: nkhani yachisanu mumndandandawu idzaperekedwa ku nkhani za kuphatikiza PowerShell ndi zigawo za mapulogalamu a chipani chachitatu. Mbali zakale zitha kupezeka pamalumikizidwe pansipa.

Gawo 1: Basic Windows PowerShell Features
Gawo 2: Chiyambi cha Windows PowerShell Programming Language
Gawo 3: kupititsa magawo ku zolemba ndi ntchito, kupanga ma cmdlets

Windows PowerShell ndi chiyani ndipo imagwiritsidwa ntchito bwanji? Gawo 4: Kugwira ntchito ndi zinthu, makalasi anu

Source: www.habr.com

Kuwonjezera ndemanga