Imveliso yokubhaliweyo yemiyalelo kwifestile ye-PowerShell yetoliki yindlela nje yokubonisa ulwazi kwifomu efanelekileyo kwimbono yomntu. Ngokwenene ngoLwesithathu ukusebenza ngezinto: cmdlets kunye nemisebenzi izifumana njengegalelo kunye , kunye neentlobo eziguquguqukayo ezikhoyo ngokusebenzisana kunye nakwizikripti zisekwe kwiiklasi ze.NET. Kwinqaku lesine loluhlu, siya kufunda ukusebenza kunye nezinto ngokubanzi.
Isiqulatho:
Izinto kwi-PowerShell
Masikhumbule ukuba into yingqokelela yemimandla yedatha (iipropati, iziganeko, njl.) kunye neendlela zokuzilungisa (iindlela). Ubume bayo bucaciswe ngohlobo, oluqhele ukusekwe kwiiklasi ezisetyenziswa kwiqonga elidityanisiweyo .NET Core. Kwakhona kunokwenzeka ukuba usebenze ngezinto ze-COM, CIM (WMI) kunye ne-ADSI. Iipropati kunye neendlela ziyafuneka ukwenza izenzo ezahlukeneyo kwidatha; ukongeza, kwi-PowerShell, izinto zinokugqithiswa njengeengxoxo kwimisebenzi kunye ne-cmdlets, zabelwe amaxabiso azo kwiinguqu, kwaye kukho kwakhona. (umhambisi okanye umbhobho). Umyalelo ngamnye kumbhobho udlulisela imveliso yawo kwelinye elilandelayo ngokulandelelana, into ngento. Ukuqhubekeka, ungasebenzisa i-cmdlets eqokelelweyo okanye uzenzele eyakho ukwenza iinguqulelo ezahlukeneyo ngezinto ezikwimibhobho: ukuhluza, ukuhlela, ukwahlula, kunye nokutshintsha ubume bazo. Ukudlulisa idatha kule fom kunenzuzo enkulu: iqela elifumanayo alidingi ukuhlaziya i-byte stream (isicatshulwa), lonke ulwazi oluyimfuneko lufumaneka ngokulula ngokubiza iipropati ezifanelekileyo kunye neendlela.
Ukujonga ubume bezinto
Umzekelo, masiqhube i-Get-Process cmdlet, ekuvumela ukuba ufumane ulwazi malunga neenkqubo ezisebenza kwinkqubo:

