He aha te Windows PowerShell me te whakamahi mo te aha? Wāhanga 4: Te mahi me nga taonga, nga akomanga ake

He aha te Windows PowerShell me te whakamahi mo te aha? Wāhanga 4: Te mahi me nga taonga, nga akomanga ake

Ko te whakaputanga kupu o nga whakahau kei te matapihi whakamaori PowerShell he huarahi noa hei whakaatu korero i roto i te ahua e tika ana mo te tirohanga a te tangata. Tino Wenerei whakahāngai ki te mahi me nga taonga: ka whakawhiwhia nga cmdlet me nga mahi hei whakaurunga me te i hoki mai i te putanga, me nga momo taurangi e waatea ana ma te whakawhitiwhiti me te tuhi i runga i nga karaehe .NET. I roto i te tuhinga tuawha o te raupapa, ka ako tatou i te mahi me nga taonga i roto i nga korero taipitopito.

Ripanga ihirangi:

Ahanoa i PowerShell
Te tirotiro i te hanganga o nga taonga
Tātari ahanoa
Kōmaka ahanoa
Te whiriwhiri taonga me o raatau waahanga
Mo ia Ahanoa, Ahanoa-rōpū me te Mea Ine
Waihanga .NET me COM ahanoa (Anoa-Hou)
Te karanga tikanga pateko
Momo PSCustomObject
Te Waihanga i o Akoako ake

Ahanoa i PowerShell

Kia maumahara tatou ko tetahi mea he kohinga o nga mara raraunga (nga huanga, nga huihuinga, me etahi atu) me nga tikanga mo te tukatuka (tikanga). Ko tona hanganga e tohuhia ana e tetahi momo, i te nuinga o te waa i runga i nga karaehe e whakamahia ana i roto i te kaupapa .NET Core whakakotahi. Ka taea hoki te mahi me nga taonga COM, CIM (WMI) me ADSI. Ko nga ahuatanga me nga tikanga e hiahiatia ana hei mahi i nga momo mahi i runga i nga raraunga; i tua atu, i roto i te PowerShell, ka taea te tukuna nga taonga hei tohenga mo nga mahi me nga cmdlet, ka tohua o raatau uara ki nga taurangi, kei reira ano hoki. tikanga hanga whakahau (kaiwhakahaere, paipa ranei). Ka tukuna e ia tono i roto i te paipa tona putanga ki te mea e whai ake nei, te ahanoa ma te ahanoa. Mo te tukatuka, ka taea e koe te whakamahi i nga cmdlet kua whakahiato, te hanga ranei i a koe ake āhuatanga matatauki te mahi i nga momo raweke me nga taonga kei roto i te paipa: te tātari, te tohatoha, te whakarōpū, me te whakarereke i o raatau hanganga. Ko te whakawhiti raraunga i roto i tenei puka he painga nui: kaore e hiahiatia e te roopu whiwhi te whakamaarama i te awa o nga paita (kuputuhi), ka ngawari nga korero katoa e tika ana ma te karanga i nga ahuatanga me nga tikanga e tika ana.

Te tirotiro i te hanganga o nga taonga

Hei tauira, me whakahaere te cmdlet Tiki-Tukanga, ka taea e koe te tiki korero mo nga tukanga e rere ana i roto i te punaha:

He aha te Windows PowerShell me te whakamahi mo te aha? Wāhanga 4: Te mahi me nga taonga, nga akomanga ake

Ka whakaatu i etahi raraunga tuhinga kua whakahōputuhia karekau he whakaaro mo nga ahuatanga o nga mea kua whakahokia mai me o raatau tikanga. Hei whakatikatika i te putanga, me ako tatou me pehea te tirotiro i te hanganga o nga mea, ka awhina te cmdlet Tiki-Mema ki a tatou ki tenei:

Get-Process | Get-Member

He aha te Windows PowerShell me te whakamahi mo te aha? Wāhanga 4: Te mahi me nga taonga, nga akomanga ake

I konei kua kite tatou i te momo me te hanganga, me te awhina o nga taapiri taapiri ka taea e tatou, hei tauira, te whakaatu i nga ahuatanga o te mea kei roto i te whakauru:

Get-Process | Get-Member -MemberType Property

