Kodi Windows PowerShell ndi Chakudya Chanji? Gawo 4: Kugwira Ntchito ndi Zinthu, Makalasi Opangidwa Mwamakonda

Kodi Windows PowerShell ndi Chakudya Chanji? Gawo 4: Kugwira Ntchito ndi Zinthu, Makalasi Opangidwa Mwamakonda

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:

Kodi Windows PowerShell ndi Chakudya Chanji? Gawo 4: Kugwira Ntchito ndi Zinthu, Makalasi Opangidwa Mwamakonda

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

Kodi Windows PowerShell ndi Chakudya Chanji? Gawo 4: Kugwira Ntchito ndi Zinthu, Makalasi Opangidwa Mwamakonda

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 { блок сценария }

Результатом выполнения блока сценария в операторных скобках должно быть логические значение. Если оно истинно ($true) попавший на вход командлету Where-Object объект будет передан по конвейеру дальше, в противном случае (значение $false) он будет удален. Для примера выведем список остановленных служб Windows Server, т.е. таких, у которых свойство Status имеет значение «Stopped»:

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

Kodi Windows PowerShell ndi Chakudya Chanji? Gawo 4: Kugwira Ntchito ndi Zinthu, Makalasi Opangidwa Mwamakonda

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

Kodi Windows PowerShell ndi Chakudya Chanji? Gawo 4: Kugwira Ntchito ndi Zinthu, Makalasi Opangidwa Mwamakonda

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

Kodi Windows PowerShell ndi Chakudya Chanji? Gawo 4: Kugwira Ntchito ndi Zinthu, Makalasi Opangidwa Mwamakonda

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

Kodi Windows PowerShell ndi Chakudya Chanji? Gawo 4: Kugwira Ntchito ndi Zinthu, Makalasi Opangidwa Mwamakonda

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

Kodi Windows PowerShell ndi Chakudya Chanji? Gawo 4: Kugwira Ntchito ndi Zinthu, Makalasi Opangidwa Mwamakonda

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()

Kodi Windows PowerShell ndi Chakudya Chanji? Gawo 4: Kugwira Ntchito ndi Zinthu, Makalasi Opangidwa Mwamakonda

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}}

Kodi Windows PowerShell ndi Chakudya Chanji? Gawo 4: Kugwira Ntchito ndi Zinthu, Makalasi Opangidwa Mwamakonda

Tiyeni tiwone momwe zinthu zimadutsa pa conveyor:

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

Kodi Windows PowerShell ndi Chakudya Chanji? Gawo 4: Kugwira Ntchito ndi Zinthu, Makalasi Opangidwa Mwamakonda

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)

Есть множество программных компонентов с интерфейсами .NET Core и COM, которые пригодятся системным администраторам. С помощью класса System.Diagnostics.EventLog можно управлять системными журналами непосредственно из Windows PowerShell. Разберем пример создания экземпляра этого класса при помощи командлета New-Object с параметром -TypeName:

New-Object -TypeName System.Diagnostics.EventLog

Kodi Windows PowerShell ndi Chakudya Chanji? Gawo 4: Kugwira Ntchito ndi Zinthu, Makalasi Opangidwa Mwamakonda

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

Kodi Windows PowerShell ndi Chakudya Chanji? Gawo 4: Kugwira Ntchito ndi Zinthu, Makalasi Opangidwa Mwamakonda

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

Kodi Windows PowerShell ndi Chakudya Chanji? Gawo 4: Kugwira Ntchito ndi Zinthu, Makalasi Opangidwa Mwamakonda

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

$AppLog.Clear()

Командлет New-Object применяется и для работы с СОМ-компонентами. Их довольно много — от поставляемых с сервером сценариев Windows библиотек до приложений ActiveX, таких, например, как Internet Explorer. Чтобы создать СОМ-объект, требуется задать параметр -ComObject с программным идентификатора ProgId нужного класса:

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

Kodi Windows PowerShell ndi Chakudya Chanji? Gawo 4: Kugwira Ntchito ndi Zinthu, Makalasi Opangidwa Mwamakonda

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

[System.Environment] | Get-Member -Static

Kodi Windows PowerShell ndi Chakudya Chanji? Gawo 4: Kugwira Ntchito ndi Zinthu, Makalasi Opangidwa Mwamakonda

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()

Kodi Windows PowerShell ndi Chakudya Chanji? Gawo 4: Kugwira Ntchito ndi Zinthu, Makalasi Opangidwa Mwamakonda

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

Kodi Windows PowerShell ndi Chakudya Chanji? Gawo 4: Kugwira Ntchito ndi Zinthu, Makalasi Opangidwa Mwamakonda

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()

Kodi Windows PowerShell ndi Chakudya Chanji? Gawo 4: Kugwira Ntchito ndi Zinthu, Makalasi Opangidwa Mwamakonda

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

Kodi Windows PowerShell ndi Chakudya Chanji? Gawo 4: Kugwira Ntchito ndi Zinthu, Makalasi Opangidwa Mwamakonda

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.

Kodi Windows PowerShell ndi Chakudya Chanji? Gawo 4: Kugwira Ntchito ndi Zinthu, Makalasi Opangidwa Mwamakonda

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

Kodi Windows PowerShell ndi Chakudya Chanji? Gawo 4: Kugwira Ntchito ndi Zinthu, Makalasi Opangidwa Mwamakonda

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

Kodi Windows PowerShell ndi Chakudya Chanji? Gawo 4: Kugwira Ntchito ndi Zinthu, Makalasi Opangidwa Mwamakonda

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.

Часть 1: основные возможности Windows PowerShell
Часть 2: введение в язык программирования Windows PowerShell
Gawo 3: kupititsa magawo ku zolemba ndi ntchito, kupanga ma cmdlets

Kodi Windows PowerShell ndi Chakudya Chanji? Gawo 4: Kugwira Ntchito ndi Zinthu, Makalasi Opangidwa Mwamakonda

Source: www.habr.com

Gulani kuchititsa kodalirika kwamasamba okhala ndi chitetezo cha DDoS, ma seva a VPS VDS Gulani malo odalirika osungira mawebusayiti okhala ndi chitetezo cha DDoS, ma seva a VPS VDS | ProHoster