Iza kubonisa idatha ethile ebhaliweyo efomathiweyo enganiki nayiphi na ingcamango malunga neempawu zezinto ezibuyisiweyo kunye neendlela zazo. Ukucokisa imveliso, kufuneka sifunde indlela yokujonga ubume bezinto, kwaye i-Get-Lungu cmdlet iya kusinceda ngale nto:
Get-Process | Get-Member 
Apha sele sibona uhlobo kunye nesakhiwo, kwaye ngoncedo lweeparamitha ezongezelelweyo singakwazi, umzekelo, ukubonisa kuphela iipropati zento ezibandakanyiweyo kwigalelo:
Get-Process | Get-Member -MemberType PropertyOlu lwazi luya kufuneka ukusombulula iingxaki zolawulo ngokusebenzisana okanye ukubhala izikripthi zakho: umzekelo, ukufumana ulwazi malunga neenkqubo ezixhonyiweyo usebenzisa ipropati yokuPhendula.
Ukuhluza izinto
I-PowerShell ivumela izinto ezidibana nemeko ethile ukuba zigqithwe ngombhobho:
Where-Object { блок сценария }Результатом выполнения блока сценария в операторных скобках должно быть логические значение. Если оно истинно ($true) попавший на вход командлету Where-Object объект будет передан по конвейеру дальше, в противном случае (значение $false) он будет удален. Для примера выведем список остановленных служб Windows Server, т.е. таких, у которых свойство Status имеет значение «Stopped»:
Get-Service | Where-Object {$_.Status -eq "Stopped"} 
Apha kwakhona sibona ukumelwa okubhaliweyo, kodwa ukuba ufuna ukuqonda uhlobo kunye nesakhiwo sangaphakathi sezinto ezidlula kumbhobho akunzima:
Get-Service | Where-Object {$_.Status -eq "Stopped"} | Get-Member 
Ukuhlela izinto
Xa ukusetyenzwa kwemibhobho yezinto, kuhlala kukho isidingo sokuzihlela. I-Sort-Object cmdlet igqithiselwe amagama eepropati (izitshixo zokuhlela) kwaye ibuyisela izinto ezicwangciswe ngamaxabiso azo. Kulula ukuhlenga imveliso yeenkqubo ezisebenzayo ngexesha le-CPU elichithwe (ipropathi ye-cpu):
Get-Process | Sort-Object –Property cpuI -Property iparameter inokushiyeka xa ubiza i Cmdlet yeNgcaciso-nkqubo, isetyenziswa ngokungagqibekanga. Ukuhlenga umva, sebenzisa i -Ukwehla iparamitha:
Get-Process | Sort-Object cpu -Descending 
Ukukhetha izinto kunye namalungu azo
I Khetha-Into cmdlet ikuvumela ukuba ukhethe inani elithile lezinto ekuqaleni okanye ekupheleni kombhobho usebenzisa i -First or -Last parameters. Ngoncedo lwayo, unokukhetha izinto ezingatshatanga okanye iipropathi ezithile, kwaye wenze izinto ezintsha ezisekelwe kuzo. Makhe sijonge indlela i-cmdlet esebenza ngayo usebenzisa imizekelo elula.
Lo myalelo ulandelayo ubonisa ulwazi malunga neenkqubo ezili-10 ezisebenzisa ubuninzi be-RAM (ipropathi ye-WS):
Get-Process | Sort-Object WS -Descending | Select-Object -First 10 
Unokukhetha kuphela iipropathi ezithile zezinto ezidlula kumbhobho kwaye wenze ezintsha ezisekwe kuzo:
Get-Process | Select-Object ProcessName, Id -First 1Njengomphumo wokusebenza kombhobho, siya kufumana into entsha, isakhiwo esiya kuhluka kwisakhiwo esibuyiselwe yi-Get-Process cmdlet. Masiqinisekise oku sisebenzisa Fumana iLungu:
Get-Process | Select-Object ProcessName, Id -First 1 | Get-Member 
Qaphela ukuba i-Khetha-Object ibuyisela into enye (-Yokuqala 1) enemihlaba emibini kuphela esiyichazileyo: amaxabiso abo akhutshelwe ukusuka kwinto yokuqala egqithiselwe kumbhobho yi-Get-Process cmdlet. Enye yeendlela zokwenza izinto kwizikripthi zePowerShell isekwe ekusebenziseni Khetha-iNto:
$obj = Get-Process | Select-Object ProcessName, Id -First 1
$obj.GetType() 
Usebenzisa Khetha-Into, unokongeza iipropati ezibaliweyo kwizinto ezifuna ukumelwa njenge . Kule meko, ixabiso lesitshixo salo sokuqala lihambelana negama lepropati, kwaye ixabiso lesitshixo sesibini lihambelana nexabiso lepropati yento yombhobho yangoku:
Get-Process | Select-Object -Property ProcessName, @{Name="StartTime"; Expression = {$_.StartTime.Minute}} 
Makhe sijonge kwisakhiwo sezinto ezidlula kumhambisi:
Get-Process | Select-Object -Property ProcessName, @{Name="StartTime"; Expression = {$_.StartTime.Minute}} | Get-Member 
Into-Nganye-Into, iQela-Into kunye neNjongo yoMlinganiselo
Kukho ezinye ii-cmdlets zokusebenza ngezinto. Njengomzekelo, makhe sithethe ngezona zithathu ziluncedo:
Into-Nganye ikuvumela ukuba usebenzise ikhowudi ye-PowerShell yento nganye ekumbhobho:
ForEach-Object { блок сценария }Iqela-Into amaqela izinto ngexabiso lepropati:
Group-Object PropertyNameUkuba uqhuba nge-NoElement iparamitha, ungafumana inani lezinto kumaqela.
Umlinganiselo-Into ihlanganisa iiparamitha ezahlukeneyo zesishwankathelo ngamaxabiso entsimi yento kumbhobho (ubala isixa, kwaye ufumana ubuncinci, ubuninzi okanye ixabiso eliphakathi):
Measure-Object -Property PropertyName -Minimum -Maximum -Average -SumNgokuqhelekileyo, ii-cmdlets ezixoxiwe zisetyenziselwa ukusebenzisana, kwaye zihlala ziyilwa kwizikripthi. ngeQalisa, Inkqubo kunye neebhloko zokuQeda.
Ukudala izinto ze-.NET kunye ne-COM (Into-entsha)
Есть множество программных компонентов с интерфейсами .NET Core и COM, которые пригодятся системным администраторам. С помощью класса System.Diagnostics.EventLog можно управлять системными журналами непосредственно из Windows PowerShell. Разберем пример создания экземпляра этого класса при помощи командлета New-Object с параметром -TypeName:
New-Object -TypeName System.Diagnostics.EventLog 
Ekubeni singakhange sichaze i-log yesiganeko esithile, umzekelo obangelwayo weklasi awunadatha. Ukutshintsha oku, kufuneka ubize indlela ekhethekileyo yomakhi ngexesha lokudalwa kwayo usebenzisa i-parameter ye-ArgumentList. Ukuba sifuna ukufikelela kwilog yesicelo, kufuneka sigqithise umtya othi "Isicelo" njengengxabano kumakhi:
$AppLog = New-Object -TypeName System.Diagnostics.EventLog -ArgumentList Application
$AppLog 
Nceda uqaphele ukuba sigcine imveliso yomyalelo kwi-$ AppLog variable. Nangona imibhobho isetyenziswa ngokuqhelekileyo kwimo yokunxibelelana, ukubhala izikripthi kudla ngokufuna ukugcinwa kwereferensi kwinto ethile. Ukongeza, undoqo .NET Iiklasi ezingundoqo ziqulathwe kwiSixokelelwano samagama: I-PowerShell ngokungagqibekanga ijonga iindidi ezikhankanyiweyo kuyo, ngoko ukubhala Diagnostics.EventLog endaweni ye System.Diagnostics.EventLog ichanekile.
Ukusebenza ngelog, ungasebenzisa iindlela ezifanelekileyo:
$AppLog | Get-Member -MemberType Method 
Masithi icocwe yi-Clear() indlela ukuba kukho amalungelo ofikelelo:
$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.FileSystemObjectUkwenza izinto zakho ngolwakhiwo olungenasizathu, usebenzisa i-New-Object ibonakala iyinto yakudala kakhulu kwaye inzima; le cmdlet isetyenziselwa ukusebenza nezinto zesoftware ngaphandle kwePowerShell. Kumanqaku azayo le nkupho iza kuxutyushwa ngokweenkcukacha. Ukongeza kwizinto ze-NET kunye ne-COM, siya kuhlola kwakhona izinto zeCIM (WMI) kunye ne-ADSI.
Ukufowunela Iindlela zeStatic
Ezinye iiklasi zeNET Core azinakuqinisekiswa, ukuquka iSystem.Environment and System.Math. Bazi kwaye iqulathe iipropati ezimileyo kunye neendlela. La ngamathala eencwadi asetyenziswa ngaphandle kokudala izinto. Ungabhekisa kudidi olungashukumiyo ngokusebenzisa i-literal ngokuvala uhlobo lwegama kwizibiyeli ezisikwere. Nangona kunjalo, ukuba sijonga kulwakhiwo lwento usebenzisa i-Get-Lungu, siya kubona uhlobo lweSistim.RuntimeType endaweni ye-System.Environment:
[System.Environment] | Get-Member 
Ukujonga kuphela amalungu angatshintshiyo, fowunela i-Get-Lungu nge -Static parameter (qaphela uhlobo lwento):
[System.Environment] | Get-Member -Static 
Ukufikelela kwiipropathi ezimileyo kunye neendlela, sebenzisa iikholoni ezimbini ezilandelelanayo endaweni yexesha emva kokoqobo:
[System.Environment]::OSVersionOkanye
$test=[System.Math]::Sqrt(25)
$test
$test.GetType() 
Chwetheza PSCustomObject
Phakathi kweentlobo ezininzi zedatha ezifumanekayo kwi-PowerShell, kufanelekile ukukhankanya i-PSCustomObject, eyenzelwe ukugcina izinto ngesakhiwo esingenasizathu. Ukudala into enjalo usebenzisa i-cmdlet ye-New-Object ithathwa njengeyona ndlela yakudala, kodwa inzima kwaye iphelelwe lixesha:
$object = New-Object –TypeName PSCustomObject -Property @{Name = 'Ivan Danko';
City = 'Moscow';
Country = 'Russia'}
Makhe sijonge isakhiwo sento:
$object | Get-Member 
Ukuqala ngePowerShell 3.0, enye i-syntax iyafumaneka:
$object = [PSCustomObject]@{Name = 'Ivan Danko';
City = 'Moscow';
Country = 'Russia'
}
Unokufikelela kwidatha ngenye yeendlela ezifanayo:
$object.Name
$object.'Name'
$value = 'Name'
$object.$value
Nanku umzekelo wokuguqula i-hashtable ekhoyo ibe yinto:
$hash = @{'Name'='Ivan Danko'; 'City'='Moscow'; 'Country'='Russia'}
$hash.GetType()
$object = [pscustomobject]$hash
$object.GetType()