Ka hiahiatia tenei matauranga ki te whakaoti rapanga whakahaere ma te whakawhitiwhiti korero, ki te tuhi ranei i au ake tuhinga: hei tauira, ki te tiki korero mo nga tukanga whakairi ma te whakamahi i te taonga Whakautu.

Tātari ahanoa

Ka taea e PowerShell nga mea e tutuki ana ki tetahi ahuatanga kia tukuna ma te paipa:

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

Ko te hua o te mahi i te paraka tuhi i roto i nga reu me he uara boolean. Mena he pono ($pono), ka tukuna te mea ka uru ki te cmdlet Where-Object ki te paipa, ki te kore ($heka) ka mukua. Hei tauira, me whakaatu he rarangi o nga ratonga Windows Server kua mutu, i.e. te hunga kua tautuhia nga taonga Tūnga ki te "Kua":

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

He aha te Windows PowerShell me te whakamahi mo te aha? Wāhanga 4: Te mahi me nga taonga, nga akomanga ake

I konei ano ka kite tatou i tetahi whakaaturanga tuhinga, engari ki te hiahia koe ki te mohio ki te momo me te hanganga o roto o nga mea e haere ana i te paipa kaore he uaua:

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

He aha te Windows PowerShell me te whakamahi mo te aha? Wāhanga 4: Te mahi me nga taonga, nga akomanga ake

Kōmaka ahanoa

I te wa e tukatuka ana te paipa o nga taonga, he maha nga wa e tika ana kia tohatohahia. Ko te cmdlet Kōmaka-Anoa ka tukuna nga ingoa o nga taonga (whakapapa taviri) ka whakahoki mai i nga mea kua whakaritea e o raatau uara. He mea ngawari ki te whakariterite i te putanga o nga mahi whakahaere ma te wa PTM kua pau (taonga CPU):

Get-Process | Sort-Object –Property cpu

Ka taea te whakakore i te tawhā -Property i te wa e karanga ana i te cmdlet Kōmaka-Anoa; ka whakamahia taunoa. Mo te kōmaka whakamuri, whakamahia te tawhā -Whakaheke:

Get-Process | Sort-Object cpu -Descending

He aha te Windows PowerShell me te whakamahi mo te aha? Wāhanga 4: Te mahi me nga taonga, nga akomanga ake

Te whiriwhiri taonga me o raatau waahanga

Ko te cmdlet Tīpako Ahanoa ka taea e koe te kowhiri i te maha o nga mea i te timatanga, i te mutunga ranei o te paipa ma te whakamahi i nga tawhā -Tuatahi, -Whakamutunga ranei. Ma tana awhina, ka taea e koe te kowhiri i nga mea kotahi, i etahi taonga ranei, me te hanga taonga hou i runga i a raatau. Me titiro ki te mahi a te cmdlet ma te whakamahi i nga tauira ngawari.

Ko te whakahau e whai ake nei e whakaatu ana i nga korero mo nga tukanga 10 e pau ana te nui rawa o te RAM (waahanga WS):

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

He aha te Windows PowerShell me te whakamahi mo te aha? Wāhanga 4: Te mahi me nga taonga, nga akomanga ake

Ka taea e koe te kowhiri i etahi ahuatanga noa o nga mea e haere ana i te paipa me te hanga i nga mea hou i runga i a raatau:

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

Ko te hua o te mahi a te paipa, ka whiwhi tatou i tetahi mea hou, ka rereke te hanganga i te hanganga i whakahokia mai e te Get-Process cmdlet. Me manatoko tenei ma te whakamahi i te Tiki-Mema:

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

He aha te Windows PowerShell me te whakamahi mo te aha? Wāhanga 4: Te mahi me nga taonga, nga akomanga ake

Kia mahara ka whakahokia mai e Select-Object tetahi ahanoa kotahi (-Tuatahi 1) e rua noa nga mara i tohua e matou: i kapehia o raatau uara mai i te mea tuatahi i tukuna ki roto i te paipa e te Tiki-Tukanga cmdlet. Ko tetahi o nga huarahi ki te hanga ahanoa i roto i nga tuhinga PowerShell e ahu mai ana i runga i te whakamahi i te Tohu- Ahanoa:

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

He aha te Windows PowerShell me te whakamahi mo te aha? Wāhanga 4: Te mahi me nga taonga, nga akomanga ake

