Chii chinonzi Windows PowerShell uye chinoshandiswa chii? Chikamu 4: Kushanda nezvinhu, makirasi ako

Chii chinonzi Windows PowerShell uye chinoshandiswa chii? Chikamu 4: Kushanda nezvinhu, makirasi ako

Izvo zvinyorwa zvinobuda zvemirairo muhwindo remuturikiri wePowerShell ingori nzira yekuratidza ruzivo muchimiro chakakodzera kuona kwevanhu. Chaizvoizvo Chitatu oriented kushanda nezvinhu: cmdlets uye mabasa anoagamuchira sekupinza uye akadzokera pakubuda, uye marudzi akasiyana-siyana aripo anopindirana uye muzvinyorwa zvinobva pa.NET makirasi. Muchikamu chechina chenhevedzano, tichadzidza kushanda nezvinhu zvakadzama.

Tafura yezviri mukati:

Zvinhu muPowerShell
Kuona magadzirirwo ezvinhu
Kusefa zvinhu
Kuronga zvinhu
Kusarudza zvinhu uye zvikamu zvavo
ForEach-Object, Group-Object and Measure-Object
Kugadzira .NET uye COM zvinhu (Zvitsva-Chinhu)
Kufonera Static Methods
Nyora PSCustomObject
Kugadzira Wako Makirasi

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. command composition mechanism (conveyor kana pipeline). Murairo wega wega uri mupombi inopfuudza kuburitsa kwayo kune inotevera ichichinjana, chinhu nechinhu. Nekugadzirisa, unogona kushandisa akaunganidzwa cmdlets kana kugadzira yako advanced featureskuita 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:

Chii chinonzi Windows PowerShell uye chinoshandiswa chii? Chikamu 4: Kushanda nezvinhu, makirasi ako

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

Chii chinonzi Windows PowerShell uye chinoshandiswa chii? Chikamu 4: Kushanda nezvinhu, makirasi ako

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 Property

Ruzivo 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 memaparentheses inofanira kunge iri boolean value. Kana chiri chokwadi ($ chokwadi), chinhu chinoiswa kune Iyo-Chinhu cmdlet chichapfuudzwa nepapombi, zvikasadaro ($ nhema) ichadzimwa. Semuenzaniso, ngatiratidze runyorwa rweakamisa Windows Server masevhisi, i.e. avo vane Status pfuma yakaiswa kuti "Yakamira":

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

Chii chinonzi Windows PowerShell uye chinoshandiswa chii? Chikamu 4: Kushanda nezvinhu, makirasi ako

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

Chii chinonzi Windows PowerShell uye chinoshandiswa chii? Chikamu 4: Kushanda nezvinhu, makirasi ako

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 cpu

Iyo -Property parameter inogona kusiiwa kana ichidaidza Rongedza-Chinhu cmdlet; inoshandiswa nekukasira. Kuti udzoke kuronga, shandisa iyo -Descending parameter:

Get-Process | Sort-Object cpu -Descending

Chii chinonzi Windows PowerShell uye chinoshandiswa chii? Chikamu 4: Kushanda nezvinhu, makirasi ako

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

Chii chinonzi Windows PowerShell uye chinoshandiswa chii? Chikamu 4: Kushanda nezvinhu, makirasi ako

Iwe unogona kusarudza chete zvimwe zvivakwa zvezvinhu zvinopfuura nepapombi uye kugadzira zvitsva zvichibva pazviri:

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

Somugumisiro 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

Chii chinonzi Windows PowerShell uye chinoshandiswa chii? Chikamu 4: Kushanda nezvinhu, makirasi ako

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

Chii chinonzi Windows PowerShell uye chinoshandiswa chii? Chikamu 4: Kushanda nezvinhu, makirasi ako

Uchishandisa Select-Object, unogona kuwedzera computed zvivakwa kune zvinhu zvinoda kumiririrwa se hash tables. 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}}

Chii chinonzi Windows PowerShell uye chinoshandiswa chii? Chikamu 4: Kushanda nezvinhu, makirasi ako

Ngatitarisei kuumbwa kwezvinhu zviri kupfuura nemuconveyor:

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

Chii chinonzi Windows PowerShell uye chinoshandiswa chii? Chikamu 4: Kushanda nezvinhu, makirasi ako

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 PropertyName

Kana 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 -Sum

