Windows PowerShell ke eng mme e sebelisetsoa eng? Karolo ea 4: Ho sebetsa ka lintho, lihlopha tsa hau

Windows PowerShell ke eng mme e sebelisetsoa eng? Karolo ea 4: Ho sebetsa ka lintho, lihlopha tsa hau

Mongolo o hlahisoang ke litaelo fensetereng ea mofetoleli oa PowerShell ke mokhoa feela oa ho hlahisa tlhahisoleseling ka mokhoa o loketseng maikutlo a batho. Hantle-ntle Laboraro oriented ho sebetsa ka dintho: cmdlets le ditshebetso di amohela e le ho kenya le e khutlile ha a tsoa, 'me mefuta e fapaneng e fumanehang ka kopanelo le mengolong e thehiloe ho litlelase tsa .NET. Sehloohong sa bone sa letoto, re tla ithuta ho sebetsa le lintho ka botlalo.

Tafole ea likateng:

Lintho tse ho PowerShell
Ho sheba sebopeho sa dintho
Ho tlhotla dintho
Ho hlopha dintho
Ho khetha lintho le likarolo tsa tsona
ForEach-Object, Group-Object le Measure-Object
Ho theha lintho tsa .NET le COM (New-Object)
Ho letsetsa Mekhoa ea Static
Tlanya PSCustomObject
Ho Iketsetse Lihlopha tsa Hao

Lintho tse ho PowerShell

A re hopoleng hore ntho ke pokello ea masimo a data (thepa, liketsahalo, joalo-joalo) le mekhoa ea ho li sebetsa (mekhoa). Sebopeho sa eona se hlalosoa ke mofuta, oo hangata o itšetlehileng ka lihlopha tse sebelisoang sethaleng se kopaneng sa .NET Core. Hape hoa khoneha ho sebetsa ka lintho tsa COM, CIM (WMI) le ADSI. Thepa le mekhoa lia hlokahala ho etsa liketso tse fapaneng ho data; ho feta moo, ho PowerShell, lintho li ka fetisoa e le likhang ho mesebetsi le cmdlets, tsa abeloa boleng ba tsona ho mefuta-futa, hape ho na le. taelo ea sebopeho sa mochine (conveyor kapa pipeline). Taelo e 'ngoe le e' ngoe e phaepheng e fetisetsa tlhahiso ea eona ho e latelang ka ho latellana, ntho ka ntho. Bakeng sa ts'ebetso, o ka sebelisa cmdlets e hlophisitsoeng kapa oa iketsetsa ea hau likarolo tse tsoetseng peleho etsa maano a fapaneng ka lintho tse ka har'a lipeipi: ho sefa, ho hlophisa, ho hlophisa ka lihlopha, esita le ho fetola sebopeho sa tsona. Ho fetisa lintlha ka foromo ena ho na le molemo o tebileng: sehlopha se amohelang ha se hloke ho fetisa molapo oa byte (mongolo), tlhahisoleseding eohle e hlokahalang e fumanoa habonolo ka ho bitsa thepa le mekhoa e nepahetseng.

Ho sheba sebopeho sa dintho

Mohlala, ha re tsamaise Get-Process cmdlet, e u lumellang ho fumana leseli mabapi le lits'ebetso tse sebetsang tsamaisong:

Windows PowerShell ke eng mme e sebelisetsoa eng? Karolo ea 4: Ho sebetsa ka lintho, lihlopha tsa hau

E tla hlahisa lintlha tse ling tse hlophisitsoeng tse sa faneng ka maikutlo mabapi le thepa ea lintho tse khutlisitsoeng le mekhoa ea tsona. Ho lokisa sephetho hantle, re hloka ho ithuta ho hlahloba sebopeho sa lintho, mme Get-Member cmdlet e tla re thusa ka sena:

Get-Process | Get-Member

Windows PowerShell ke eng mme e sebelisetsoa eng? Karolo ea 4: Ho sebetsa ka lintho, lihlopha tsa hau