Ma te whakamahi i te ahanoa-tiwhiri, ka taea e koe te taapiri i nga taonga kua oti te tatau ki nga mea e tika ana hei tohu ripanga hash. I tenei take, ko te uara o tana matua tuatahi ka rite ki te ingoa taonga, a ko te uara o te ki tuarua e rite ana ki te uara taonga mo te huānga paipa o naianei:

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

He aha te Windows PowerShell me te whakamahi mo te aha? Wāhanga 4: Te mahi me nga taonga, nga akomanga ake

Kia titiro tatou ki te hanganga o nga mea e haere ana i te kaikawe:

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

He aha te Windows PowerShell me te whakamahi mo te aha? Wāhanga 4: Te mahi me nga taonga, nga akomanga ake

Mo ia Ahanoa, Ahanoa-rōpū me te Mea Ine

He cmdlet atu ano mo te mahi me nga taonga. Hei tauira, me korero tatou mo nga mea tino pai e toru:

Ma te Ahanoa-Ahanui ka taea e koe te whakahaere waehere PowerShell mo ia ahanoa i te paipa:

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

Ahanoa-rōpū whakarōpū ahanoa mā te uara taonga:

Group-Object PropertyName

Mena ka whakahaerehia e koe me te tawhā -NoElement, ka kitea e koe te maha o nga huānga o nga roopu.

Mea ine ka whakahiato i nga momo tawhā whakarāpopototanga mā ngā uara āpure ahanoa i roto i te paipa (ka tātaihia te tapeke, ka kitea hoki te uara iti, mōrahi, toharite rānei):

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

Ko te tikanga, ko nga cmdlet e korerohia ana ka whakamahia ma te pahekoheko, he maha nga wa ka hangaia i roto i nga tuhinga. mahi me nga poraka Timata, Tukatuka me te Whakamutunga.

Waihanga .NET me COM ahanoa (Anoa-Hou)

He maha nga waahanga rorohiko me nga atanga .NET Core me COM e whai hua ana ki nga kaiwhakahaere punaha. Ma te whakamahi i te akomanga System.Diagnostics.EventLog, ka taea e koe te whakahaere tika i nga raarangi punaha mai i te Windows PowerShell. Me titiro ki tetahi tauira o te hanga tauira o tenei karaehe ma te whakamahi i te cmdlet Ahanoa Hou me te tawhā -TypeName:

New-Object -TypeName System.Diagnostics.EventLog

He aha te Windows PowerShell me te whakamahi mo te aha? Wāhanga 4: Te mahi me nga taonga, nga akomanga ake

I te mea karekau matou i kii i te raarangi takahanga motuhake, karekau he raraunga i te tauira o te karaehe. Hei huri i tenei, me waea koe ki tetahi tikanga hanga motuhake i te wa i hangaia ai ma te whakamahi i te tawhā -ArgumentList. Mena kei te pirangi matou ki te uru atu ki te raarangi tono, me tuku te aho "Topa" hei tohenga ki te kaihanga:

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

He aha te Windows PowerShell me te whakamahi mo te aha? Wāhanga 4: Te mahi me nga taonga, nga akomanga ake

Kia mahara mai i tiakina e matou te putanga o te whakahau i te taurangi $AppLog. Ahakoa te nuinga o nga wa e whakamahia ana nga paipa i roto i te aratau tauwhitiwhiti, ko te tuhi i nga tuhinga tuhi me mau tonu he tohutoro ki tetahi mea. I tua atu, ko nga akomanga matua .NET Core kei roto i te mokowāingoa Pūnaha: PowerShell taunoa e rapu ana i nga momo kua tohua ki roto, na reira he tika te tuhi i te Diagnostics.EventLog hei utu mo te System.Diagnostics.EventLog.

Hei mahi me te raarangi, ka taea e koe te whakamahi i nga tikanga tika:

$AppLog | Get-Member -MemberType Method

He aha te Windows PowerShell me te whakamahi mo te aha? Wāhanga 4: Te mahi me nga taonga, nga akomanga ake

Me kii kua whakawāteahia e te tikanga Clear() mena he motika uru:

$AppLog.Clear()

