Izvo zvinyorwa zvinobuda zvemirairo muhwindo remuturikiri wePowerShell ingori nzira yekuratidza ruzivo muchimiro chakakodzera kuona kwevanhu. Chaizvoizvo Chitatu kushanda nezvinhu: cmdlets uye mabasa anoagamuchira sekupinza uye , uye marudzi akasiyana-siyana aripo anopindirana uye muzvinyorwa zvinobva pa.NET makirasi. Muchikamu chechina chenhevedzano, tichadzidza kushanda nezvinhu zvakadzama.
Tafura yezviri mukati:
Zvinhu muPowerShell
Ngatiyeukei kuti chinhu muunganidzwa weminda data (properties, zviitiko, etc.) uye nzira dzekugadzirisa (maitiro). Chimiro chayo chinotsanangurwa nemhando, iyo inowanzobva pamakirasi anoshandiswa mukubatana .NET Core platform. Zvinogoneka zvakare kushanda neCOM, CIM (WMI) uye ADSI zvinhu. Zvivakwa uye nzira dzinodiwa kuita zviito zvakasiyana-siyana padhata; uyezve, muPowerShell, zvinhu zvinogona kupfuudzwa senharo kumabasa uye cmdlets, zvakapihwa hunhu hwazvo kune zvinosiyana, uye pane zvakare. (conveyor kana pipeline). Murairo wega wega uri mupombi inopfuudza kuburitsa kwayo kune inotevera ichichinjana, chinhu nechinhu. Nekugadzirisa, unogona kushandisa akaunganidzwa cmdlets kana kugadzira yako kuita zvakasiyana-siyana manipulations nezvinhu zviri mupombi: kusefa, kuronga, kuisa mapoka, uye kunyange kushandura chimiro chavo. Kutumira dhata mune iyi fomu kune bhenefiti yakakomba: timu inogamuchira haidi kupatsanura iyo byte stream (chinyorwa), ruzivo rwese rwunodiwa runodzoserwa nyore nekudaidza zvivakwa zvakakodzera uye nzira.
Kuona magadzirirwo ezvinhu
Semuenzaniso, ngatimhanyei Get-Process cmdlet, iyo inokutendera iwe kuti uwane ruzivo nezve maitirwo ari kuita muhurongwa:

