Dim ond ffordd i arddangos gwybodaeth ar ffurf sy'n addas ar gyfer canfyddiad dynol yw allbwn testun gorchmynion yn ffenestr ddehonglydd PowerShell. Mewn gwirionedd dydd Mercher
Gemau:
Gwrthrychau yn PowerShell
Gadewch inni gofio bod gwrthrych yn gasgliad o feysydd data (eiddo, digwyddiadau, ac ati) a dulliau ar gyfer eu prosesu (dulliau). Mae ei strwythur wedi'i bennu gan fath, sydd fel arfer yn seiliedig ar ddosbarthiadau a ddefnyddir yn y llwyfan unedig .NET Core. Mae hefyd yn bosibl gweithio gyda gwrthrychau COM, CIM (WMI) ac ADSI. Mae angen priodweddau a dulliau i gyflawni gweithredoedd amrywiol ar ddata; yn ogystal, yn PowerShell, gellir trosglwyddo gwrthrychau fel dadleuon i swyddogaethau a cmdlets, rhoi eu gwerthoedd i newidynnau, ac mae yna hefyd
Gweld strwythur gwrthrychau
Er enghraifft, gadewch i ni redeg y cmdlet Get-Process, sy'n eich galluogi i gael gwybodaeth am y prosesau sy'n rhedeg yn y system:
Bydd yn dangos rhywfaint o ddata testun wedi'i fformatio nad yw'n rhoi unrhyw syniad am briodweddau'r gwrthrychau a ddychwelwyd a'u dulliau. I fireinio'r allbwn, mae angen i ni ddysgu sut i archwilio strwythur gwrthrychau, a bydd cmdlet Get-Member yn ein helpu gyda hyn:
Get-Process | Get-Member
Yma rydym eisoes yn gweld y math a'r strwythur, a gyda chymorth paramedrau ychwanegol gallwn, er enghraifft, arddangos priodweddau'r gwrthrych a gynhwysir yn y mewnbwn yn unig:
Get-Process | Get-Member -MemberType Property
Bydd angen y wybodaeth hon i ddatrys problemau gweinyddol yn rhyngweithiol neu i ysgrifennu eich sgriptiau eich hun: er enghraifft, i gael gwybodaeth am brosesau crog gan ddefnyddio'r priodwedd Ymateb.
Hidlo gwrthrychau
Mae PowerShell yn caniatáu i wrthrychau sy'n bodloni amod penodol gael eu pasio trwy biblinell:
Where-Object { блок сценария }
Rhaid i ganlyniad gweithredu'r bloc sgript o fewn y cromfachau fod yn werth boolaidd. Os yw'n wir ($true), bydd y gwrthrych sy'n cael ei fewnbynnu i'r cmdlet Where-Object yn cael ei basio ar hyd y biblinell, fel arall ($false) bydd yn cael ei ddileu. Er enghraifft, gadewch i ni arddangos rhestr o wasanaethau Windows Server sydd wedi'u stopio, h.y. y rhai y mae eu heiddo Statws wedi’i “Stopio”:
Get-Service | Where-Object {$_.Status -eq "Stopped"}
Yma eto rydym yn gweld cynrychiolaeth destunol, ond os ydych chi am ddeall math a strwythur mewnol y gwrthrychau sy'n mynd trwy'r biblinell nid yw'n anodd:
Get-Service | Where-Object {$_.Status -eq "Stopped"} | Get-Member
Didoli gwrthrychau
Wrth brosesu gwrthrychau ar y gweill, yn aml mae angen eu didoli. Mae'r cmdlet Didoli-Object yn cael ei drosglwyddo i enwau priodweddau (bysellau didoli) ac yn dychwelyd gwrthrychau yn ôl eu gwerthoedd. Mae'n hawdd didoli allbwn prosesau rhedeg yn ôl amser CPU a dreulir (eiddo cpu):
Get-Process | Sort-Object –Property cpu
Gellir hepgor y paramedr -Eiddo wrth alw'r cmdlet Sort-Object; fe'i defnyddir yn ddiofyn. Ar gyfer didoli o chwith, defnyddiwch y paramedr -Descending:
Get-Process | Sort-Object cpu -Descending
Dewis gwrthrychau a'u rhannau
Mae'r cmdlet Select-Object yn eich galluogi i ddewis nifer penodol o wrthrychau ar ddechrau neu ddiwedd piblinell gan ddefnyddio'r paramedrau -First or -Last. Gyda'i help, gallwch ddewis gwrthrychau sengl neu briodweddau penodol, a hefyd creu gwrthrychau newydd yn seiliedig arnynt. Gadewch i ni edrych ar sut mae'r cmdlet yn gweithio gan ddefnyddio enghreifftiau syml.
Mae'r gorchymyn canlynol yn dangos gwybodaeth am y 10 proses sy'n defnyddio'r uchafswm o RAM (eiddo WS):
Get-Process | Sort-Object WS -Descending | Select-Object -First 10
Dim ond rhai priodweddau gwrthrychau sy'n mynd trwy'r biblinell y gallwch chi eu dewis a chreu rhai newydd yn seiliedig arnyn nhw:
Get-Process | Select-Object ProcessName, Id -First 1
O ganlyniad i weithrediad y biblinell, byddwn yn derbyn gwrthrych newydd, y bydd ei strwythur yn wahanol i'r strwythur a ddychwelwyd gan y cmdlet Get-Process. Gadewch i ni wirio hyn gan ddefnyddio Get-Member:
Get-Process | Select-Object ProcessName, Id -First 1 | Get-Member
Sylwch fod Select-Object yn dychwelyd gwrthrych unigol (-First 1) sydd â dim ond dau o'r meysydd a nodwyd gennym: copïwyd eu gwerthoedd o'r gwrthrych cyntaf a basiwyd i'r biblinell gan y cmdlet Get-Process. Mae un o'r ffyrdd o greu gwrthrychau mewn sgriptiau PowerShell yn seiliedig ar ddefnyddio Select-Object:
$obj = Get-Process | Select-Object ProcessName, Id -First 1
$obj.GetType()
Gan ddefnyddio Select-Object, gallwch ychwanegu priodweddau cyfrifiadurol at wrthrychau y mae angen eu cynrychioli fel
Get-Process | Select-Object -Property ProcessName, @{Name="StartTime"; Expression = {$_.StartTime.Minute}}
Edrychwn ar strwythur gwrthrychau sy'n mynd trwy'r cludwr:
Get-Process | Select-Object -Property ProcessName, @{Name="StartTime"; Expression = {$_.StartTime.Minute}} | Get-Member
ForEach-Gwrthrych, Grŵp-Gwrthrych a Mesur-Gwrthrych
Mae yna cmdlets eraill ar gyfer gweithio gyda gwrthrychau. Fel enghraifft, gadewch i ni siarad am y tri mwyaf defnyddiol:
ForEach-Gwrthrych yn caniatáu ichi redeg cod PowerShell ar gyfer pob gwrthrych sydd ar y gweill:
ForEach-Object { блок сценария }
Grŵp-Gwrthrych grwpio gwrthrychau yn ôl gwerth eiddo:
Group-Object PropertyName
Os ydych chi'n ei redeg gyda'r paramedr -NoElement, gallwch chi ddarganfod nifer yr elfennau yn y grwpiau.
Mesur-Gwrthrych yn agregu paramedrau crynhoi amrywiol yn ôl gwerthoedd maes gwrthrych sydd ar y gweill (yn cyfrifo'r swm, a hefyd yn canfod y gwerth lleiaf, uchaf neu gyfartalog):
Measure-Object -Property PropertyName -Minimum -Maximum -Average -Sum
Yn nodweddiadol, mae'r cmdlets a drafodir yn cael eu defnyddio'n rhyngweithiol, ac yn aml yn cael eu creu mewn sgriptiau.
Creu gwrthrychau .NET a COM (New-Object)
Mae yna lawer o gydrannau meddalwedd gyda rhyngwynebau .NET Core a COM sy'n ddefnyddiol i weinyddwyr system. Gan ddefnyddio'r dosbarth System.Diagnostics.EventLog, gallwch reoli logiau system yn uniongyrchol o Windows PowerShell. Edrychwn ar enghraifft o greu enghraifft o'r dosbarth hwn gan ddefnyddio'r cmdlet New-Object gyda'r paramedr -TypeName:
New-Object -TypeName System.Diagnostics.EventLog
Gan na wnaethom nodi log digwyddiad penodol, nid yw enghraifft canlyniadol y dosbarth yn cynnwys unrhyw ddata. I newid hyn, mae angen i chi alw dull constructor arbennig wrth ei greu gan ddefnyddio'r paramedr -ArgumentList. Os ydym am gael mynediad i log y cais, dylem basio'r llinyn "Cais" fel dadl i'r lluniwr:
$AppLog = New-Object -TypeName System.Diagnostics.EventLog -ArgumentList Application
$AppLog
Sylwch ein bod wedi cadw allbwn y gorchymyn yn y newidyn $ AppLog. Er bod piblinellau'n cael eu defnyddio'n aml mewn modd rhyngweithiol, mae ysgrifennu sgriptiau yn aml yn gofyn am gadw cyfeiriad at wrthrych. Yn ogystal, mae'r dosbarthiadau craidd .NET Craidd wedi'u cynnwys yn gofod enwau'r System: mae PowerShell yn ddiofyn yn edrych am fathau penodol ynddo, felly mae ysgrifennu Diagnostics.EventLog yn lle System.Diagnostics.EventLog yn hollol gywir.
I weithio gyda'r log, gallwch ddefnyddio'r dulliau priodol:
$AppLog | Get-Member -MemberType Method
Gadewch i ni ddweud ei fod yn cael ei glirio gan y dull Clear() os oes hawliau mynediad:
$AppLog.Clear()
Defnyddir y cmdlet New-Object hefyd i weithio gyda chydrannau COM. Mae yna lawer iawn ohonyn nhw - o'r llyfrgelloedd a gyflenwir gyda gweinydd sgriptiau Windows i gymwysiadau ActiveX, fel Internet Explorer. I greu gwrthrych COM, mae angen i chi osod y paramedr -ComObject gyda'r ProgId rhaglennol o'r dosbarth a ddymunir:
New-Object -ComObject WScript.Shell
New-Object -ComObject WScript.Network
New-Object -ComObject Scripting.Dictionary
New-Object -ComObject Scripting.FileSystemObject
I greu eich gwrthrychau eich hun gyda strwythur mympwyol, mae defnyddio New-Object yn edrych yn rhy hynafol a beichus; defnyddir y cmdlet hwn i weithio gyda chydrannau meddalwedd y tu allan i PowerShell. Mewn erthyglau yn y dyfodol bydd y mater hwn yn cael ei drafod yn fanylach. Yn ogystal â gwrthrychau .NET a COM, byddwn hefyd yn archwilio gwrthrychau CIM (WMI) ac ADSI.
Galw Dulliau Statig
Ni ellir amrantiad rhai dosbarthiadau Craidd .NET, gan gynnwys System.Environment a System.Math. Mae nhw
[System.Environment] | Get-Member
I weld aelodau statig yn unig, ffoniwch Get-Member gyda'r paramedr -Static (sylwch ar y math o wrthrych):
[System.Environment] | Get-Member -Static
I gael mynediad at briodweddau a dulliau statig, defnyddiwch ddau colon olynol yn lle cyfnod ar ôl y llythrennol:
[System.Environment]::OSVersion
Neu
$test=[System.Math]::Sqrt(25)
$test
$test.GetType()
Teipiwch PSCustomObject
Ymhlith y mathau niferus o ddata sydd ar gael yn PowerShell, mae'n werth sôn am PSCustomObject, a gynlluniwyd ar gyfer storio gwrthrychau â strwythur mympwyol. Mae creu gwrthrych o'r fath gan ddefnyddio'r cmdlet Gwrthrych Newydd yn cael ei ystyried yn ffordd glasurol, ond feichus a hen ffasiwn:
$object = New-Object –TypeName PSCustomObject -Property @{Name = 'Ivan Danko';
City = 'Moscow';
Country = 'Russia'}
Edrychwn ar strwythur y gwrthrych:
$object | Get-Member
Gan ddechrau gyda PowerShell 3.0, mae cystrawen arall ar gael:
$object = [PSCustomObject]@{Name = 'Ivan Danko';
City = 'Moscow';
Country = 'Russia'
}
Gallwch gael mynediad at y data mewn un o'r ffyrdd cyfatebol:
$object.Name
$object.'Name'
$value = 'Name'
$object.$value
Dyma enghraifft o drosi hashtable presennol yn wrthrych:
$hash = @{'Name'='Ivan Danko'; 'City'='Moscow'; 'Country'='Russia'}
$hash.GetType()
$object = [pscustomobject]$hash
$object.GetType()
Un o anfanteision gwrthrychau o'r math hwn yw y gall trefn eu priodweddau newid. Er mwyn osgoi hyn, rhaid i chi ddefnyddio'r priodoledd [gorchymyn]:
$object = [PSCustomObject][ordered]@{Name = 'Ivan Danko';
City = 'Moscow';
Country = 'Russia'
}
Mae opsiynau eraill ar gyfer creu gwrthrych: uchod fe wnaethom edrych ar ddefnyddio'r cmdlet
$object | Add-Member –MemberType NoteProperty –Name Age –Value 33
$object | Get-Member
Mae'r cmdlet Add-Member yn caniatáu ichi ychwanegu nid yn unig priodweddau, ond hefyd dulliau at $object a grëwyd yn flaenorol trwy ddefnyddio'r lluniad "-MemberType ScriptMethod":
$ScriptBlock = {
# код
}
$object | Add-Member -Name "MyMethod" -MemberType ScriptMethod -Value $ScriptBlock
$object | Get-Member
Sylwch ein bod wedi defnyddio'r newidyn $ScriptBlock o'r math ScriptBlock i storio'r cod ar gyfer y dull newydd.
I gael gwared ar eiddo, defnyddiwch y dull cyfatebol:
$object.psobject.properties.remove('Name')
Creu Eich Dosbarthiadau Eich Hun
Cyflwynodd PowerShell 5.0 y gallu i ddiffinio
class MyClass
{
# тело класса
}
Mae hwn yn fath Craidd .NET wir, gyda chorff sy'n disgrifio ei briodweddau, ei ddulliau, ac elfennau eraill. Gadewch i ni edrych ar enghraifft o ddiffinio'r dosbarth symlaf:
class MyClass
{
[string]$Name
[string]$City
[string]$Country
}
I greu gwrthrych (enghraifft dosbarth), defnyddiwch y cmdlet
$object = New-Object -TypeName MyClass
neu
$object = [MyClass]::new()
Gadewch i ni ddadansoddi strwythur y gwrthrych:
$object | Get-Member
Peidiwch ag anghofio am y cwmpas: ni allwch gyfeirio at enw teip fel llinyn neu ddefnyddio teip llythrennol y tu allan i'r sgript neu'r modiwl y mae'r dosbarth wedi'i ddiffinio ynddo. Yn yr achos hwn, gall swyddogaethau ddychwelyd enghreifftiau dosbarth (gwrthrychau) a fydd yn hygyrch y tu allan i'r modiwl neu'r sgript.
Ar ôl creu'r gwrthrych, llenwch ei briodweddau:
$object.Name = 'Ivan Danko'
$object.City = 'Moscow'
$object.Country = 'Russia'
$object
Sylwch fod y disgrifiad dosbarth yn nodi nid yn unig y mathau o eiddo, ond hefyd eu gwerthoedd rhagosodedig:
class Example
{
[string]$Name = 'John Doe'
}
Mae'r disgrifiad o ddull dosbarth yn debyg i ddisgrifiad swyddogaeth, ond heb ddefnyddio'r gair ffwythiant. Fel mewn swyddogaeth, mae paramedrau'n cael eu trosglwyddo i ddulliau os oes angen:
class MyClass
{
[string]$Name
[string]$City
[string]$Country
#описание метода
Smile([bool]$param1)
{
If($param1) {
Write-Host ':)'
}
}
}
Nawr gall cynrychiolydd ein dosbarth wenu:
$object = [MyClass]::new()
$object.Smile($true)
Gellir gorlwytho dulliau; yn ogystal, mae gan ddosbarth
class MyClass2 : MyClass
{
#тело нового класса, базовым для которого является MyClass
}
[MyClass2]::new().Smile($true)
Go brin bod ein disgrifiad o weithio gyda gwrthrychau yn PowerShell yn hollgynhwysfawr. Yn y cyhoeddiadau canlynol, byddwn yn ceisio ei ddyfnhau gydag enghreifftiau ymarferol: bydd y bumed erthygl yn y gyfres yn canolbwyntio ar faterion integreiddio PowerShell â chydrannau meddalwedd trydydd parti. Mae rhannau o'r gorffennol i'w gweld yn y dolenni isod.
Ffynhonnell: hab.com