Enye yezinto ezingalunganga zezinto zolu hlobo kukuba umyalelo weempawu zabo unokutshintsha. Ukunqanda oku, kufuneka usebenzise uphawu [olucwangcisiweyo]:
$object = [PSCustomObject][ordered]@{Name = 'Ivan Danko';
City = 'Moscow';
Country = 'Russia'
}
Kukho ezinye iinketho zokwenza into: ngaphezulu sijonge ukusebenzisa i cmdlet . Konke okuseleyo kukufumana ukongeza kunye nokususa izinto. Ukwenza oku kwinto evela kumzekelo wangaphambili kulula kakhulu:
$object | Add-Member –MemberType NoteProperty –Name Age –Value 33
$object | Get-Member

I-cmdlet yokudibanisa-iLungu ikuvumela ukuba ungeze kungekuphela nje iipropati, kodwa kunye neendlela kwi-object eyenziwe ngaphambili ngokusebenzisa i-"-MemberType ScriptMethod" ukwakha:
$ScriptBlock = {
# код
}
$object | Add-Member -Name "MyMethod" -MemberType ScriptMethod -Value $ScriptBlock
$object | Get-Member
Nceda uqaphele ukuba sisebenzise i-$ScriptBlock eguquguqukayo yohlobo lwe-ScriptBlock ukugcina ikhowudi yendlela entsha.