Icharatidza mamwe mafomati data data iyo isingapi chero pfungwa nezve zvivakwa zvezvinhu zvakadzoserwa uye nzira dzazvo. Kuti tigadzirise zvakabuda, isu tinofanirwa kudzidza maitiro ekuongorora chimiro chezvinhu, uye iyo Get-Member cmdlet ichatibatsira neizvi:
Get-Process | Get-Member 
Pano isu tatoona rudzi uye chimiro, uye nerubatsiro rwemamwe ma parameter tinogona, semuenzaniso, kuratidza chete zvimiro zvechinhu chinosanganisirwa mune yekuisa:
Get-Process | Get-Member -MemberType PropertyRuzivo urwu ruchadikanwa kugadzirisa matambudziko ekutonga nekudyidzana kana kunyora ako ega zvinyorwa: semuenzaniso, kuwana ruzivo nezve yakaturikwa maitiro uchishandisa Inopindura pfuma.
Kusefa zvinhu
PowerShell inobvumira zvinhu zvinosangana neimwe mamiriro kuti zvipfuure nepapombi:
Where-Object { блок сценария }Mhedzisiro yekuita script block mukati memabhureki emushandisi inofanira kunge iri Boolean value. Kana iri yechokwadi ($true), chinhu chakapfuudzwa kuWhere-Object cmdlet chichapfuudzwa pasi pepipeline; zvikasadaro (value $false), chichabviswa. Semuenzaniso, ngatiratidze runyorwa rwemasevhisi akamiswa. Windows Server, kureva avo vane Status property ine kukosha kwekuti "Stopped":
Get-Service | Where-Object {$_.Status -eq "Stopped"} 
Pano zvakare tinoona mufananidzo wezvinyorwa, asi kana iwe uchida kunzwisisa rudzi uye chimiro chemukati chezvinhu zvinopfuura nepombi hazvina kuoma:
Get-Service | Where-Object {$_.Status -eq "Stopped"} | Get-Member 
Kuronga zvinhu
Kana pombi yekugadzirisa zvinhu, pane kazhinji kudikanwa kwekuzvirongedza. Iyo Sort-Object cmdlet inopfuudzwa mazita ezvivakwa (kurongedza makiyi) uye inodzosera zvinhu zvakarairwa nehunhu hwazvo. Zviri nyore kugadzirisa zvinobuda zvekumhanya maitiro neCPU nguva yakashandiswa (cpu pfuma):
Get-Process | Sort-Object –Property cpuIyo -Property parameter inogona kusiiwa kana ichidaidza Rongedza-Chinhu cmdlet; inoshandiswa nekukasira. Kuti udzoke kuronga, shandisa iyo -Descending parameter:
Get-Process | Sort-Object cpu -Descending 
Kusarudza zvinhu uye zvikamu zvavo
The Select-Object cmdlet inokubvumira kuti usarudze nhamba chaiyo yezvinhu pakutanga kana kupera kwepombi uchishandisa -First or -Last parameters. Nekubatsira kwayo, unogona kusarudza zvinhu zvimwechete kana zvimwe zvinhu, uye zvakare kugadzira zvinhu zvitsva zvichibva pazviri. Ngatitarisei kuti cmdlet inoshanda sei tichishandisa mienzaniso iri nyore.
Iwo unotevera kuraira unoratidza ruzivo nezve gumi maitiro anotora huwandu hwakanyanya hwe RAM (WS pfuma):
Get-Process | Sort-Object WS -Descending | Select-Object -First 10 
Iwe unogona kusarudza chete zvimwe zvivakwa zvezvinhu zvinopfuura nepapombi uye kugadzira zvitsva zvichibva pazviri:
Get-Process | Select-Object ProcessName, Id -First 1Somugumisiro wekushanda kwepombi, tichagamuchira chinhu chitsva, chimiro chayo chichasiyana nechimiro chakadzorerwa neGet-Process cmdlet. Ngationei izvi tichishandisa Get-Member:
Get-Process | Select-Object ProcessName, Id -First 1 | Get-Member 
Ziva kuti Sarudza-Chinhu chinodzosa chinhu chimwe chete (-Chekutanga 1) chine maviri chete eminda yatakatsanangura: hunhu hwavo hwakakopwa kubva pachinhu chekutanga chakapfuudzwa mupombi neGet-Process cmdlet. Imwe yenzira dzekugadzira zvinhu muPowerShell zvinyorwa zvinobva pakushandisa Sarudza-Chinhu:
$obj = Get-Process | Select-Object ProcessName, Id -First 1
$obj.GetType() 
Uchishandisa Select-Object, unogona kuwedzera computed zvivakwa kune zvinhu zvinoda kumiririrwa se . Muchiitiko ichi, kukosha kwekiyi yayo yekutanga inoenderana nezita reimba, uye kukosha kwechipiri kiyi inoenderana nemutengo wepfuma weiyo iripo pipeline element:
Get-Process | Select-Object -Property ProcessName, @{Name="StartTime"; Expression = {$_.StartTime.Minute}} 
Ngatitarisei kuumbwa kwezvinhu zviri kupfuura nemuconveyor:
Get-Process | Select-Object -Property ProcessName, @{Name="StartTime"; Expression = {$_.StartTime.Minute}} | Get-Member 
ForEach-Object, Group-Object and Measure-Object
Kune mamwe macmdlets ekushanda nezvinhu. Semuenzaniso, ngatitaure nezve matatu anonyanya kubatsira:
YeEach-Chinhu inokutendera kuti umhanye PowerShell kodhi yechinhu chimwe nechimwe chiri mupombi:
ForEach-Object { блок сценария }Boka-Chinhu mapoka zvinhu nemutengo wepfuma:
Group-Object PropertyNameKana iwe ukaimhanyisa ne -NoElement parameter, unogona kuona huwandu hwezvinhu mumapoka.
Chiyero-Chinhu inounganidza akasiyana mapfupi maparamita nechinhu chemunda kukosha mupombi (inoverenga iyo sum, uye zvakare inowana hushoma, hurefu kana hwepakati kukosha):
Measure-Object -Property PropertyName -Minimum -Maximum -Average -SumKazhinji, iwo macmdlets anokurukurwa anoshandiswa kupindirana, uye anowanzo gadzirwa mumanyoro. neBegin, Process uye End mabhuroko.
Kugadzira .NET uye COM zvinhu (Zvitsva-Chinhu)
Kune zvikamu zvakawanda zvesoftware zvine .NET Core uye COM interfaces zvinobatsira kune vatariri vesystem. Uchishandisa kirasi yeSystem.Diagnostics.EventLog, unogona kutarisira marogi esystem zvakananga kubva Windows PowerShell. Ngatitarisei muenzaniso wekugadzira muenzaniso wekirasi iyi tichishandisa cmdlet yeNew-Object ine paramita ye -TypeName:
New-Object -TypeName System.Diagnostics.EventLog 
Sezvo isu tisina kudoma chaiyo chiitiko chinyorwa, mhedzisiro yekirasi haina data. Kuti uchinje izvi, unofanirwa kufonera yakakosha nzira yekuvaka panguva yekusikwa kwayo uchishandisa iyo -ArgumentList paramende. Kana tichida kuwana irogi rekushandisa, isu tinofanirwa kupfuudza tambo "Chikumbiro" senharo kumugadziri:
$AppLog = New-Object -TypeName System.Diagnostics.EventLog -ArgumentList Application
$AppLog 
Ndokumbira utarise kuti isu takachengeta kuburitsa kwemurairo muiyo $AppLog inoshanduka. Kunyange zvazvo mapaipi achiwanzo shandiswa mukudyidzana, kunyora magwaro kunowanzoda kuchengetedza chirevo chechinhu. Pamusoro pezvo, makirasi epakati .NET Core arimo muSitimu namespace: PowerShell nekukasira inotarisa mhando dzakatarwa mairi, saka kunyora Diagnostics.EventLog pachinzvimbo cheSystem.Diagnostics.EventLog ndizvozvo.
Kuti ushande nerogi, unogona kushandisa nzira dzakakodzera:
$AppLog | Get-Member -MemberType Method 
Ngatitii inocheneswa neiyo Clear() nzira kana paine kodzero dzekuwana:
$AppLog.Clear()Iyo New-Object cmdlet inoshandiswawo kushanda neCOM components. Kune akawanda acho, kubva kuma scripts anopiwa neserver. Windows maraibhurari kuenda kuActiveX applications, dzakadai seInternet Explorer. Kuti ugadzire chinhu cheCOM, unofanirwa kutsanangura parameter ye -ComObject neProgId yekirasi yaunoda:
New-Object -ComObject WScript.Shell
New-Object -ComObject WScript.Network
New-Object -ComObject Scripting.Dictionary
New-Object -ComObject Scripting.FileSystemObjectKugadzira zvinhu zvako uine chimiro chekupokana, uchishandisa Nyowani-Chinhu chinoita sechinyakare uye chakaomesesa; iyi cmdlet inoshandiswa kushanda nesoftware zvikamu zvekunze kuPowerShell. Muzvinyorwa zvinotevera iyi nyaya ichakurukurwa zvakadzama. Kuwedzera kune .NET uye COM zvinhu, tichaongorora zvakare CIM (WMI) uye ADSI zvinhu.
Kufonera Static Methods
Zvimwe .NET Core makirasi haagone kusimbiswa, kusanganisira System.Environment uye System.Math. Vari uye ine chete static zvimiro uye nzira. Aya ndiwo mareferenzi emaraibhurari anoshandiswa pasina kugadzira zvinhu. Iwe unogona kutaura kune static kirasi kuburikidza neiyo chaiyo nekuvhara iyo mhando zita mumabhuraketi akaenzana. Zvakadaro, kana tikatarisa chimiro chechinhu tichishandisa Get-Member, tinoona mhando yeSystem.RuntimeType pachinzvimbo cheSystem.Environment:
[System.Environment] | Get-Member 
Kuti uone chete nhengo dzakasimba, fonera Get-Member ne -Static parameter (ona rudzi rwechinhu):
[System.Environment] | Get-Member -Static 
Kuti uwane static zvivakwa uye nzira, shandisa maviri akateedzana makoroni panzvimbo yenguva mushure meiyo chaiyo:
[System.Environment]::OSVersionKana
$test=[System.Math]::Sqrt(25)
$test
$test.GetType() 
Nyora PSCustomObject
Pakati peakawanda emhando dzedata dziripo muPowerShell, zvakakodzera kutaura PSCustomObject, yakagadzirirwa kuchengetedza zvinhu zvine chimiro chekupokana. Kugadzira chinhu chakadaro uchishandisa Iyo Nyowani-Chinhu cmdlet inoonekwa seyechinyakare, asi yakaoma uye yakare nzira:
$object = New-Object –TypeName PSCustomObject -Property @{Name = 'Ivan Danko';
City = 'Moscow';
Country = 'Russia'}
Ngatitarisei chimiro chechinhu:
$object | Get-Member 
Kutanga nePowerShell 3.0, imwe syntax inowanikwa:
$object = [PSCustomObject]@{Name = 'Ivan Danko';
City = 'Moscow';
Country = 'Russia'
}
Iwe unogona kuwana iyo data mune imwe yenzira dzakaenzana:
$object.Name
$object.'Name'
$value = 'Name'
$object.$value
Heino muenzaniso wekushandura hashtable iripo kuita chinhu:
$hash = @{'Name'='Ivan Danko'; 'City'='Moscow'; 'Country'='Russia'}
$hash.GetType()
$object = [pscustomobject]$hash
$object.GetType()