Ka whakamahia ano te cmdlet Ahanoa Hou ki te mahi me nga waahanga COM. He nui rawa - mai i nga whare pukapuka i tukuna me te tūmau hōtuhi Windows ki nga tono ActiveX, penei i te Internet Explorer. Hei waihanga i tetahi ahanoa COM, me whakarite e koe te tawhā -ComObject me te ProgId papatono o te akomanga e hiahiatia ana:

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

Hei waihanga i a koe ake taonga me te hanga noa, te whakamahi i te Ahanoa Hou he ahua tawhito, he uaua hoki; ka whakamahia tenei cmdlet ki te mahi me nga waahanga rorohiko kei waho o PowerShell. I roto i nga tuhinga e whai ake nei ka korerohia tenei putanga i roto i nga korero taipitopito. I tua atu i nga taonga .NET me COM, ka torotoro ano tatou i nga taonga CIM (WMI) me ADSI.

Te karanga tikanga pateko

Ko etahi o nga karaehe .NET Core e kore e taea te whakatau, tae atu ki te System.Environment me te System.Math. Ko ratou pateko kei roto anake nga ahuatanga me nga tikanga pateko. He whare pukapuka tohutoro enei e whakamahia ana me te kore hanga taonga. Ka taea e koe te korero ki tetahi karaehe pateko ma te kupu kupu ma te apiti i te ingoa momo ki nga taiapa tapawha. Heoi, ki te titiro tatou ki te hanganga o te ahanoa ma te whakamahi i te Tiki-Mema, ka kite tatou i te momo System.RuntimeType hei utu mo te System.Environment:

[System.Environment] | Get-Member

He aha te Windows PowerShell me te whakamahi mo te aha? Wāhanga 4: Te mahi me nga taonga, nga akomanga ake

Hei tiro i nga mema pateko anake, waea atu ki te Tiki-Mema me te tawhā -Static (tuhia te momo ahanoa):

[System.Environment] | Get-Member -Static

He aha te Windows PowerShell me te whakamahi mo te aha? Wāhanga 4: Te mahi me nga taonga, nga akomanga ake

Hei uru atu ki nga ahuatanga me nga tikanga pateko, whakamahia nga kopirua e rua hei utu mo te wa i muri i te kupu:

[System.Environment]::OSVersion

Or

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

He aha te Windows PowerShell me te whakamahi mo te aha? Wāhanga 4: Te mahi me nga taonga, nga akomanga ake

Momo PSCustomObject

I roto i nga momo raraunga maha e waatea ana i PowerShell, he pai ki te whakahua i te PSCustomObject, i hangaia mo te penapena taonga me te hanga noa. Ko te hanga i taua ahanoa ma te whakamahi i te cmdlet Ahanoa Hou ka kiia he tikanga matarohia, engari he uaua, he mea tawhito:

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

Kia titiro tatou ki te hanganga o te mea:

$object | Get-Member

He aha te Windows PowerShell me te whakamahi mo te aha? Wāhanga 4: Te mahi me nga taonga, nga akomanga ake

Ka tiimata me te PowerShell 3.0, kei te waatea tetahi atu wetereo:

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

Ka taea e koe te uru ki nga raraunga ma tetahi o nga huarahi rite:

$object.Name

$object.'Name'

$value = 'Name'
$object.$value

Anei tetahi tauira o te huri i te ripanga riipene o mua ki te ahanoa:

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

He aha te Windows PowerShell me te whakamahi mo te aha? Wāhanga 4: Te mahi me nga taonga, nga akomanga ake

Ko tetahi o nga ngoikoretanga o nga taonga o tenei momo ka taea te whakarereke i te raupapa o o raatau taonga. Hei karo i tenei, me whakamahi koe i te huanga [whakahaua]:

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

Ko etahi atu whiringa mo te hanga ahanoa: i runga ake i titiro matou ki te whakamahi i te cmdlet Tīpakohia-Ahanoa. Ko nga mea e toe ana ko te whakaaro ki te taapiri me te tango i nga huānga. Ko te mahi i tenei mo te ahanoa mai i te tauira o mua he tino ngawari:

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

He aha te Windows PowerShell me te whakamahi mo te aha? Wāhanga 4: Te mahi me nga taonga, nga akomanga ake