Kazhinji, iwo macmdlets anokurukurwa anoshandiswa kupindirana, uye anowanzo gadzirwa mumanyoro. mabasa neBegin, Process uye End mabhuroko.

Kugadzira .NET uye COM zvinhu (Zvitsva-Chinhu)

Pane zvakawanda zvemapurogiramu ane .NET Core uye COM interfaces anobatsira kune system administrator. Uchishandisa kirasi yeSystem.Diagnostics.EventLog, unogona kugadzirisa matanda ehurongwa zvakananga kubva kuWindows PowerShell. Ngatitarisei muenzaniso wekugadzira muenzaniso wekirasi iyi uchishandisa New-Object cmdlet ine -TypeName parameter:

New-Object -TypeName System.Diagnostics.EventLog

Chii chinonzi Windows PowerShell uye chinoshandiswa chii? Chikamu 4: Kushanda nezvinhu, makirasi ako

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

Chii chinonzi Windows PowerShell uye chinoshandiswa chii? Chikamu 4: Kushanda nezvinhu, makirasi ako

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

Chii chinonzi Windows PowerShell uye chinoshandiswa chii? Chikamu 4: Kushanda nezvinhu, makirasi ako

Ngatitii inocheneswa neiyo Clear() nzira kana paine kodzero dzekuwana:

$AppLog.Clear()

The New-Object cmdlet inoshandiswawo kushanda neCOM components. Kune akawanda kwazvo - kubva kumaraibhurari akapihwa neWindows script server kune ActiveX application, senge Internet Explorer. Kuti ugadzire chinhu cheCOM, unofanirwa kuseta iyo -ComObject parameter ine programmatic ProgId yekirasi yaunoda:

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

Kugadzira 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 static 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

Chii chinonzi Windows PowerShell uye chinoshandiswa chii? Chikamu 4: Kushanda nezvinhu, makirasi ako

Kuti uone chete nhengo dzakasimba, fonera Get-Member ne -Static parameter (ona rudzi rwechinhu):

[System.Environment] | Get-Member -Static

Chii chinonzi Windows PowerShell uye chinoshandiswa chii? Chikamu 4: Kushanda nezvinhu, makirasi ako

Kuti uwane static zvivakwa uye nzira, shandisa maviri akateedzana makoroni panzvimbo yenguva mushure meiyo chaiyo:

[System.Environment]::OSVersion

Kana

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

Chii chinonzi Windows PowerShell uye chinoshandiswa chii? Chikamu 4: Kushanda nezvinhu, makirasi ako

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

Chii chinonzi Windows PowerShell uye chinoshandiswa chii? Chikamu 4: Kushanda nezvinhu, makirasi ako

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

Chii chinonzi Windows PowerShell uye chinoshandiswa chii? Chikamu 4: Kushanda nezvinhu, makirasi ako

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

Chii chinonzi Windows PowerShell uye chinoshandiswa chii? Chikamu 4: Kushanda nezvinhu, makirasi ako

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.

Chii chinonzi Windows PowerShell uye chinoshandiswa chii? Chikamu 4: Kushanda nezvinhu, makirasi ako

Kubvisa zvivakwa, shandisa nzira inoenderana:

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

Kugadzira Wako Makirasi

PowerShell 5.0 yakaunza kugona kutsanangura makirasi 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 Chitsva-Chinhu, kana chaiyo yerudzi [MyClass] uye pseudostatic nzira itsva (default mugadziri):

$object = New-Object -TypeName MyClass

kana

$object = [MyClass]::new()

Ngationgororei chimiro chechinhu:

$object | Get-Member

Chii chinonzi Windows PowerShell uye chinoshandiswa chii? Chikamu 4: Kushanda nezvinhu, makirasi ako

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

Chii chinonzi Windows PowerShell uye chinoshandiswa chii? Chikamu 4: Kushanda nezvinhu, makirasi ako

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 static properties uye nzira, 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.

Chikamu 1: Basic Windows PowerShell Features
Chikamu 2: Nhanganyaya kuWindows PowerShell Programming Mutauro
Chikamu 3: kupfuudza paramita kune zvinyorwa uye mabasa, kugadzira cmdlets

Chii chinonzi Windows PowerShell uye chinoshandiswa chii? Chikamu 4: Kushanda nezvinhu, makirasi ako

Source: www.habr.com

Voeg