Kedu ihe bụ Windows PowerShell na kedu ihe eji ya? Akụkụ 4: Na-arụ ọrụ na ihe, klaasị nke ya

Kedu ihe bụ Windows PowerShell na kedu ihe eji ya? Akụkụ 4: Na-arụ ọrụ na ihe, klaasị nke ya

Mwepụta ederede nke iwu dị na windo ntụgharị PowerShell bụ naanị ụzọ isi gosipụta ozi n'ụdị dabara adaba maka nghọta mmadụ. N'ezie Wednesday gbakwasara ala iji ihe na-arụ ọrụ: cmdlets na ọrụ na-enweta ha dị ka ntinye na laghachiri na ọpụpụ, na ụdị mgbanwe dị na mmekọrịta yana na script dabere na klas NET. N'isiokwu nke anọ nke usoro isiokwu a, anyị ga-amụ ịrụ ọrụ na ihe n'ụzọ zuru ezu karị.

Tebulu ọdịnaya:

Ihe dị na PowerShell
Na-elele nhazi nke ihe
Ihe nzacha
Nhazi ihe
Ịhọrọ ihe na akụkụ ha
Maka ihe ọ bụla, ihe otu na ihe atụ
Ịmepụta ihe NET na COM (Ihe Ọhụrụ)
Usoro ịkpọ oku
Ụdị PSCustomObject
Ịmepụta klas nke gị

Ihe dị na PowerShell

Ka anyị cheta na ihe bụ nchịkọta data ubi (ihe onwunwe, ihe omume, wdg) na ụzọ maka nhazi ha (usoro). A na-akọwapụta usoro ya site n'ụdị, nke na-adaberekarị na klaasị ejiri na ikpo okwu NET Core jikọtara ọnụ. Enwere ike iji COM, CIM (WMI) na ihe ADSI rụọ ọrụ. Ngwongwo na ụzọ dị mkpa iji rụọ ọrụ dị iche iche na data; na mgbakwunye, na PowerShell, enwere ike ibufe ihe dị ka arụmụka na ọrụ na cmdlets, kenye ụkpụrụ ha na mgbanwe dị iche iche, yana e nwekwara usoro mejupụtara iwu (onye na-ebugharị ma ọ bụ pipeline). Iwu ọ bụla dị na pipeline na-ebufe mmepụta ya na nke na-esote, ihe site na ihe. Maka nhazi, ịnwere ike iji cmdlets achịkọtara ma ọ bụ mepụta nke gị elu atụmatụiji mee mgbanwe dị iche iche na ihe dị na pipeline: nzacha, nhazi, nhazi, na ọbụna ịgbanwe nhazi ha. Ịnyefe data n'ụdị a nwere nnukwu uru: otu ndị na-anata adịghị mkpa ka ha nyochaa iyi nke bytes (ederede), ozi niile dị mkpa na-enweta ngwa ngwa site n'ịkpọ akụrụngwa na ụzọ kwesịrị ekwesị.

Na-elele nhazi nke ihe

Dịka ọmụmaatụ, ka anyị mee cmdlet Get-Process, nke na-enye gị ohere ịnweta ozi gbasara usoro na-agba ọsọ na sistemụ:

Kedu ihe bụ Windows PowerShell na kedu ihe eji ya? Akụkụ 4: Na-arụ ọrụ na ihe, klaasị nke ya

Ọ ga-egosipụta ụfọdụ data ederede ahaziri nke na-enyeghị echiche ọ bụla gbasara njirimara nke ihe eweghachiri na ụzọ ha. Iji mezie mmepụta, anyị kwesịrị ịmụta ka esi enyocha nhazi nke ihe, na Get-Member cmdlet ga-enyere anyị aka na nke a:

Get-Process | Get-Member

Kedu ihe bụ Windows PowerShell na kedu ihe eji ya? Akụkụ 4: Na-arụ ọrụ na ihe, klaasị nke ya

N'ebe a, anyị ahụlarị ụdị na nhazi ahụ, site n'enyemaka nke paramita ndị ọzọ anyị nwere ike, dịka ọmụmaatụ, gosipụta naanị njirimara nke ihe ahụ gụnyere na ntinye:

Get-Process | Get-Member -MemberType Property

Ọmụma a ga-adị mkpa iji dozie nsogbu nchịkwa na mmekọrịta ma ọ bụ iji dee edemede nke gị: dịka ọmụmaatụ, iji nweta ozi gbasara usoro kwụgburu site na iji ihe nzaghachi.

