Textaúttak skipana í PowerShell túlkunarglugganum er bara leið til að birta upplýsingar á formi sem hentar mannlegri skynjun. Reyndar miðvikudagur
Lýsing:
Hlutir í PowerShell
Við skulum minnast þess að hlutur er safn gagnasviða (eiginleika, atburða osfrv.) og aðferðir til að vinna úr þeim (aðferðir). Uppbygging þess er tilgreind með gerð, sem er venjulega byggð á flokkum sem notaðir eru í sameinuðu .NET Core vettvangnum. Einnig er hægt að vinna með COM, CIM (WMI) og ADSI hluti. Eiginleikar og aðferðir eru nauðsynlegar til að framkvæma ýmsar aðgerðir á gögnum; að auki, í PowerShell, er hægt að senda hluti sem rök fyrir föll og cmdlet, úthluta gildi þeirra til breytum, og það er líka
Skoða uppbyggingu hluta
Til dæmis skulum við keyra Get-Process cmdlet, sem gerir þér kleift að fá upplýsingar um ferla sem keyra í kerfinu:
Það mun birta nokkur sniðin textagögn sem gefa enga hugmynd um eiginleika hlutanna sem skilað er og aðferðir þeirra. Til að fínstilla úttakið þurfum við að læra hvernig á að skoða uppbyggingu hluta, og Get-Member cmdletið mun hjálpa okkur með þetta:
Get-Process | Get-Member
Hér sjáum við nú þegar gerð og uppbyggingu og með hjálp viðbótarfæribreyta getum við til dæmis aðeins sýnt eiginleika hlutarins sem er með í inntakinu:
Get-Process | Get-Member -MemberType Property
Þessi þekking verður nauðsynleg til að leysa stjórnunarvandamál á gagnvirkan hátt eða til að skrifa eigin forskriftir: til dæmis til að fá upplýsingar um hengd ferli með því að nota eiginleikann Svarandi.
Sía hluti
PowerShell leyfir hlutum sem uppfylla ákveðin skilyrði að fara í gegnum leiðslu:
Where-Object { блок сценария }
Niðurstaðan af því að keyra skriftublokkina innan sviga verður að vera Boolean gildi. Ef það er satt ($true), mun hlutnum sem er inntak í Where-Object cmdletið fara eftir leiðslunni, annars ($false) verður honum eytt. Til dæmis skulum við birta lista yfir stöðvaða Windows Server þjónustu, þ.e. þeir sem hafa stöðueiginleikann sem er stilltur á „Stoppað“:
Get-Service | Where-Object {$_.Status -eq "Stopped"}
Hér sjáum við aftur textaframsetningu, en ef þú vilt skilja gerð og innri uppbyggingu hlutanna sem fara í gegnum leiðsluna er það ekki erfitt:
Get-Service | Where-Object {$_.Status -eq "Stopped"} | Get-Member
Að flokka hluti
Við leiðsluvinnslu á hlutum er oft þörf á að flokka þá. Sort-Object cmdlet fær nöfn eiginleika (flokkunarlykla) og skilar hlutum raðað eftir gildum þeirra. Það er auðvelt að flokka úttak keyrandi ferla eftir örgjörvatíma sem varið er (eiginleika örgjörva):
Get-Process | Sort-Object –Property cpu
Hægt er að sleppa -Property færibreytunni þegar hringt er í Sort-Object cmdletið; það er sjálfgefið notað. Fyrir öfuga flokkun, notaðu -Descending færibreytuna:
Get-Process | Sort-Object cpu -Descending
Val á hlutum og hlutum þeirra
Select-Object cmdlet gerir þér kleift að velja ákveðinn fjölda hluta í upphafi eða lok leiðslu með því að nota -First eða -Last færibreyturnar. Með hjálp þess geturðu valið staka hluti eða ákveðna eiginleika og einnig búið til nýja hluti út frá þeim. Við skulum skoða hvernig cmdlet virkar með einföldum dæmum.
Eftirfarandi skipun sýnir upplýsingar um 10 ferla sem neyta hámarks vinnsluminni (WS eign):
Get-Process | Sort-Object WS -Descending | Select-Object -First 10
Þú getur aðeins valið ákveðna eiginleika hluta sem fara í gegnum leiðsluna og búið til nýja út frá þeim:
Get-Process | Select-Object ProcessName, Id -First 1
Vegna reksturs leiðslunnar munum við fá nýjan hlut, uppbygging hans mun vera frábrugðin uppbyggingunni sem Get-Process cmdlet skilar. Við skulum staðfesta þetta með því að nota Get-Member:
Get-Process | Select-Object ProcessName, Id -First 1 | Get-Member
Athugaðu að Select-Object skilar einum hlut (-First 1) sem hefur aðeins tvo af reitunum sem við tilgreindum: gildi þeirra voru afrituð frá fyrsta hlutnum sem var flutt inn í leiðsluna með Get-Process cmdlet. Ein af leiðunum til að búa til hluti í PowerShell skriftum byggist á því að nota Select-Object:
$obj = Get-Process | Select-Object ProcessName, Id -First 1
$obj.GetType()
Með því að nota Select-Object er hægt að bæta reiknuðum eiginleikum við hluti sem þarf að tákna sem
Get-Process | Select-Object -Property ProcessName, @{Name="StartTime"; Expression = {$_.StartTime.Minute}}
Við skulum skoða uppbyggingu hluta sem fara í gegnum færibandið:
Get-Process | Select-Object -Property ProcessName, @{Name="StartTime"; Expression = {$_.StartTime.Minute}} | Get-Member
ForHver-Object, Group-Object og Measure-Object
Það eru aðrir cmdlets til að vinna með hluti. Sem dæmi skulum við tala um þrjár gagnlegustu:
Fyrir hvern hlut gerir þér kleift að keyra PowerShell kóða fyrir hvern hlut í leiðslunni:
ForEach-Object { блок сценария }
Hópur-hlutur flokkar hluti eftir eignargildi:
Group-Object PropertyName
Ef þú keyrir það með -NoElement færibreytunni geturðu fundið út fjölda staka í hópunum.
Mál-hlutur safnar saman ýmsum yfirlitsbreytum eftir gildum hlutasviðs í leiðslunni (reiknar summan og finnur einnig lágmarks-, hámarks- eða meðalgildi):
Measure-Object -Property PropertyName -Minimum -Maximum -Average -Sum
Venjulega eru cmdletarnir sem fjallað er um notuð gagnvirkt og eru oft búnir til í forskriftum.
Að búa til .NET og COM hluti (New-Object)
Það eru margir hugbúnaðaríhlutir með .NET Core og COM viðmót sem nýtast kerfisstjórum vel. Með því að nota System.Diagnostics.EventLog flokkinn geturðu stjórnað kerfisskrám beint frá Windows PowerShell. Við skulum skoða dæmi um að búa til tilvik af þessum flokki með því að nota New-Object cmdlet með færibreytunni -TypeName:
New-Object -TypeName System.Diagnostics.EventLog
Þar sem við tilgreindum ekki sérstaka atburðaskrá inniheldur tilvikið sem myndast af bekknum engin gögn. Til að breyta þessu þarftu að kalla á sérstaka byggingaraðferð við stofnun hennar með því að nota -ArgumentList færibreytuna. Ef við viljum fá aðgang að forritaskránni ættum við að senda strenginn "Application" sem rök til byggingaraðilans:
$AppLog = New-Object -TypeName System.Diagnostics.EventLog -ArgumentList Application
$AppLog
Vinsamlegast athugaðu að við vistum úttak skipunarinnar í $AppLog breytunni. Þrátt fyrir að leiðslur séu almennt notaðar í gagnvirkum ham, krefst ritun forskrifta oft að viðhalda tilvísun í hlut. Að auki eru kjarna .NET Core flokkarnir í kerfisnafnarýminu: PowerShell leitar sjálfgefið að tilteknum gerðum í því, þannig að ritun Diagnostics.EventLog í stað System.Diagnostics.EventLog er alveg rétt.
Til að vinna með annálinn geturðu notað viðeigandi aðferðir:
$AppLog | Get-Member -MemberType Method
Segjum að það sé hreinsað með Clear() aðferðinni ef það eru aðgangsréttindi:
$AppLog.Clear()
New-Object cmdlet er einnig notað til að vinna með COM hluti. Þeir eru talsvert margir - allt frá bókasöfnum sem fylgja með Windows forskriftaþjóninum til ActiveX forrita, eins og Internet Explorer. Til að búa til COM hlut þarftu að stilla -ComObject færibreytuna með forritunarfræðilegu ProgId viðkomandi flokks:
New-Object -ComObject WScript.Shell
New-Object -ComObject WScript.Network
New-Object -ComObject Scripting.Dictionary
New-Object -ComObject Scripting.FileSystemObject
Til að búa til þína eigin hluti með handahófskenndri uppbyggingu virðist notkun New-Object of fornaldarleg og fyrirferðarmikil; þetta cmdlet er notað til að vinna með hugbúnaðarhlutum utan við PowerShell. Í næstu greinum verður fjallað nánar um þetta mál. Til viðbótar við .NET og COM hluti, munum við einnig kanna CIM (WMI) og ADSI hluti.
Að hringja í Static Methods
Ekki er hægt að stofna suma .NET Core flokka, þar á meðal System.Environment og System.Math. Þeir eru
[System.Environment] | Get-Member
Til að skoða aðeins kyrrstæða meðlimi skaltu hringja í Get-Member með færibreytunni -Static (athugaðu hlutgerðina):
[System.Environment] | Get-Member -Static
Til að fá aðgang að kyrrstæðum eiginleikum og aðferðum, notaðu tvo samfellda tvípunkta í stað punkts á eftir bókstafnum:
[System.Environment]::OSVersion
Eða
$test=[System.Math]::Sqrt(25)
$test
$test.GetType()
Sláðu inn PSCustomObject
Meðal fjölmargra gagnategunda sem til eru í PowerShell er vert að nefna PSCustomObject, hannað til að geyma hluti með handahófskenndri uppbyggingu. Að búa til slíkan hlut með því að nota New-Object cmdlet er talin klassísk, en fyrirferðarmikil og úrelt leið:
$object = New-Object –TypeName PSCustomObject -Property @{Name = 'Ivan Danko';
City = 'Moscow';
Country = 'Russia'}
Við skulum skoða uppbyggingu hlutarins:
$object | Get-Member
Frá og með PowerShell 3.0 er önnur setningafræði fáanleg:
$object = [PSCustomObject]@{Name = 'Ivan Danko';
City = 'Moscow';
Country = 'Russia'
}
Þú getur nálgast gögnin á einum af jafngildum leiðum:
$object.Name
$object.'Name'
$value = 'Name'
$object.$value
Hér er dæmi um að breyta núverandi hashable í hlut:
$hash = @{'Name'='Ivan Danko'; 'City'='Moscow'; 'Country'='Russia'}
$hash.GetType()
$object = [pscustomobject]$hash
$object.GetType()
Einn af ókostunum við hluti af þessari gerð er að röð eiginleika þeirra getur breyst. Til að forðast þetta verður þú að nota [pantað] eigindina:
$object = [PSCustomObject][ordered]@{Name = 'Ivan Danko';
City = 'Moscow';
Country = 'Russia'
}
Það eru aðrir möguleikar til að búa til hlut: hér að ofan skoðuðum við að nota cmdlet
$object | Add-Member –MemberType NoteProperty –Name Age –Value 33
$object | Get-Member
Add-Member cmdlet gerir þér kleift að bæta ekki aðeins eiginleikum, heldur einnig aðferðum við áður búið $hlut með því að nota "-MemberType ScriptMethod" smíðina:
$ScriptBlock = {
# код
}
$object | Add-Member -Name "MyMethod" -MemberType ScriptMethod -Value $ScriptBlock
$object | Get-Member
Vinsamlegast athugaðu að við notuðum $ScriptBlock breytuna af gerðinni ScriptBlock til að geyma kóðann fyrir nýju aðferðina.
Til að fjarlægja eiginleika skaltu nota samsvarandi aðferð:
$object.psobject.properties.remove('Name')
Búðu til þína eigin flokka
PowerShell 5.0 kynnti hæfileikann til að skilgreina
class MyClass
{
# тело класса
}
Þetta er sönn .NET Core gerð, með meginmáli sem lýsir eiginleikum þess, aðferðum og öðrum þáttum. Við skulum skoða dæmi um að skilgreina einfaldasta flokkinn:
class MyClass
{
[string]$Name
[string]$City
[string]$Country
}
Til að búa til hlut (flokkatilvik), notaðu cmdlet
$object = New-Object -TypeName MyClass
eða
$object = [MyClass]::new()
Við skulum greina uppbyggingu hlutarins:
$object | Get-Member
Ekki gleyma umfangi: þú getur ekki vísað til tegundarheiti sem strengs eða notað tegund bókstafs utan handritsins eða einingarinnar sem flokkurinn er skilgreindur í. Í þessu tilviki geta aðgerðir skilað bekkjartilvikum (hlutum) sem verða aðgengilegar utan einingarinnar eða skriftunnar.
Eftir að þú hefur búið til hlutinn skaltu fylla út eiginleika hans:
$object.Name = 'Ivan Danko'
$object.City = 'Moscow'
$object.Country = 'Russia'
$object
Athugaðu að flokkalýsingin tilgreinir ekki aðeins eiginleikana heldur einnig sjálfgefin gildi þeirra:
class Example
{
[string]$Name = 'John Doe'
}
Lýsing flokksaðferðar líkist lýsingu á falli, en án þess að nota fallorðið. Eins og í falli eru færibreytur sendar til aðferða ef þörf krefur:
class MyClass
{
[string]$Name
[string]$City
[string]$Country
#описание метода
Smile([bool]$param1)
{
If($param1) {
Write-Host ':)'
}
}
}
Nú getur fulltrúi bekkjarins okkar brosað:
$object = [MyClass]::new()
$object.Smile($true)
Aðferðir geta verið ofhlaðnar; auk þess hefur flokkur
class MyClass2 : MyClass
{
#тело нового класса, базовым для которого является MyClass
}
[MyClass2]::new().Smile($true)
Lýsing okkar á því að vinna með hluti í PowerShell er varla tæmandi. Í eftirfarandi ritum munum við reyna að dýpka það með hagnýtum dæmum: Fimmta greinin í röðinni verður helguð málum við að samþætta PowerShell við hugbúnaðarhluta þriðja aðila. Fyrri hluta má finna á tenglunum hér að neðan.
Heimild: www.habr.com