Mona re se re ntse re bona mofuta le sebopeho, 'me ka thuso ea li-parameter tse eketsehileng, ka mohlala, re ka bontša feela thepa ea ntho e kenyelelitsoeng ho kenya letsoho:

Get-Process | Get-Member -MemberType Property

Tsebo ena e tla hlokahala ho rarolla mathata a tsamaiso ka kopanelo kapa ho ngola lingoliloeng tsa hau: mohlala, ho fumana leseli mabapi le lits'ebetso tsa ho fanyeha ka ho sebelisa Thepa e Arabang.

Ho tlhotla dintho

PowerShell e lumella lintho tse fihlelang boemo bo itseng hore li fetisetsoe ka liphaephe:

Where-Object { блок сценария }

Sephetho sa ho sebelisa boloko ba mongolo ka har'a masakaneng e tlameha ho ba boleng ba boolean. Haeba e le 'nete ($'nete), ntho e kenyellelitsoeng ho Where-Object cmdlet e tla fetisoa ka pipeline, ho seng joalo ($false) e tla hlakoloa. Ka mohlala, ha re bonts'a lenane la litšebeletso tse emisitsoeng tsa Windows Server, ke hore. bao thepa ea bona ea Boemo e behiloeng ho "Stoped":

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

Windows PowerShell ke eng mme e sebelisetsoa eng? Karolo ea 4: Ho sebetsa ka lintho, lihlopha tsa hau

Mona hape re bona setšoantšo sa mongolo, empa haeba u batla ho utloisisa mofuta le sebopeho sa ka hare sa lintho tse fetang ka pipeline ha ho thata:

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

Windows PowerShell ke eng mme e sebelisetsoa eng? Karolo ea 4: Ho sebetsa ka lintho, lihlopha tsa hau

Ho hlopha dintho

Ha ho etsoa lipeipi tsa lintho, hangata ho na le tlhokahalo ea ho li hlophisa. The Sort-Object cmdlet e fetisetsoa mabitso a thepa (linotlolo tsa ho hlopha) le ho khutlisa lintho tse laetsoeng ke boleng ba tsona. Ho bonolo ho hlophisa tlhahiso ea lits'ebetso ka nako ea CPU e sebelisitsoeng (thepa ea cpu):

Get-Process | Sort-Object –Property cpu

The -Property parameter e ka siuoa ha u bitsa Sort-Object cmdlet; e sebelisoa ka ho sa feleng. Bakeng sa ho hlophisa ka morao, sebelisa -Descending parameter:

Get-Process | Sort-Object cpu -Descending

Windows PowerShell ke eng mme e sebelisetsoa eng? Karolo ea 4: Ho sebetsa ka lintho, lihlopha tsa hau

Ho khetha lintho le likarolo tsa tsona

The Select-Object cmdlet eu lumella ho khetha palo e itseng ea lintho qalong kapa qetellong ea pipeline u sebelisa -First or -Last parameters. Ka thuso ea eona, o ka khetha lintho tse le 'ngoe kapa thepa e itseng, hape o theha lintho tse ncha tse thehiloeng ho tsona. Ha re shebeng hore na cmdlet e sebetsa joang re sebelisa mehlala e bonolo.

Taelo e latelang e bonts'a tlhahisoleseling mabapi le lits'ebetso tse 10 tse jang boholo ba RAM (thepa ea WS):

Get-Process | Sort-Object WS -Descending | Select-Object -First 10

Windows PowerShell ke eng mme e sebelisetsoa eng? Karolo ea 4: Ho sebetsa ka lintho, lihlopha tsa hau

U ka khetha feela thepa e itseng ea lintho tse fetang pompong 'me u thehe tse ncha ho latela tsona:

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

Ka lebaka la ts'ebetso ea liphaephe, re tla fumana ntho e ncha, eo sebopeho sa eona se tla fapana le sebopeho se khutlisitsoeng ke Get-Process cmdlet. Ha re netefatse sena re sebelisa Get-Member:

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

Windows PowerShell ke eng mme e sebelisetsoa eng? Karolo ea 4: Ho sebetsa ka lintho, lihlopha tsa hau

Hlokomela hore Select-Object e khutlisa ntho e le 'ngoe (-First 1) e nang le likarolo tse peli feela tseo re li boletseng: boleng ba bona bo kopitsoe ho tloha nthong ea pele e fetiselitsoeng pompong ke Get-Process cmdlet. E 'ngoe ea litsela tsa ho theha lintho ka har'a lingoloa tsa PowerShell e ipapisitse le ho sebelisa Khetha-Sebaka:

$obj = Get-Process | Select-Object ProcessName, Id -First 1
$obj.GetType()

Windows PowerShell ke eng mme e sebelisetsoa eng? Karolo ea 4: Ho sebetsa ka lintho, lihlopha tsa hau

U sebelisa Select-Object, u ka eketsa thepa e bakiloeng ho lintho tse hlokang ho emeloa joalo ka litafole tsa hash. Tabeng ena, boleng ba senotlolo sa eona sa pele bo lumellana le lebitso la thepa, 'me boleng ba senotlolo sa bobeli bo lumellana le boleng ba thepa bakeng sa karolo ea hona joale ea pipeline:

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

Windows PowerShell ke eng mme e sebelisetsoa eng? Karolo ea 4: Ho sebetsa ka lintho, lihlopha tsa hau

Ha re shebeng sebopeho sa lintho tse fetang har'a conveyor:

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

Windows PowerShell ke eng mme e sebelisetsoa eng? Karolo ea 4: Ho sebetsa ka lintho, lihlopha tsa hau

ForEach-Object, Group-Object le Measure-Object

Ho na le li-cmdlets tse ling tsa ho sebetsa ka lintho. Ka mohlala, ha re bue ka tse tharo tse molemo ka ho fetisisa:

Bakeng sa Each-Object e o lumella ho tsamaisa khoutu ea PowerShell bakeng sa ntho e 'ngoe le e 'ngoe e pompong:

ForEach-Object { блок сценария }

Sehlopha-Sepheo lihlopha tsa lintho ka boleng ba thepa:

Group-Object PropertyName

Haeba u e tsamaisa ka -NoElement parameter, u ka fumana palo ea likarolo lihlopheng.

Lekanya-Ntho e kopanya liparamente tse fapaneng tsa kakaretso ka boleng ba sebaka sa ntho e phaepheng (e bala kakaretso, hape e fumana bonyane, boholo kapa boleng bo tloaelehileng):

Measure-Object -Property PropertyName -Minimum -Maximum -Average -Sum

Ka tloaelo, li-cmdlets tseo ho buisanoeng ka tsona li sebelisoa ka mokhoa o kopanetsoeng, 'me hangata li bōptjoa ka mangolo. mesebetsi ka li-blocks tsa Qala, Ts'ebetso le Qetella.

Ho theha lintho tsa .NET le COM (New-Object)

Ho na le lisebelisoa tse ngata tsa software tse nang le .NET Core le COM interfaces tse molemo ho batsamaisi ba tsamaiso. U sebelisa sehlopha sa System.Diagnostics.EventLog, u ka khona ho laola lintlha tsa tsamaiso ka ho toba ho Windows PowerShell. Ha re shebeng mohlala oa ho theha mohlala oa sehlopha sena ho sebelisa New-Object cmdlet ka -TypeName parameter:

New-Object -TypeName System.Diagnostics.EventLog

Windows PowerShell ke eng mme e sebelisetsoa eng? Karolo ea 4: Ho sebetsa ka lintho, lihlopha tsa hau

Kaha ha rea ​​ka ra hlakisa tlaleho e itseng ea ketsahalo, mohlala o hlahang oa sehlopha ha o na data. Ho fetola sena, o hloka ho letsetsa mokhoa o khethehileng oa sehahi nakong ea popo ea ona o sebelisa parameter -ArgumentList. Haeba re batla ho fihlella lenane la kopo, re lokela ho fetisa khoele "Kopo" e le khang ho moetsi:

$AppLog = New-Object -TypeName System.Diagnostics.EventLog -ArgumentList Application
$AppLog

Windows PowerShell ke eng mme e sebelisetsoa eng? Karolo ea 4: Ho sebetsa ka lintho, lihlopha tsa hau

Ka kopo hlokomela hore re bolokile tlhahiso ea taelo ho $AppLog e feto-fetohang. Le hoja lipeipi li atisa ho sebelisoa ka mokhoa oa ho sebelisana, ho ngola mangolo hangata ho hloka hore ho lule ho buuoa ka ntho. Ho phaella moo, litlelase tsa mantlha tsa .NET Core li fumaneha sebakeng sa mabitso sa Sistimi: PowerShell ka mokhoa o ikhethileng e sheba mefuta e boletsoeng ho eona, kahoo ho ngola Diagnostics.EventLog sebakeng sa System.Diagnostics.EventLog e nepahetse.

Ho sebetsa le log, o ka sebelisa mekhoa e nepahetseng:

$AppLog | Get-Member -MemberType Method

Windows PowerShell ke eng mme e sebelisetsoa eng? Karolo ea 4: Ho sebetsa ka lintho, lihlopha tsa hau

Ha re re e hlakotsoe ke mokhoa o hlakileng () haeba ho na le litokelo tsa phihlello:

$AppLog.Clear()

The New-Object cmdlet e boetse e sebelisoa ho sebetsa le likarolo tsa COM. Ho na le tse ngata haholo tsa tsona - ho tloha lilaebraring tse fanoeng ka Windows script server ho ea ho ActiveX applications, tse kang Internet Explorer. Ho theha ntho ea COM, o hloka ho beha parameter ea -ComObject ka ProgId ea lenaneo la sehlopha se lakatsehang:

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

Ho iketsetsa lintho tsa hau ka sebopeho se sa lumellaneng, ho sebelisa New-Object ho bonahala e le ntho ea khale haholo ebile e le boima; cmdlet ena e sebelisetsoa ho sebetsa le likarolo tsa software kantle ho PowerShell. Lihloohong tse tlang ho tla tšohloa taba ena ka ho qaqileng haholoanyane. Ntle le lintho tsa .NET le COM, re tla boela re hlahlobe lintho tsa CIM (WMI) le ADSI.

Ho letsetsa Mekhoa ea Static

Lithuto tse ling tsa .NET Core li ke ke tsa theoa, ho kenyeletsoa System.Environment le System.Math. Ke e tsitsitseng 'me e na le litšobotsi le mekhoa e tsitsitseng feela. Tsena ke lilaebrari tsa litšupiso tse sebelisoang ntle le ho theha lintho. U ka bua ka sehlopha sa static ka lentsoe ka ho kenya lebitso la mofuta ka masakaneng a sekoere. Leha ho le joalo, haeba re sheba sebopeho sa ntho e sebelisang Get-Member, re tla bona mofuta oa System.RuntimeType sebakeng sa System.Tikoloho:

[System.Environment] | Get-Member

Windows PowerShell ke eng mme e sebelisetsoa eng? Karolo ea 4: Ho sebetsa ka lintho, lihlopha tsa hau

Ho sheba litho tse emeng feela, letsetsa Get-Member ka -Static parameter (hlokomela mofuta oa ntho):

[System.Environment] | Get-Member -Static

Windows PowerShell ke eng mme e sebelisetsoa eng? Karolo ea 4: Ho sebetsa ka lintho, lihlopha tsa hau

Ho fihlella thepa le mekhoa e tsitsitseng, sebelisa li-colon tse peli tse latellanang ho e-na le nako ka mor'a ea sebele:

[System.Environment]::OSVersion

Kapa

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

Windows PowerShell ke eng mme e sebelisetsoa eng? Karolo ea 4: Ho sebetsa ka lintho, lihlopha tsa hau

Tlanya PSCustomObject

Har'a mefuta e mengata ea data e fumanehang ho PowerShell, ho bohlokoa ho bua ka PSCustomObject, e etselitsoeng ho boloka lintho tse nang le sebopeho se ikhethileng. Ho theha ntho e joalo ho sebelisa New-Object cmdlet ho nkoa e le mokhoa oa khale, empa o boima ebile o siiloe ke nako:

$object = New-Object  –TypeName PSCustomObject -Property @{Name = 'Ivan Danko'; 
                                          City = 'Moscow';
                                          Country = 'Russia'}

Ha re shebeng sebopeho sa ntho:

$object | Get-Member

Windows PowerShell ke eng mme e sebelisetsoa eng? Karolo ea 4: Ho sebetsa ka lintho, lihlopha tsa hau

Ho qala ka PowerShell 3.0, syntax e 'ngoe ea fumaneha:

$object = [PSCustomObject]@{Name = 'Ivan Danko'; 
                                          City = 'Moscow';
                                          Country = 'Russia'
}

U ka fumana data ka e 'ngoe ea litsela tse tšoanang:

$object.Name

$object.'Name'

$value = 'Name'
$object.$value

Mohlala ke ona oa ho fetolela hashtable e teng ho ntho:

$hash = @{'Name'='Ivan Danko'; 'City'='Moscow'; 'Country'='Russia'}
$hash.GetType()
$object = [pscustomobject]$hash
$object.GetType()

Windows PowerShell ke eng mme e sebelisetsoa eng? Karolo ea 4: Ho sebetsa ka lintho, lihlopha tsa hau

E 'ngoe ea likotsi tsa lintho tsa mofuta ona ke hore tatellano ea thepa ea bona e ka fetoha. Ho qoba sena, o tlameha ho sebelisa tšobotsi [e laetsoeng]:

$object = [PSCustomObject][ordered]@{Name = 'Ivan Danko'; 
                                          City = 'Moscow';
                                          Country = 'Russia'
}

Ho na le likhetho tse ling tsa ho theha ntho: ka holimo re shebile ho sebelisa cmdlet Khetha-Ntho. Sohle se setseng ke ho tseba ho eketsa le ho tlosa likarolo. Ho etsa sena bakeng sa ntho e tsoang mohlaleng o fetileng ho bonolo haholo:

$object | Add-Member –MemberType NoteProperty –Name Age  –Value 33
$object | Get-Member

Windows PowerShell ke eng mme e sebelisetsoa eng? Karolo ea 4: Ho sebetsa ka lintho, lihlopha tsa hau

The Add- Member cmdlet e u lumella hore u se ke ua eketsa thepa feela, empa hape le mekhoa ho ntho ea $ e entsoeng pele ka ho sebelisa "-MemberType ScriptMethod" ea ho haha:

$ScriptBlock = {
    # код 
}
$object | Add-Member -Name "MyMethod" -MemberType ScriptMethod -Value $ScriptBlock
$object | Get-Member

Ka kopo hlokomela hore re sebelisitse mofuta oa $ScriptBlock oa mofuta oa ScriptBlock ho boloka khoutu ea mokhoa o mocha.

Windows PowerShell ke eng mme e sebelisetsoa eng? Karolo ea 4: Ho sebetsa ka lintho, lihlopha tsa hau

Ho tlosa thepa, sebelisa mokhoa o lumellanang:

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

Ho Iketsetse Lihlopha tsa Hao

PowerShell 5.0 e hlahisitse bokhoni ba ho hlalosa lihlopha ho sebelisa sebopeho sa syntax sa lipuo tse hlophisitsoeng tse shebaneng le ntho. Lentsoe la ts'ebeletso Class le etselitsoe sena, ka mor'a moo o lokela ho bolela lebitso la sehlopha le ho hlalosa 'mele oa sona ka masakaneng a opareitara:

class MyClass
{
    # тело класса
}

Ena ke 'nete ea mofuta oa NET Core, o nang le' mele o hlalosang thepa ea oona, mekhoa le likarolo tse ling. Ha re shebeng mohlala oa ho hlalosa sehlopha se bonolo ka ho fetisisa:

class MyClass 
{
     [string]$Name
     [string]$City
     [string]$Country
}

Ho theha ntho (mohlala oa sehlopha), sebelisa cmdlet Ntho e Ncha, kapa mofuta oa sebele [MyClass] le mokhoa oa pseudostatic e ncha (sehahi sa kamehla):

$object = New-Object -TypeName MyClass

kapa

$object = [MyClass]::new()

Ha re hlahlobeng sebopeho sa ntho:

$object | Get-Member

Windows PowerShell ke eng mme e sebelisetsoa eng? Karolo ea 4: Ho sebetsa ka lintho, lihlopha tsa hau

Se ke oa lebala ka scope: u ke ke ua bitsa mofuta oa lebitso joalo ka khoele kapa ua sebelisa mofuta o itseng kantle ho mongolo kapa mojule oo sehlopha se hlalosoang ho ona. Tabeng ena, mesebetsi e ka khutlisa maemo a sehlopha (lintho) tse tla fumaneha ka ntle ho module kapa script.

Kamora ho theha ntho, tlatsa thepa ea eona:

$object.Name = 'Ivan Danko'
$object.City = 'Moscow'
$object.Country = 'Russia'
$object

Windows PowerShell ke eng mme e sebelisetsoa eng? Karolo ea 4: Ho sebetsa ka lintho, lihlopha tsa hau

Hlokomela hore tlhaloso ea sehlopha ha e bolele feela mefuta ea thepa, empa hape le boleng ba eona ba kamehla:

class Example
{
     [string]$Name = 'John Doe'
}

Tlhaloso ea mokhoa oa sehlopha e tšoana le tlhaloso ea mosebetsi, empa ntle le ho sebelisa lentsoe la mosebetsi. Joalo ka ts'ebetsong, liparamente li fetisetsoa mekhoeng haeba ho hlokahala:

class MyClass 
{
     [string]$Name
     [string]$City
     [string]$Country
     
     #описание метода
     Smile([bool]$param1)
     {
         If($param1) {
            Write-Host ':)'
         }
     }
}

Joale moemeli oa sehlopha sa rona a ka bososela:

$object = [MyClass]::new()
$object.Smile($true)

Mekhoa e ka imeloa; ho feta moo, sehlopha se na le thepa le mekhoa e tsitsitseng, hammoho le bahahi bao mabitso a bona a lumellanang le lebitso la sehlopha ka boeona. Sehlopha se hlalositsoeng ka har'a script kapa module ea PowerShell e ka sebetsa e le motheo oa e 'ngoe - ke kamoo lefa le kenngoa ts'ebetsong. Tabeng ena, e lumelloa ho sebelisa lihlopha tse teng tsa .NET e le tsa motheo:

class MyClass2 : MyClass
{
      #тело нового класса, базовым для которого является MyClass
}
[MyClass2]::new().Smile($true)

Tlhaloso ea rona ea ho sebetsa ka lintho ho PowerShell ha e felle ka letho. Likhatisong tse latelang, re tla leka ho e tebisa ka mehlala e sebetsang: sengoloa sa bohlano letotong le tla neheloa litabeng tsa ho kopanya PowerShell le likarolo tsa software tsa mokha oa boraro. Likarolo tse fetileng li ka fumanoa lihokelong tse ka tlase.

Karolo ea 1: Likarolo tsa Motheo tsa Windows PowerShell
Karolo ea 2: Selelekela ho Windows PowerShell Programming Language
Karolo ea 3: ho fetisa liparamente ho lingoloa le mesebetsi, ho theha cmdlets

Windows PowerShell ke eng mme e sebelisetsoa eng? Karolo ea 4: Ho sebetsa ka lintho, lihlopha tsa hau

Source: www.habr.com

Eketsa ka tlhaloso