Ihe nzacha

PowerShell na-enye ohere ka ebufe ihe ndị na-ezute ọnọdụ ụfọdụ site na pipeline:

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

Nsonaazụ nke ime ihe mgbochi script n'ime mmuke ga-abụrịrị uru boolean. Ọ bụrụ na ọ bụ eziokwu ($ ezi), ihe a na-etinye na Where-Object cmdlet ga-agafe na pipeline, ma ọ bụghị ($ ụgha) a ga-ehichapụ ya. Dịka ọmụmaatụ, ka anyị gosipụta ndepụta ọrụ Windows Server kwụsịrị, ya bụ. ndị ọnọdụ ha ka edobere ka “Kwụsị”:

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

Kedu ihe bụ Windows PowerShell na kedu ihe eji ya? Akụkụ 4: Na-arụ ọrụ na ihe, klaasị nke ya

N'ebe a ọzọ, anyị na-ahụ ihe nnọchianya nke ederede, ma ọ bụrụ na ịchọrọ ịghọta ụdị na nhazi nke ihe ndị na-agafe na pipeline adịghị esiri ike:

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

Kedu ihe bụ Windows PowerShell na kedu ihe eji ya? Akụkụ 4: Na-arụ ọrụ na ihe, klaasị nke ya

Nhazi ihe

Mgbe nhazi pipeline nke ihe, a na-enwekarị mkpa ịhazi ha. Ụdị-Ihe cmdlet na-agafe aha njirimara (igodo nhazi) wee weghachi ihe ndị ejiri ụkpụrụ ha nyere iwu. Ọ dị mfe ịhazi mmepụta nke usoro ịgba ọsọ site na oge CPU ejiri (cpu property):

Get-Process | Sort-Object –Property cpu

Enwere ike ịhapụ paramita -Property mgbe ị na-akpọ Ụdị-Object cmdlet; a na-eji ya na ndabara. Maka nhazi ntụgharị, jiri paramita -Descending:

Get-Process | Sort-Object cpu -Descending

Kedu ihe bụ Windows PowerShell na kedu ihe eji ya? Akụkụ 4: Na-arụ ọrụ na ihe, klaasị nke ya

Ịhọrọ ihe na akụkụ ha

cmdlet Select-Object na-enye gị ohere ịhọrọ ọnụọgụ ihe akọwapụtara na mmalite ma ọ bụ njedebe nke pipeline site na iji paramita -First ma ọ bụ -Last. Site n'enyemaka ya, ị nwere ike họrọ otu ihe ma ọ bụ ụfọdụ ihe onwunwe, ma mepụtakwa ihe ọhụrụ dabere na ha. Ka anyị lee ka cmdlet si arụ ọrụ site na iji atụ dị mfe.

Iwu a na-egosiputa ozi gbasara usoro iri na-eri oke RAM (ihe WS):

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

Kedu ihe bụ Windows PowerShell na kedu ihe eji ya? Akụkụ 4: Na-arụ ọrụ na ihe, klaasị nke ya

Ị nwere ike ịhọrọ naanị ụfọdụ akụrụngwa nke ihe na-agafe na pipeline wee mepụta nke ọhụrụ dabere na ha:

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

N'ihi ọrụ nke pipeline, anyị ga-enweta ihe ọhụrụ, nhazi ya ga-adị iche na nhazi nke Get-Process cmdlet weghachiri. Ka anyị jiri Get-Member nyochaa nke a:

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

Kedu ihe bụ Windows PowerShell na kedu ihe eji ya? Akụkụ 4: Na-arụ ọrụ na ihe, klaasị nke ya

Rịba ama na Select-Object na-eweghachi otu ihe (-First 1) nke nwere naanị abụọ n'ime ubi anyị kwuru: e depụtaghachiri ụkpụrụ ha site na ihe mbụ gafere n'ime pipeline site na Get-Process cmdlet. Otu n'ime ụzọ isi mepụta ihe na edemede PowerShell dabere na iji Họrọ-Ihe:

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

Kedu ihe bụ Windows PowerShell na kedu ihe eji ya? Akụkụ 4: Na-arụ ọrụ na ihe, klaasị nke ya