Ko te cmdlet Tāpiri-Mema ka taea e koe te taapiri i nga taonga anake, engari ano hoki nga tikanga ki tetahi mea $i hanga i mua ma te whakamahi i te "-MemberType ScriptMethod" hanga:

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

Kia mahara mai i whakamahia e matou te taurangi $ScriptBlock o te momo ScriptBlock hei rokiroki i te waehere mo te tikanga hou.

He aha te Windows PowerShell me te whakamahi mo te aha? Wāhanga 4: Te mahi me nga taonga, nga akomanga ake

Hei tango i nga taonga, whakamahia te tikanga e pa ana:

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

Te Waihanga i o Akoako ake

I whakauruhia e PowerShell 5.0 te kaha ki te tautuhi māka te whakamahi i nga ahuatanga wetereo o nga reo hotaka kaupapa-ahua. Ko te kupu ratonga Class te tikanga mo tenei, i muri iho me tohu e koe te ingoa o te karaehe me te whakaahua i tona tinana ki nga taiapa kaiwhakahaere:

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

He momo .NET Core pono tenei, me te tinana e whakaatu ana i ona ahuatanga, tikanga, me etahi atu huānga. Kia titiro tatou ki tetahi tauira o te tautuhi i te akomanga ngawari:

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

Hei waihanga ahanoa (tauira karaehe), whakamahia te cmdlet Ahanoa Hou, he momo momo [MyClass] me te tikanga pseudostatic hōu (kaihanga taunoa):

$object = New-Object -TypeName MyClass

ranei

$object = [MyClass]::new()

Kia tātarihia te hanganga o te ahanoa:

$object | Get-Member

He aha te Windows PowerShell me te whakamahi mo te aha? Wāhanga 4: Te mahi me nga taonga, nga akomanga ake

Kaua e wareware ki te whānuitanga: e kore e taea e koe te korero ki tetahi ingoa momo hei aho, ki te whakamahi ranei i tetahi momo mooni kei waho o te tuhinga, te waahanga ranei e tautuhia ai te akomanga. I tenei take, ka taea e nga mahi te whakahoki i nga tauira akomanga (mea) ka uru atu ki waho o te waahanga, te tuhinga ranei.

Whai muri i te waihanga i te ahanoa, whakakiia ona ahuatanga:

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

He aha te Windows PowerShell me te whakamahi mo te aha? Wāhanga 4: Te mahi me nga taonga, nga akomanga ake

Kia mahara ko te whakaahuatanga akomanga ehara i te mea ko nga momo rawa anake, engari ko o raatau uara taunoa:

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

Ko te whakaahuatanga o te tikanga karaehe he rite ki te whakaahuatanga o tetahi mahi, engari me te kore whakamahi i te kupu mahi. Pērā i tētahi mahi, ka tukuna ngā tawhā ki ngā tikanga mēnā e tika ana:

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

Inaianei ka kata te kanohi o ta maatau akomanga:

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

Ka taea te taumaha i nga tikanga; hei taapiri, he karaehe āhuatanga pateko me tikanga, me nga kaihanga e hono ana o ratou ingoa ki te ingoa o te akomanga ake. Ka taea e te karaehe kua tautuhia i roto i te tuhinga, i te waahanga PowerShell ranei hei turanga mo tetahi atu - penei te whakatinanatanga o te taonga tuku iho. I tenei take, ka whakaaetia te whakamahi i nga karaehe .NET o naianei hei turanga:

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

Ko ta matou whakamaarama mo te mahi me nga taonga kei PowerShell kaore i te whakapau kaha. I roto i nga panui e whai ake nei, ka ngana taatau ki te whakahohonu me nga tauira whaihua: ko te tuarima o nga tuhinga o te raupapa ka whakatapua ki nga take o te whakauru PowerShell me nga waahanga rorohiko tuatoru. Ka kitea nga waahanga o mua i nga hononga i raro nei.

Wāhanga 1: Ngā Āhuahira Windows PowerShell Basic
Wāhanga 2: Kupu Whakataki ki te Reo Papatono PowerShell Windows
Wāhanga 3: tuku tawhā ki ngā hōtuhi me ngā mahi, te hanga cmdlet

He aha te Windows PowerShell me te whakamahi mo te aha? Wāhanga 4: Te mahi me nga taonga, nga akomanga ake

Source: will.com

Tāpiri i te kōrero