Chimwe chezvakaipa zvezvinhu zverudzi urwu ndechokuti kurongeka kwezvinhu zvavo kunogona kuchinja. Kuti udzivise izvi, unofanirwa kushandisa [yakarongerwa] hunhu:
$object = [PSCustomObject][ordered]@{Name = 'Ivan Danko';
City = 'Moscow';
Country = 'Russia'
}
Pane dzimwe sarudzo dzekugadzira chinhu: pamusoro takatarisa kushandisa cmdlet . Chasara kungofunga kuwedzera nekubvisa zvinhu. Kuita izvi kune chinhu kubva pamuenzaniso wapfuura zviri nyore:
$object | Add-Member –MemberType NoteProperty –Name Age –Value 33
$object | Get-Member

Iyo Wedzera-Nhengo cmdlet inokutendera kuti uwedzere kwete zvivakwa chete, asiwo nzira kune yakambogadzirwa $chinhu uchishandisa iyo "-MemberType ScriptMethod" kuvaka:
$ScriptBlock = {
# код
}
$object | Add-Member -Name "MyMethod" -MemberType ScriptMethod -Value $ScriptBlock
$object | Get-Member
Tapota cherechedza kuti takashandisa $ScriptBlock musiyano werudzi rweScriptBlock kuchengetedza kodhi yenzira itsva.