Iji Họrọ-Ihe, ị nwere ike itinye akụrụngwa agbakọtara na ihe ndị achọrọ ka egosipụta ya dị ka tebụl hash. N'okwu a, uru nke igodo mbụ ya dabara na aha ihe onwunwe, na uru nke igodo nke abụọ kwekọrọ na uru ihe onwunwe maka mmewere pipeline dị ugbu a:

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

Kedu ihe bụ Windows PowerShell na kedu ihe eji ya? Akụkụ 4: Na-arụ ọrụ na ihe, klaasị nke ya

Ka anyị leba anya n'usoro ihe ndị na-agafe na ebu:

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

Kedu ihe bụ Windows PowerShell na kedu ihe eji ya? Akụkụ 4: Na-arụ ọrụ na ihe, klaasị nke ya

Maka ihe ọ bụla, ihe otu na ihe atụ

Enwere cmdlets ndị ọzọ maka iji ihe arụ ọrụ. Dịka ọmụmaatụ, ka anyị kwuo maka atọ kacha baa uru:

ForEach-Ebumnuche na-enye gị ohere ịme koodu PowerShell maka ihe ọ bụla dị na pipeline:

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

Otu-Ihe otu ihe site na uru akụrụngwa:

Group-Object PropertyName

Ọ bụrụ na ị na-eji paramita -NoElement na-agba ya, ị nwere ike chọpụta ọnụọgụ nke ihe dị na otu.

Atụ-Ihe na-achịkọta paramita nchịkọta dị iche iche site na uru ubi ihe dị na pipeline (na-agbakọ nchikota, ma chọpụtakwa nke kacha nta, kacha ma ọ bụ nkezi uru):

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

Dịka, cmdlets a tụlere ka a na-eji emekọrịta ihe, a na-ekekarịkwa ya na edemede. ọrụ na mmalite, Usoro na njedebe blocks.

Ịmepụta ihe NET na COM (Ihe Ọhụrụ)

Enwere ọtụtụ ngwa ngwa nwere oghere NET Core na COM bara uru nye ndị nchịkwa sistemụ. Iji klaasị System.Diagnostics.EventLog, ị nwere ike ijikwa ndekọ sistemụ ozugbo site na Windows PowerShell. Ka anyị lee ihe atụ nke imepụta ihe atụ nke klaasị a site na iji cmdlet New-Object nwere oke -TypeName:

New-Object -TypeName System.Diagnostics.EventLog

Kedu ihe bụ Windows PowerShell na kedu ihe eji ya? Akụkụ 4: Na-arụ ọrụ na ihe, klaasị nke ya

Ebe ọ bụ na anyị akọwapụtaghị otu ndekọ ihe omume akọwapụtara, ihe atụ nke klas ahụ enweghị data. Iji gbanwee nke a, ịkwesịrị ịkpọ usoro ihe nrụpụta pụrụ iche n'oge okike ya site na iji paramita -ArgumentList. Ọ bụrụ na anyị chọrọ ịnweta log log, anyị kwesịrị ịfefe eriri "Ngwa" dị ka arụmụka nye onye nrụpụta:

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

Kedu ihe bụ Windows PowerShell na kedu ihe eji ya? Akụkụ 4: Na-arụ ọrụ na ihe, klaasị nke ya

Biko mara na anyị chekwara mpụta nke iwu ahụ na mgbanwe $AppLog. Ọ bụ ezie na a na-ejikarị pipeline eme ihe na ọnọdụ mmekọrịta, script na-achọkarị idobe ntụaka maka ihe. Ọzọkwa, isi .NET Core klaasị dị na Sistemu ahaspace: PowerShell na ndabara na-achọ ụdị akọwapụtara na ya, yabụ dee Diagnostics.EventLog kama System.Diagnostics.EventLog ziri ezi.

Iji rụọ ọrụ na log, ị nwere ike iji usoro kwesịrị ekwesị:

$AppLog | Get-Member -MemberType Method

Kedu ihe bụ Windows PowerShell na kedu ihe eji ya? Akụkụ 4: Na-arụ ọrụ na ihe, klaasị nke ya

Ka anyị kwuo na ejiri usoro Clear() kpochapụ ya ma ọ bụrụ na enwere ikike ịnweta:

$AppLog.Clear()

