Auctoritas mandatorum in fenestra PowerShell interpretis est via ad informationes exhibendas in forma aptissima ad humanam perceptionem. Nam Mercurii
Tabula contentorum:
Res in PowerShell
Reminiscamur objectum esse collectionem agrorum notitiarum (proprietates, eventus, etc.) ac methodos ad eas expediendas (modos). Eius structura per speciem specificatur, quae plerumque in classibus .NET Core tribunal unitum adhibetur. Potest etiam laborare cum obiectis COM, CIM (WMI) et ADSI. Possessiones et methodi ad varias notitias actiones exercendas requiruntur, praeterea in PowerShell obiecti non possunt reddi argumenta ad functiones et cmdlets, bona eorum variabilibus assignata, et est etiam
Viewing structuram obiecti
Exempli gratia, curramus processum cmdlet, quod permittit te habere informationem de curriculis in systematis:
Data nonnulla textus formati exhibebit quae nullam ideam de proprietatibus rerum redditarum et earum modorum praebet. Ad subtiliter-cantus output discendum est quomodo objectorum structuram examinare debeamus, et Get-Member cmdlet nos adiuvabit cum hac:
Get-Process | Get-Member
Iam hic genus et structuram videmus, et cum accessionibus parametris adiuvantibus possumus, exempli gratia, proprietates tantum obiecti in initus inclusos ostendere:
Get-Process | Get-Member -MemberType Property
Haec cognitio necessaria erit ad solvendas quaestiones administrationis interactive vel propria scripta scribenda, exempli gratia, ad informationem de processibus suspensis utendo ad responendas.
Filtering objects
PowerShell permittit obiecta quae condicionem quandam obviant ut per pipelinum transeatur;
Where-Object { блок сценария }
Effectus exsecutionis scripturae clausus intra parentheses debet esse valorem booleanum. Si verum ($ verum est), obiectum quod input ad Ubi-Objectum cmdlet transibit per pipelineam, alioquin delebitur ($falsum). Exempli gratia, indices Windows Servo substitit officiorum ostendemus, i.e. quorum status proprietas ad "constitit";
Get-Service | Where-Object {$_.Status -eq "Stopped"}
Hic iterum videmus repraesentationem textualem, sed si vis intelligere rationem et structuram internam obiectorum per fistulam transeuntium non est difficile;
Get-Service | Where-Object {$_.Status -eq "Stopped"} | Get-Member
Sorting objects
Cum processui pipeline rerum objectorum, saepe necessitas exstat. Sort-Objectum cmdlet nomina proprietatum (clavium voluptua) reddit et res a suis bonis ordinatae reddit. Processus currendi CPU tempus confectum (cpu proprietas) exponere facile est;
Get-Process | Sort-Object –Property cpu
-Property modulus omitti potest cum nominat Sort-Objectum cmdlet, defalta adhibetur. Nam contra genus, utere -Descending parametri:
Get-Process | Sort-Object cpu -Descending
Discriptis rebus et partibus
The Select-Object cmdlet sino te eligere certum numerum objectorum initio vel fine pipelini utentis parametri -primi vel -ultimi. Eius ope potes singula obiecta seu proprietates quasdam eligere, ac etiam nova in eis fundata creare. Intueamur quomodo cmdlet opera simplicibus exemplis utens.
Hoc mandatum ostendit informationes circa X processuum consumendo maximam quantitatem RAM (WS proprietatis);
Get-Process | Sort-Object WS -Descending | Select-Object -First 10
Quasdam proprietates rerum per fistulam transeuntes eligere potes et novas in eis fundatas creare;
Get-Process | Select-Object ProcessName, Id -First 1
Ex operatione pipeline, novum obiectum accipiemus, cuius structura differet a structura per "Processuum cmdlet" redditum. Sit scriptor cognoscere hoc utens Get-Member:
Get-Process | Select-Object ProcessName, Id -First 1 | Get-Member
Nota quod objectum Select-Obiectum unum redit (-primum 1) quod duos tantum ex agris quos nominavimus habet: bona eorum e primo objecto in fistulam per cmdlet Get-Processui transcripta sunt. Una viae ad res creatas in scriptoribus PowerShell innititur utendo selecto-obiecto:
$obj = Get-Process | Select-Object ProcessName, Id -First 1
$obj.GetType()
Usura Select-Objecti, proprietatibus computatis addere potes objectis quae sicuti repraesentanda sunt
Get-Process | Select-Object -Property ProcessName, @{Name="StartTime"; Expression = {$_.StartTime.Minute}}
Intueamur structuram objectorum per TRADUCTOR transeuntem:
Get-Process | Select-Object -Property ProcessName, @{Name="StartTime"; Expression = {$_.StartTime.Minute}} | Get-Member
ForEach-Objectum, Group-objectum et mensura-objectum
Sunt aliae cmdlets ad operandum cum obiectis. Exempli fama de tribus utilissimis;
ForEach-Object patitur currere PowerShell code pro singulis objectis in pipeline:
ForEach-Object { блок сценария }
Group-Object coetus res per valorem res:
Group-Object PropertyName
Si cum -NoElement parametri curras, numerum elementorum in coetibus invenire potes.
Metire-Object varias parametri summarias aggregat secundum valores campi obiecti in pipelino (summam computat et etiam invenit valorem minimum, maximum vel mediocris);
Measure-Object -Property PropertyName -Minimum -Maximum -Average -Sum
Typice de cmdlis agitatis interactive adhibentur et saepe in scriptis creantur.
Partum .NET et COM obiecti (Novum-Objectum)
Multae programmata programmata sunt cum .NET Core et COM interfaces quae ad administratores systematis utiles sunt. Systema.Diagnostics.EventLog classe utens, rationes systematicas directe ex Windows PowerShell administrare potes. Intueamur exemplum creandi exempli causa huius ordinis utendi Novo-Objecti cmdlet cum modulo -TypeName:
New-Object -TypeName System.Diagnostics.EventLog
Cum nos non specificare truncum specificum eventus, exempli causa inde in genere nullas notitias continet. Ad hoc mutandum, specialem architectorem methodum in creatione adhibens -ArgumentList parametri vocare debes. Si schedulam applicationem accedere velimus, filum "Applicatio" pro argumento ad conditorem transeundum est:
$AppLog = New-Object -TypeName System.Diagnostics.EventLog -ArgumentList Application
$AppLog
Quaeso note nos imperium in $AppLog variabili output servavimus. Etsi pipelines communiter adhibentur in modo interactivo, scripta scriptura saepe requirit ut respectum obiecti obtineat. Accedit, nucleus .NET Core classes continentur in spatio nominali System: PowerShell per default quaerit figuras specificatas in eo, sic scribens Diagnostics. EventLog loco System.Diagnostics.EventLog satis recte est.
Laborare cum stipite, idoneis modis uti potes;
$AppLog | Get-Member -MemberType Method
Dicamus per methodum claram () si iura accessi sint:
$AppLog.Clear()
Novum-Objectum cmdlet etiam cum COM componentibus laborare adhibetur. Satis multae sunt - e bibliothecis cum instrumentis fenestrarum scriptorum ad ActiveX applicationibus instructis, ut Penitus Rimor. Ad objectum COM creandum, parametrum ComObjectum ponere debes cum programma ProgId desiderati ordinis:
New-Object -ComObject WScript.Shell
New-Object -ComObject WScript.Network
New-Object -ComObject Scripting.Dictionary
New-Object -ComObject Scripting.FileSystemObject
Res tuas proprias cum structura arbitraria creare, Novo-Objecto utens nimis pervetusta et gravia videtur, haec cmdlet operari adhibetur cum instrumentis programmatibus externis ad PowerShell. In futuris articulis de hac re fusius disseretur. Praeter res NET et COM, explorabimus etiam CIM (WMI) et ADSI obiecta.
Vocans Static Methodi
Quaedam .NET Core classes instantiari non possunt, inter System. Environment et System.Math. Sunt
[System.Environment] | Get-Member
Ad sola membra stabilia consideranda, vocate Get-Mebrum cum parametro -Static (nota obiectum generis);
[System.Environment] | Get-Member -Static
Ut accessere proprietates et rationes stabilis, utere duobus colonis continuis pro periodo litterali:
[System.Environment]::OSVersion
uel
$test=[System.Math]::Sqrt(25)
$test
$test.GetType()
Typus PSCustomObject
Inter numerosa notitiarum genera in PowerShell praesto, PSCustomObject memorare dignum est, ad rerum thesaurum cum arbitraria structura disposito. Creando tale obiectum utens Novo-Objecto cmdlet consideratur classica, sed gravia et obsoleta;
$object = New-Object –TypeName PSCustomObject -Property @{Name = 'Ivan Danko';
City = 'Moscow';
Country = 'Russia'}
Intueamur structuram rei;
$object | Get-Member
Satus cum PowerShell 3.0, alia syntaxin praesto est:
$object = [PSCustomObject]@{Name = 'Ivan Danko';
City = 'Moscow';
Country = 'Russia'
}
Notitias accedere potes in uno ex modis aequipollentibus:
$object.Name
$object.'Name'
$value = 'Name'
$object.$value
Hic est exemplum convertendi ens hashtable ad objectum:
$hash = @{'Name'='Ivan Danko'; 'City'='Moscow'; 'Country'='Russia'}
$hash.GetType()
$object = [pscustomobject]$hash
$object.GetType()
Unum huiusmodi obiectorum incommoda est, quod ordo proprietatum suarum potest immutare. Hoc ne fiat, tribuere debes;
$object = [PSCustomObject][ordered]@{Name = 'Ivan Danko';
City = 'Moscow';
Country = 'Russia'
}
Aliae optiones sunt pro obiecto creandi: supra inspeximus utens cmdlet
$object | Add-Member –MemberType NoteProperty –Name Age –Value 33
$object | Get-Member
Adaugeo-Member cmdlet permittit ut non modo proprietates, sed etiam methodos ad objectum $ antea creatum adhibendo "-MemberType ScriptMethod" construendum permittat:
$ScriptBlock = {
# код
}
$object | Add-Member -Name "MyMethod" -MemberType ScriptMethod -Value $ScriptBlock
$object | Get-Member
Quaeso nota quod $ ScriptBlock variabilis generis ScriptBlock usi sumus ut codicem novae methodi reponemus.
Ad tollendas proprietates, utere debita methodo;
$object.psobject.properties.remove('Name')
Creando tuum Classes
PowerShell 5.0 induxit facultatem definiendi
class MyClass
{
# тело класса
}
Haec est vera .NET Core genus, cum corpore, quod suas proprietates, modos, aliaque elementa describit. Intueamur exemplum definiendi genus simplicissimum:
class MyClass
{
[string]$Name
[string]$City
[string]$Country
}
Ad creare objectum (exempli gratia genus), uti cmdlet
$object = New-Object -TypeName MyClass
aut
$object = [MyClass]::new()
Sit scriptor structuram obiecti resolvere:
$object | Get-Member
Noli oblivisci circa scopo: non potes referre ad typum nomen ut chorda vel typum litteralem uti extra scripturam vel modulum in quo genus definitur. Hoc in casu, munera referre possunt instantiarum classium (obiectarum) quae extra modulum vel scriptionem erunt pervias.
Post partum comple proprietates;
$object.Name = 'Ivan Danko'
$object.City = 'Moscow'
$object.Country = 'Russia'
$object
Nota descriptionem classium non solum proprietatem generum, sed etiam valores eorum defectus specificare;
class Example
{
[string]$Name = 'John Doe'
}
Genus methodi descriptio descriptioni functionis similis est, sed sine verbo functionis usus. Ut in functione, parametri traduntur ad methodos si opus sit;
class MyClass
{
[string]$Name
[string]$City
[string]$Country
#описание метода
Smile([bool]$param1)
{
If($param1) {
Write-Host ':)'
}
}
}
Nunc arridere potest repraesentativum ordinis nostri;
$object = [MyClass]::new()
$object.Smile($true)
Ratio cumulatur; praeterea genus est
class MyClass2 : MyClass
{
#тело нового класса, базовым для которого является MyClass
}
[MyClass2]::new().Smile($true)
Nostra descriptio operandi cum obiectis in PowerShell vix exhausti est. In sequentibus publicationibus eam profundius exemplis practicis conabimur: quintus articulus in serie tradendus erit quaestionibus PowerShell integrandi cum tertia-parte programmatum programmatum. Praeterita partes apud nexus infra reperiri possunt.
Source: www.habr.com