Kutulutsa mawu kwa malamulo pazenera lomasulira la PowerShell ndi njira yokhayo yowonetsera chidziwitso mu mawonekedwe oyenera kuzindikira kwa anthu. Kwenikweni Lachitatu kugwira ntchito ndi zinthu: cmdlets ndi ntchito zimawalandira ngati zolowera ndi , 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
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. (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 kuchita 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:

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 
Apa tikuwona kale mtundu ndi kapangidwe kake, ndipo mothandizidwa ndi magawo owonjezera, titha, mwachitsanzo, kuwonetsa zinthu zomwe zikuphatikizidwa muzolowera:
Get-Process | Get-Member -MemberType PropertyChidziwitsochi 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"} 
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 
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 cpuThe -Property parameter ikhoza kusiyidwa poyitana Sort-Object cmdlet; imagwiritsidwa ntchito mwachisawawa. Kuti musinthe mobwerera, gwiritsani ntchito -Descending parameter:
Get-Process | Sort-Object cpu -Descending 
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 
Mutha kusankha zinthu zina zokha zomwe zikudutsa mapaipi ndikupanga zatsopano potengera izi:
Get-Process | Select-Object ProcessName, Id -First 1Chifukwa 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 
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() 
Pogwiritsa ntchito Select-Object, mutha kuwonjezera katundu wopangidwa ndi zinthu zomwe zimayenera kuyimiridwa ngati . 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}} 
Tiyeni tiwone momwe zinthu zimadutsa pa conveyor:
Get-Process | Select-Object -Property ProcessName, @{Name="StartTime"; Expression = {$_.StartTime.Minute}} | Get-Member 
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 PropertyNameNgati 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 -SumNthawi zambiri, ma cmdlets omwe amakambidwa amagwiritsidwa ntchito molumikizana, ndipo nthawi zambiri amapangidwa m'malemba. 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 
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 
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 
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.FileSystemObjectKuti 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 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 
Kuti muwone mamembala okhazikika, imbani Get-Member ndi -Static parameter (onani mtundu wa chinthu):
[System.Environment] | Get-Member -Static 
Kuti mupeze ma static properties ndi njira, gwiritsani ntchito ma coloni awiri otsatizana m'malo mwa nthawi pambuyo pake:
[System.Environment]::OSVersionKapena
$test=[System.Math]::Sqrt(25)
$test
$test.GetType() 
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 
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()

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

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.

Kuti muchotse katundu, gwiritsani ntchito njira yofananira:
$object.psobject.properties.remove('Name')
Kupanga Makalasi Anu Omwe
PowerShell 5.0 idayambitsa luso lofotokozera 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 , kapena mtundu weniweni [MyClass] ndi zatsopano (zopanga zonse):
$object = New-Object -TypeName MyClasskapena
$object = [MyClass]::new()Tiyeni tiwunikenso kapangidwe ka chinthucho:
$object | Get-Member 
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

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 , 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.
Source: www.habr.com