A na-ejikwa cmdlet Ọhụrụ-Object arụ ọrụ na ngwa COM. Enwere ọtụtụ n'ime ha - site na ọba akwụkwọ ewepụtara na sava script Windows gaa na ngwa ActiveX, dị ka Internet Explorer. Iji mepụta ihe COM, ịkwesịrị ịtọ ntọala -ComObject na ProgId mmemme nke klaasị achọrọ:

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

Iji mepụta ihe nke gị nwere usoro aka ike, iji New-Object dị ka ihe na-adịghị mma na nke siri ike; cmdlet a na-eji ngwa ngwa arụ ọrụ na mpụga PowerShell. N'isiokwu ndị na-abịa n'ihu, a ga-atụlekwu okwu a n'ụzọ zuru ezu. Na mgbakwunye na ihe NET na COM, anyị ga-enyocha CIM (WMI) na ihe ADSI.

Usoro ịkpọ oku

Ụfọdụ .NET Core klaasị enweghị ike ozugbo, gụnyere System.Environment na System.Math. Ha bụ static ma nwere naanị akụrụngwa na ụzọ kwụ ọtọ. Ndị a bụ ụlọ akwụkwọ nrụtụ aka nke a na-eji na-emepụtaghị ihe. Ị nwere ike na-ezo aka na klaasị static site na nkịtị site na itinye ụdị aha ahụ na brackets square. Otú ọ dị, ọ bụrụ na anyị elee nhazi nke ihe ahụ site na iji Get-Member, anyị ga-ahụ ụdị System.RuntimeType kama System.Environment:

[System.Environment] | Get-Member

Kedu ihe bụ Windows PowerShell na kedu ihe eji ya? Akụkụ 4: Na-arụ ọrụ na ihe, klaasị nke ya

Ka ilele naanị ndị otu kwụ ọtọ, kpọọ Get-Member nwere paramita -Static (rịba ama ụdị ihe):

[System.Environment] | Get-Member -Static

Kedu ihe bụ Windows PowerShell na kedu ihe eji ya? Akụkụ 4: Na-arụ ọrụ na ihe, klaasị nke ya

Iji nweta akụrụngwa na ụzọ kwụ ọtọ, jiri colons abụọ na-esochi anya kama oge mgbe nke a gachara:

[System.Environment]::OSVersion

Ma ọ bụ

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

Kedu ihe bụ Windows PowerShell na kedu ihe eji ya? Akụkụ 4: Na-arụ ọrụ na ihe, klaasị nke ya

Ụdị PSCustomObject

N'ime ọtụtụ ụdị data dị na PowerShell, ọ bara uru ịkpọ PSCustomObject, emebere maka ịchekwa ihe nwere usoro aka ike. A na-ahụta imepụta ihe dị otú ahụ site na iji New-Object cmdlet dị ka kpochapụla, mana ụzọ siri ike na nke ochie:

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

Ka anyị leba anya n'usoro ihe ahụ:

$object | Get-Member

Kedu ihe bụ Windows PowerShell na kedu ihe eji ya? Akụkụ 4: Na-arụ ọrụ na ihe, klaasị nke ya

Malite na PowerShell 3.0, syntax ọzọ dị:

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

Ị nwere ike ịnweta data ahụ n'otu n'ime ụzọ ndị ahụ:

$object.Name

$object.'Name'

$value = 'Name'
$object.$value

Nke a bụ ọmụmaatụ nke ịtụgharị hashtable dị adị ka ọ bụrụ ihe:

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

Kedu ihe bụ Windows PowerShell na kedu ihe eji ya? Akụkụ 4: Na-arụ ọrụ na ihe, klaasị nke ya

Otu n'ime ihe ọjọọ nke ihe ndị dị otú a bụ na usoro nke ihe onwunwe ha nwere ike ịgbanwe. Iji zere nke a, ị ga-ejirịrị njirimara [nyere iwu]:

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

Enwere nhọrọ ndị ọzọ maka ịmepụta ihe: n'elu anyị lere anya iji cmdlet Họrọ-Ebumnuche. Naanị ihe fọdụrụ bụ ịchọpụta ịgbakwunye na iwepu ihe. Ime nke a maka ihe site na ihe atụ gara aga dị nnọọ mfe:

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

Kedu ihe bụ Windows PowerShell na kedu ihe eji ya? Akụkụ 4: Na-arụ ọrụ na ihe, klaasị nke ya

cmdlet Tinye-Member na-enye gị ohere itinye ọ bụghị naanị akụrụngwa, kamakwa usoro na ihe $ ihe emebere na mbụ site na iji “-MemberType ScriptMethod” rụrụ:

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