Ukususa iipropathi, sebenzisa indlela ehambelanayo:
$object.psobject.properties.remove('Name')
Ukuzenzela Ezakho Iiklasi
I-PowerShell 5.0 yazisa amandla okuchaza kusetyenziswa uphawu lwesintaksi lweelwimi zodweliso ezijolise kwinto. Igama lenkonzo Udidi lwenzelwe oku, emva koko kufuneka uchaze igama lodidi kwaye uchaze umzimba walo kwizibiyeli zomsebenzisi:
class MyClass
{
# тело класса
}
Olu yinyaniso yodidi lwe-NET Core, enomzimba ochaza iipropati zawo, iindlela, kunye nezinye izinto. Makhe sijonge umzekelo wokuchaza eyona klasi ilula:
class MyClass
{
[string]$Name
[string]$City
[string]$Country
}
Ukwenza into (umzekelo weklasi), sebenzisa i cmdlet , okanye uhlobo oluthile [MyClass] kunye entsha (umakhi ohlala ehleli):
$object = New-Object -TypeName MyClassokanye
$object = [MyClass]::new()Makhe sihlalutye isakhiwo sento:
$object | Get-Member 
Ungalibali malunga nobubanzi: awukwazi ukubhekisa kuhlobo lwegama njengomtya okanye usebenzise uhlobo oluthile ngaphandle kweskripthi okanye imodyuli apho iklasi ichazwa khona. Kule meko, imisebenzi inokubuyisela iimeko zeklasi (izinto) eziza kufumaneka ngaphandle kwemodyuli okanye iskripthi.
Emva kokudala into, gcwalisa iimpawu zayo:
$object.Name = 'Ivan Danko'
$object.City = 'Moscow'
$object.Country = 'Russia'
$object

Qaphela ukuba inkcazo yeklasi ayikhankanyi kuphela iindidi zepropati, kodwa kunye namaxabiso azo angagqibekanga:
class Example
{
[string]$Name = 'John Doe'
}
Inkcazo yendlela yeklasi ifana nenkcazo yomsebenzi, kodwa ngaphandle kokusebenzisa igama lomsebenzi. Njengomsebenzi, iiparamitha zigqithiselwa kwiindlela ukuba kuyimfuneko:
class MyClass
{
[string]$Name
[string]$City
[string]$Country
#описание метода
Smile([bool]$param1)
{
If($param1) {
Write-Host ':)'
}
}
}
Ngoku ummeli weklasi yethu unokuncuma:
$object = [MyClass]::new()
$object.Smile($true)
Iindlela zinokugcwala kakhulu; ukongeza, iklasi inakho , kunye nabakhi amagama abo ahambelana negama leklasi ngokwayo. Iklasi echazwe kwiskripthi okanye imodyuli ye-PowerShell inokusebenza njengesiseko somnye - le yindlela ilifa eliphunyezwa ngayo. Kulo mzekelo, kuvumelekile ukusebenzisa iiklasi ezikhoyo ze-NET njengesiseko:
class MyClass2 : MyClass
{
#тело нового класса, базовым для которого является MyClass
}
[MyClass2]::new().Smile($true)
Inkcazo yethu yokusebenza ngezinto kwi-PowerShell ayide iphele. Kolu papasho lulandelayo, siya kuzama ukulwenza nzulu ngemizekelo esebenzayo: inqaku lesihlanu kuthotho liya kunikezelwa kwimiba yokudibanisa i-PowerShell kunye namacandelo esoftware yomntu wesithathu. Amalungu adlulileyo anokufumaneka kwezi linki zingezantsi.
umthombo: www.habr.com