Kubvisa zvivakwa, shandisa nzira inoenderana:
$object.psobject.properties.remove('Name')
Kugadzira Wako Makirasi
PowerShell 5.0 yakaunza kugona kutsanangura uchishandisa syntax maitiro emitauro inomisikidzwa nechinhu. Izwi rebasa Kirasi rakagadzirirwa izvi, mushure mezvo iwe unofanirwa kutsanangura zita rekirasi uye kutsanangura muviri wayo mumabhuraketi evashandisi:
class MyClass
{
# тело класса
}
Iyi ichokwadi .NET Core type, ine muviri unotsanangura zvimiro zvayo, nzira, nezvimwe zvinhu. Ngatitarisei muenzaniso wekutsanangura kirasi yakapusa:
class MyClass
{
[string]$Name
[string]$City
[string]$Country
}
Kugadzira chinhu (kirasi muenzaniso), shandisa iyo cmdlet , kana chaiyo yerudzi [MyClass] uye itsva (default mugadziri):
$object = New-Object -TypeName MyClasskana
$object = [MyClass]::new()Ngationgororei chimiro chechinhu:
$object | Get-Member 
Usakanganwa nezve scope: haugone kureva zita remhando setambo kana kushandisa mhando chaiyo kunze kwechinyorwa kana module umo kirasi inotsanangurwa. Muchiitiko ichi, mabasa anogona kudzorera makirasi zviitiko (zvinhu) izvo zvinozowanikwa kunze kwemodule kana script.
Mushure mekugadzira chinhu, zadzisa zvimiro zvayo:
$object.Name = 'Ivan Danko'
$object.City = 'Moscow'
$object.Country = 'Russia'
$object

Ziva kuti tsananguro yekirasi haingotauri chete mhando dzezvivakwa, asiwo dzadzo dzekutanga kukosha:
class Example
{
[string]$Name = 'John Doe'
}
Tsananguro yemhando yekirasi inofanana netsanangudzo yebasa, asi pasina kushandisa izwi rekuita. Sebasa, paramita inopfuudzwa kune nzira kana zvichidikanwa:
class MyClass
{
[string]$Name
[string]$City
[string]$Country
#описание метода
Smile([bool]$param1)
{
If($param1) {
Write-Host ':)'
}
}
}
Iye zvino mumiriri wekirasi yedu anogona kunyemwerera:
$object = [MyClass]::new()
$object.Smile($true)
Nzira dzinogona kuremerwa; nekuwedzera, kirasi ine , pamwe chete nevagadziri vane mazita anoenderana nezita rekirasi pachayo. Kirasi inotsanangurwa mune script kana PowerShell module inogona kushanda sehwaro hweimwe - iyi ndiyo nzira inoshandiswa nhaka. Pakadai, zvinotenderwa kushandisa .NET makirasi aripo seaya ekutanga:
class MyClass2 : MyClass
{
#тело нового класса, базовым для которого является MyClass
}
[MyClass2]::new().Smile($true)
Tsanangudzo yedu yekushanda nezvinhu muPowerShell haina kupera. Mune zvinyorwa zvinotevera, tichaedza kudzamisa nemuenzaniso unoshanda: chinyorwa chechishanu munhevedzano ichapihwa kune nyaya dzekubatanidza PowerShell nevechitatu-bato software zvikamu. Zvikamu zvakapfuura zvinogona kuwanikwa pane zvinongedzo pazasi.
Source: www.habr.com