Biko mara na anyị jiri ụdị ScriptBlock mgbanwe $ScriptBlock chekwaa koodu maka usoro ọhụrụ ahụ.

Kedu ihe bụ Windows PowerShell na kedu ihe eji ya? Akụkụ 4: Na-arụ ọrụ na ihe, klaasị nke ya

Iji wepu akụrụngwa, jiri usoro kwekọrọ:

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

Ịmepụta klas nke gị

PowerShell 5.0 webatara ikike ịkọwapụta ọmụmụ na-eji njirimara syntax nke asụsụ mmemme gbadoro ụkwụ na ihe. Ezubere okwu ọrụ Klas maka nke a, emesịa ị ga-akọwapụta aha klaasị ma kọwaa ahụ ya na brackets ndị ọrụ:

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

Nke a bụ eziokwu .NET Core ụdị, nwere ahụ na-akọwa njirimara ya, ụzọ ya na ihe ndị ọzọ. Ka anyị lee ihe atụ nke ịkọwapụta klas kacha mfe:

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

Iji mepụta ihe (ihe atụ klaasị), jiri cmdlet Ihe ọhụrụ, ma ọ bụ ụdị nkịtị [MyClass] na usoro pseudostatic ọhụrụ (onye nrụpụta mbụ):

$object = New-Object -TypeName MyClass

ma ọ bụ

$object = [MyClass]::new()

Ka anyị nyochaa nhazi nke ihe ahụ:

$object | Get-Member

Kedu ihe bụ Windows PowerShell na kedu ihe eji ya? Akụkụ 4: Na-arụ ọrụ na ihe, klaasị nke ya

Echefula banyere obosara: ị nweghị ike ịtu aka na ụdị aha dị ka eriri ma ọ bụ jiri ụdị nkịtị na-abụghị edemede ma ọ bụ modul nke akọwapụtara klas ahụ. N'okwu a, ọrụ nwere ike weghachi klas (ihe) nke a ga-enweta na mpụga modul ma ọ bụ edemede.

Mgbe ịmepụtachara ihe ahụ, dejupụta akụrụngwa ya:

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

Kedu ihe bụ Windows PowerShell na kedu ihe eji ya? Akụkụ 4: Na-arụ ọrụ na ihe, klaasị nke ya

Rịba ama na nkọwa klas ahụ na-akọwapụta ọ bụghị naanị ụdị akụrụngwa, kamakwa ụkpụrụ ndabara ha:

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

Nkọwa nke usoro klaasị yiri nkọwa nke ọrụ, mana na-ejighi okwu ọrụ. Dị ka ọ dị na ọrụ, a na-agafe paramita na usoro ma ọ bụrụ na ọ dị mkpa:

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

Ugbu a onye nnọchi anya klaasị anyị nwere ike ịmụmụ ọnụ ọchị:

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

Usoro nwere ike ibufe oke; na mgbakwunye, otu klas nwere static Njirimara na ụzọ, yana ndị na-ewu ụlọ aha ha kwekọrọ na aha klas ahụ n'onwe ya. Klas akọwapụtara na edemede ma ọ bụ modul PowerShell nwere ike bụrụ ntọala maka onye ọzọ - otu a ka esi etinye ihe nketa. N'okwu a, a na-ahapụ ya ka ọ jiri klas .NET dị ugbu a dị ka ndị isi:

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

Nkọwa anyị maka iji ihe arụ ọrụ na PowerShell anaghị agwụ ike. N'akwụkwọ ndị na-esonụ, anyị ga-agbalị iji ihe atụ bara uru mee ka ya dịkwuo omimi: isiokwu nke ise na usoro a ga-etinye aka na okwu nke ijikọ PowerShell na ngwa ngwa ndị ọzọ. Enwere ike ịhụ akụkụ ndị gara aga na njikọ dị n'okpuru.

Part 1: Basic Windows PowerShell Atụmatụ
Nkebi 2: Okwu Mmalite nke Windows PowerShell Programming Language
Nkebi 3: na-agafe paramita na scripts na ọrụ, na-eke cmdlets

Kedu ihe bụ Windows PowerShell na kedu ihe eji ya? Akụkụ 4: Na-arụ ọrụ na ihe, klaasị nke ya

isi: www.habr.com

Tinye a comment