Tha toradh teacsa òrdughan ann an uinneag eadar-mhìneachaidh PowerShell dìreach mar dhòigh air fiosrachadh a thaisbeanadh ann an cruth a tha iomchaidh airson tuigse dhaoine. Dìreach Diciadain
Faclan-cinn:
Rudan ann an PowerShell
Cuimhnich gur e cruinneachadh de raointean dàta (seilbh, tachartasan, msaa) a th’ ann an nì agus dòighean airson an giullachd (dòighean). Tha an structar aige air a shònrachadh le seòrsa, a tha mar as trice stèidhichte air clasaichean a thathar a 'cleachdadh anns an àrd-ùrlar aonaichte .NET Core. Tha e comasach cuideachd obrachadh le nithean COM, CIM (WMI) agus ADSI. Tha feum air togalaichean agus dòighean gus diofar ghnìomhan a dhèanamh air dàta; a bharrachd air an sin, ann an PowerShell, faodar nithean a thoirt seachad mar argamaidean gu gnìomhan agus cmdlets, an luachan a thoirt do chaochladairean, agus tha
A’ coimhead air structar stuthan
Mar eisimpleir, ruithidh sinn an cmdlet Get-Process, a leigeas leat fiosrachadh fhaighinn mu phròiseasan a tha a’ ruith san t-siostam:
Seallaidh e cuid de dhàta teacsa cruth nach toir beachd sam bith air feartan nan nithean a chaidh a thilleadh agus na dòighean aca. Gus an toradh a ghleusadh, feumaidh sinn ionnsachadh mar a nì sinn sgrùdadh air structar nithean, agus cuidichidh cmdlet Get-Member sinn le seo:
Get-Process | Get-Member
An seo tha sinn mu thràth a ’faicinn an seòrsa agus an structar, agus le cuideachadh bho pharaimearan a bharrachd is urrainn dhuinn, mar eisimpleir, dìreach feartan an nì a tha air an toirt a-steach don chur-a-steach a thaisbeanadh:
Get-Process | Get-Member -MemberType Property
Bidh feum air an eòlas seo gus duilgheadasan rianachd fhuasgladh gu h-eadar-ghnìomhach no gus na sgriobtaichean agad fhèin a sgrìobhadh: mar eisimpleir, gus fiosrachadh fhaighinn mu phròiseasan crochte a’ cleachdadh an t-seilbh Freagairt.
A’ sìoladh nithean
Tha PowerShell a’ leigeil le nithean a choinnicheas ri cumha sònraichte a dhol tro loidhne-phìoban:
Where-Object { блок сценария }
Feumaidh toradh cur an gnìomh a’ bhloc sgriobta taobh a-staigh nam bragan a bhith na luach boolean. Ma tha e fìor ($true), thèid an nì a thèid a chur a-steach don cmdlet Where-Object a chur seachad air an loidhne-phìoban, air neo ($false) thèid a sguabadh às. Mar eisimpleir, seallaidh sinn liosta de sheirbheisean Windows Server a chaidh stad, i.e. an fheadhainn aig a bheil seilbh Inbhe gu bhith “Sguirte”:
Get-Service | Where-Object {$_.Status -eq "Stopped"}
An seo a-rithist chì sinn riochdachadh teacsa, ach ma tha thu airson tuigse fhaighinn air an t-seòrsa agus structar a-staigh nan nithean a tha a ’dol tron loidhne-phìoban chan eil e duilich:
Get-Service | Where-Object {$_.Status -eq "Stopped"} | Get-Member
A’ rèiteach nithean
Nuair a bhios pìoban a 'giollachd stuthan, gu tric feumar an rèiteachadh. Tha an cmdlet Sort-Object a’ dol seachad air ainmean thogalaichean (iuchraichean seòrsachaidh) agus a’ tilleadh nithean a chaidh òrdachadh leis na luachan aca. Tha e furasta toradh phròiseasan ruith a sheòrsachadh a rèir ùine CPU a chaidh a chaitheamh (seilbh cpu):
Get-Process | Sort-Object –Property cpu
Faodar am paramadair -Property fhàgail air falbh nuair a chuireas tu fios gu cmdlet Sort-Object; tha e air a chleachdadh gu bunaiteach. Airson cùl-sheòrsachadh, cleachd am paramadair -Descending:
Get-Process | Sort-Object cpu -Descending
A 'taghadh stuthan agus na pàirtean aca
Leigidh an cmdlet Select-Object leat àireamh sònraichte de nithean a thaghadh aig toiseach no deireadh loidhne-phìoban a’ cleachdadh nam paramadairean -First or -Last. Le cuideachadh, faodaidh tu stuthan singilte no cuid de fheartan a thaghadh, agus cuideachd stuthan ùra a chruthachadh stèidhichte orra. Bheir sinn sùil air mar a tha an cmdlet ag obair a’ cleachdadh eisimpleirean sìmplidh.
Tha an àithne a leanas a’ taisbeanadh fiosrachadh mu na pròiseasan 10 a bhios ag ithe an ìre as motha de RAM (seilbh WS):
Get-Process | Sort-Object WS -Descending | Select-Object -First 10
Chan urrainn dhut ach cuid de fheartan stuthan a tha a’ dol tron loidhne-phìoban a thaghadh agus feadhainn ùra a chruthachadh stèidhichte orra:
Get-Process | Select-Object ProcessName, Id -First 1
Mar thoradh air obrachadh na loidhne-phìoban, gheibh sinn rud ùr, agus bidh an structar eadar-dhealaichte bhon structar a thill an cmdlet Get-Process. Feuch an dearbhaich sinn seo le bhith a’ cleachdadh Get-Member:
Get-Process | Select-Object ProcessName, Id -First 1 | Get-Member
Thoir an aire gu bheil Select-Object a’ tilleadh aon nì (-First 1) aig nach eil ach dhà de na raointean a shònraich sinn: chaidh na luachan aca a chopaigeadh bhon chiad nì a chaidh a-steach don loidhne-phìoban leis an Get-Process cmdlet. Tha aon de na dòighean air stuthan a chruthachadh ann an sgriobtaichean PowerShell stèidhichte air a bhith a’ cleachdadh Select-Object:
$obj = Get-Process | Select-Object ProcessName, Id -First 1
$obj.GetType()
Le bhith a’ cleachdadh Select-Object, faodaidh tu feartan àireamhaichte a chur ri nithean a dh’fheumas a bhith air an riochdachadh mar
Get-Process | Select-Object -Property ProcessName, @{Name="StartTime"; Expression = {$_.StartTime.Minute}}
Nach toir sinn sùil air structar nithean a 'dol tron ghiùladair:
Get-Process | Select-Object -Property ProcessName, @{Name="StartTime"; Expression = {$_.StartTime.Minute}} | Get-Member
ForEach-Object, Buidheann-Rud agus Tomhais-Rud
Tha cmdlets eile ann airson a bhith ag obair le nithean. Mar eisimpleir, bruidhnidh sinn mu na trì as fheumaile:
ForEach-Rud a’ leigeil leat còd PowerShell a ruith airson gach nì san loidhne-phìoban:
ForEach-Object { блок сценария }
Buidheann-Rud a’ cruinneachadh nithean a rèir luach seilbh:
Group-Object PropertyName
Ma ruitheas tu e leis a’ pharamadair -NoElement, gheibh thu a-mach an àireamh de eileamaidean anns na buidhnean.
Tomhais-Rud a 'cruinneachadh diofar paramamaidean geàrr-chunntas a rèir luachan raoin cuspair anns an loidhne-phìoban (a' cunntadh an t-suim, agus cuideachd a 'lorg an luach as ìsle, as àirde no cuibheasach):
Measure-Object -Property PropertyName -Minimum -Maximum -Average -Sum
Mar as trice, bidh na cmdlets air an deach beachdachadh air an cleachdadh gu h-eadar-ghnìomhach, agus gu tric air an cruthachadh ann an sgriobtaichean.
A’ cruthachadh nithean .NET agus COM (Rud Ùr)
Tha mòran phàirtean bathar-bog ann le eadar-aghaidh .NET Core agus COM a tha feumail do luchd-rianachd an t-siostaim. A’ cleachdadh a’ chlas System.Diagnostics.EventLog, faodaidh tu logaichean siostam a riaghladh gu dìreach bho Windows PowerShell. Bheir sinn sùil air eisimpleir de bhith a’ cruthachadh eisimpleir den chlas seo a’ cleachdadh an cmdlet New-Object leis a’ pharameter -TypeName:
New-Object -TypeName System.Diagnostics.EventLog
Leis nach do shònraich sinn log tachartais sònraichte, chan eil dàta sam bith anns an eisimpleir den chlas a thàinig às. Gus seo atharrachadh, feumaidh tu modh constructor sònraichte a ghairm fhad ‘s a tha e air a chruthachadh a’ cleachdadh am paramadair -ArgumentList. Ma tha sinn airson faighinn gu loga an tagraidh, bu chòir dhuinn an sreang “Iarrtas” a thoirt seachad mar argamaid don neach-togail:
$AppLog = New-Object -TypeName System.Diagnostics.EventLog -ArgumentList Application
$AppLog
Thoir an aire gun do shàbhail sinn toradh na h-àithne sa chaochladair $ AppLog. Ged a tha pìoban air an cleachdadh gu cumanta ann am modh eadar-ghnìomhach, bidh sgrìobhadh sgriobtaichean gu tric feumach air iomradh a chumail air nì. A bharrachd air an sin, tha na prìomh chlasaichean .NET Core ann an namespace an t-Siostam: tha PowerShell gu bunaiteach a’ coimhead airson seòrsaichean sònraichte ann, agus mar sin tha sgrìobhadh Diagnostics.EventLog an àite System.Diagnostics.EventLog gu math ceart.
Gus obrachadh leis an log, faodaidh tu na dòighean iomchaidh a chleachdadh:
$AppLog | Get-Member -MemberType Method
Canaidh sinn gu bheil e air fhuadach leis an dòigh Clear() ma tha còraichean-slighe ann:
$AppLog.Clear()
Tha an cmdlet New-Object cuideachd air a chleachdadh airson obrachadh le co-phàirtean COM. Tha tòrr dhiubh ann - bho na leabharlannan a fhuair frithealaiche sgriobt Windows gu tagraidhean ActiveX, leithid Internet Explorer. Gus rud COM a chruthachadh, feumaidh tu am paramadair -ComObject a shuidheachadh leis an ProgId prògramaichte den chlas a tha thu ag iarraidh:
New-Object -ComObject WScript.Shell
New-Object -ComObject WScript.Network
New-Object -ComObject Scripting.Dictionary
New-Object -ComObject Scripting.FileSystemObject
Gus na stuthan agad fhèin a chruthachadh le structar neo-riaghailteach, tha a bhith a’ cleachdadh New-Object a’ coimhead ro àrsaidh agus trom; tha an cmdlet seo air a chleachdadh gus obrachadh le co-phàirtean bathar-bog taobh a-muigh PowerShell. Ann an artaigilean san àm ri teachd thèid a’ chuspair seo a dheasbad nas mionaidiche. A bharrachd air nithean .NET agus COM, nì sinn sgrùdadh cuideachd air nithean CIM (WMI) agus ADSI.
A 'gairm Dòighean Statach
Chan urrainnear cuid de chlasaichean .NET Core a chuir air adhart sa bhad, a’ gabhail a-steach System.Environment agus System.Math. Is iad sin
[System.Environment] | Get-Member
Gus dìreach buill statach fhaicinn, cuir fios gu Get-Member leis a’ pharameter -Static (thoir an aire don t-seòrsa nì):
[System.Environment] | Get-Member -Static
Gus faighinn gu feartan agus dòighean statach, cleachd dà choloin leantainneach an àite ùine às deidh an litireil:
[System.Environment]::OSVersion
No
$test=[System.Math]::Sqrt(25)
$test
$test.GetType()
Seòrsa PSCustomObject
Am measg an iomadh seòrsa dàta a tha rim faighinn ann an PowerShell, is fhiach iomradh a thoirt air PSCustomObject, air a dhealbhadh airson stuthan a stòradh le structar neo-riaghailteach. Thathas den bheachd gur e dòigh clasaigeach, ach trom agus seann-fhasanta a th’ ann a bhith a’ cruthachadh a leithid de nì a’ cleachdadh an cmdlet New-Object:
$object = New-Object –TypeName PSCustomObject -Property @{Name = 'Ivan Danko';
City = 'Moscow';
Country = 'Russia'}
Bheir sinn sùil air structar an nì:
$object | Get-Member
A’ tòiseachadh le PowerShell 3.0, tha co-chòrdadh eile ri fhaighinn:
$object = [PSCustomObject]@{Name = 'Ivan Danko';
City = 'Moscow';
Country = 'Russia'
}
Gheibh thu cothrom air an dàta ann an aon de na dòighean co-ionann:
$object.Name
$object.'Name'
$value = 'Name'
$object.$value
Seo eisimpleir de bhith ag atharrachadh hashtable gnàthaichte gu nì:
$hash = @{'Name'='Ivan Danko'; 'City'='Moscow'; 'Country'='Russia'}
$hash.GetType()
$object = [pscustomobject]$hash
$object.GetType()
Is e aon de na h-eas-bhuannachdan a tha aig nithean den t-seòrsa seo gum faod òrdugh an cuid thogalaichean atharrachadh. Gus seo a sheachnadh, feumaidh tu am feart [òrdaichte] a chleachdadh:
$object = [PSCustomObject][ordered]@{Name = 'Ivan Danko';
City = 'Moscow';
Country = 'Russia'
}
Tha roghainnean eile ann airson rud a chruthachadh: gu h-àrd thug sinn sùil air cleachdadh an cmdlet
$object | Add-Member –MemberType NoteProperty –Name Age –Value 33
$object | Get-Member
Leigidh cmdlet Add-Member leat chan e a-mhàin feartan, ach dòighean-obrach a chur ri $object a chaidh a chruthachadh roimhe seo le bhith a’ cleachdadh an togail “-MemberType ScriptMethod”:
$ScriptBlock = {
# код
}
$object | Add-Member -Name "MyMethod" -MemberType ScriptMethod -Value $ScriptBlock
$object | Get-Member
Thoir an aire gun do chleachd sinn an caochladair $ScriptBlock de sheòrsa ScriptBlock gus an còd airson an dòigh ùr a stòradh.
Gus feartan a thoirt air falbh, cleachd an dòigh fhreagarrach:
$object.psobject.properties.remove('Name')
A' cruthachadh na clasaichean agad fhèin
Thug PowerShell 5.0 a-steach comas mìneachadh
class MyClass
{
# тело класса
}
Is e fìor sheòrsa .NET Core a tha seo, le bodhaig a bheir cunntas air na feartan aige, dòighean-obrach agus eileamaidean eile. Bheir sinn sùil air eisimpleir de bhith a 'mìneachadh a' chlas as sìmplidh:
class MyClass
{
[string]$Name
[string]$City
[string]$Country
}
Gus rud a chruthachadh (eisimpleir clas), cleachd an cmdlet
$object = New-Object -TypeName MyClass
no
$object = [MyClass]::new()
Dèanamaid sgrùdadh air structar an nì:
$object | Get-Member
Na dì-chuimhnich mun raon: chan urrainn dhut iomradh a thoirt air ainm seòrsa mar sreang no seòrsa litireil a chleachdadh taobh a-muigh an sgriobt no modal anns a bheil an clas air a mhìneachadh. Anns a’ chùis seo, faodaidh gnìomhan suidheachaidhean clas (nithean) a thilleadh a bhios ruigsinneach taobh a-muigh a’ mhodal no an sgriobt.
Às deidh dhut an nì a chruthachadh, lìon a-steach na feartan aige:
$object.Name = 'Ivan Danko'
$object.City = 'Moscow'
$object.Country = 'Russia'
$object
Thoir an aire gu bheil tuairisgeul a’ chlas a’ sònrachadh chan e a-mhàin na seòrsaichean seilbhe, ach cuideachd na luachan bunaiteach aca:
class Example
{
[string]$Name = 'John Doe'
}
Tha an tuairisgeul air modh clas coltach ris an tuairisgeul air gnìomh, ach gun a bhith a’ cleachdadh am facal gnìomh. Mar a tha ann an gnìomh, thèid crìochan a thoirt do dhòighean ma tha sin riatanach:
class MyClass
{
[string]$Name
[string]$City
[string]$Country
#описание метода
Smile([bool]$param1)
{
If($param1) {
Write-Host ':)'
}
}
}
A-nis faodaidh riochdaire ar clas gàire a dhèanamh:
$object = [MyClass]::new()
$object.Smile($true)
Faodar dòighean a luchdachadh cus; a bharrachd air an sin, tha clas aig
class MyClass2 : MyClass
{
#тело нового класса, базовым для которого является MyClass
}
[MyClass2]::new().Smile($true)
Cha mhòr gu bheil an tuairisgeul a th’ againn air a bhith ag obair le nithean ann an PowerShell coileanta. Anns na foillseachaidhean a leanas, feuchaidh sinn ri a dhoimhneachadh le eisimpleirean practaigeach: bidh an còigeamh artaigil san t-sreath air a chaitheamh air cùisean a bhith ag amalachadh PowerShell le co-phàirtean bathar-bog treas-phàrtaidh. Gheibhear pàirtean a dh’ fhalbh aig na ceanglaichean gu h-ìosal.
Source: www.habr.com