Soosaarka qoraalka ee amarrada ku jira daaqadda turjubaanka PowerShell waa hab lagu soo bandhigo macluumaadka qaab ku habboon aragtida aadanaha. Dhab ahaantii Arbacada
Shaxda tusmada:
Walxaha ku jira PowerShell
Aan dib u xasuusanno in shay uu yahay ururinta goobaha xogta (hantida, dhacdooyinka, iwm.) iyo hababka loo habeeyo (hababka). Qaab dhismeedkeeda waxaa lagu qeexay nooc, kaas oo inta badan ku saleysan fasalada loo isticmaalo midaysan .NET Core platform. Waxa kale oo suurtogal ah in lagu shaqeeyo COM, CIM (WMI) iyo walxaha ADSI. Guryaha iyo hababka ayaa loo baahan yahay si loo sameeyo ficillo kala duwan oo ku saabsan xogta; Intaa waxaa dheer, PowerShell, walxaha waxaa loo gudbin karaa dood ahaan hawlaha iyo cmdlets, oo loo qoondeeyay qiyamkooda doorsoomayaasha, iyo sidoo kale waxaa jira
Daawashada qaab dhismeedka walxaha
Tusaale ahaan, aan wadno Get-Process cmdlet, kaas oo kuu ogolaanaya inaad hesho macluumaadka ku saabsan hababka ku socda nidaamka:
Waxay soo bandhigi doontaa qaar ka mid ah xogta qoraalka qaabaysan oo aan wax fikrad ah ka bixinayn sifooyinka walxaha la soo celiyay iyo hababka ay u shaqeeyaan. Si loo hagaajiyo wax soo saarka, waxaan u baahanahay inaan barano sida loo baaro qaabka walxaha, iyo Get-Member cmdlet ayaa naga caawin doonta tan:
Get-Process | Get-Member
Halkan waxaan horayba u aragnaa nooca iyo qaab-dhismeedka, iyo iyadoo la kaashanayo cabbirro dheeraad ah waxaan awoodnaa, tusaale ahaan, soo bandhigida kaliya sifooyinka shayga ku jira gelinta:
Get-Process | Get-Member -MemberType Property
Aqoontan ayaa loo baahan doonaa si loo xalliyo mashaakilaadka maamulka si isdhexgal leh ama si aad u qorto qoraaladaada: tusaale ahaan, si aad u hesho macluumaadka ku saabsan hababka la sudhay adoo isticmaalaya hantida ka jawaabista.
Shaandhaynta walxaha
PowerShell waxay u ogolaataa shayada buuxiya shuruudo gaar ah in la maro dhuumaha:
Where-Object { блок сценария }
Natiijada fulinta qoraalka qoraalka ee ku dhex jira jaantusyada waa inay noqotaa qiime boolean ah. Haddii ay run tahay ($ run), shayga lagu geliyo Meesha-Waxyaabaha cmdlet waxa la marinayaa dhuumaha, haddii kale ($ been) waa la tirtiri doonaa. Tusaale ahaan, aan soo bandhigno liiska adeegyada Windows Server ee la joojiyay, i.e. kuwa Status hantidooda lagu dejiyay inay "Joojiso":
Get-Service | Where-Object {$_.Status -eq "Stopped"}
Halkan mar kale waxaan ku aragnaa matalaad qoraal ah, laakiin haddii aad rabto inaad fahamto nooca iyo qaabka gudaha ee walxaha maraya dhuumaha ma aha mid adag:
Get-Service | Where-Object {$_.Status -eq "Stopped"} | Get-Member
Kala soocida walxaha
Marka tuubbooyinka farsamaynta walxaha, waxaa badanaa loo baahan yahay in la kala saaro. cmdlet-ka Kala-soocida waxa la gudbiyaa magacyada guryaha (furayaasha kala-soocidda) oo soo celisa walxaha lagu amray qiimahooda. Way fududahay in la kala saaro wax soo saarka hababka socodsiinta wakhtiga CPU la qaatay ( hantida cpu):
Get-Process | Sort-Object –Property cpu
Halbeegga -Property waa laga saari karaa marka la wacayo Sort-Object cmdlet; waxaa loo istcimaalayaa si caadi ah. Kala soocida gadaasha, isticmaal qiyaasta -Descending:
Get-Process | Sort-Object cpu -Descending
Doorashada walxaha iyo qaybahooda
cmdlet-ka Select-Object wuxuu kuu ogolaanayaa inaad doorato tiro gaar ah oo shay ah bilowga ama dhamaadka dhuumaha adigoo isticmaalaya xuduudaha -First ama -Last. Caawinteeda, waxaad dooran kartaa shay keliya ama waxyaabo gaar ah, iyo sidoo kale waxaad abuuri kartaa walxo cusub oo iyaga ku salaysan. Aynu eegno sida uu cmdlet u shaqeeyo anagoo adeegsanayna tusaalooyin fudud.
Amarka soo socdaa wuxuu muujinayaa macluumaadka ku saabsan 10ka hab ee cunaya qadarka ugu badan ee RAM ( hantida WS):
Get-Process | Sort-Object WS -Descending | Select-Object -First 10
Waxaad dooran kartaa oo kaliya sifooyinka gaarka ah ee walxaha maraya dhuumaha oo waxaad abuurtaa kuwo cusub iyaga oo ku saleysan:
Get-Process | Select-Object ProcessName, Id -First 1
Natiijadii hawlgalka dhuumaha, waxaanu heli doonaa shay cusub, kaas oo qaab-dhismeedkiisu ka duwanaan doono qaab-dhismeedka uu soo celiyay Get-Process cmdlet. Aan ku xaqiijino tan anagoo adeegsanayna Get-Member:
Get-Process | Select-Object ProcessName, Id -First 1 | Get-Member
Ogsoonow in Select-Object uu soo celinayo hal shay (-First 1) kaas oo leh laba kaliya oo ka mid ah beeraha aan qeexnay: qiyamkooda waxaa laga soo guuriyay shaygii ugu horreeyay ee loo maro dhuumaha by Get-Process cmdlet. Mid ka mid ah siyaabaha loo abuuro walxaha ku jira qoraallada PowerShell waxay ku saleysan tahay adeegsiga Select-Wax:
$obj = Get-Process | Select-Object ProcessName, Id -First 1
$obj.GetType()
Adigoo isticmaalaya Select-Object, waxaad ku dari kartaa guryaha la xisaabiyay walxaha u baahan in loo muujiyo sida
Get-Process | Select-Object -Property ProcessName, @{Name="StartTime"; Expression = {$_.StartTime.Minute}}
Aynu eegno qaabka ay u dhisan yihiin walxaha dhex mara gaadiidka:
Get-Process | Select-Object -Property ProcessName, @{Name="StartTime"; Expression = {$_.StartTime.Minute}} | Get-Member
Shay-Wax kasta, Koox-Wax iyo Cabbir- Shay
Waxaa jira cmdlets kale oo loogu talagalay in lagu shaqeeyo walxaha. Tusaale ahaan, aan ka hadalno saddexda ugu faa'iidada badan:
Ujeeddo-kasta wuxuu kuu ogolaanayaa inaad ku socodsiiso koodka PowerShell shay kasta oo dhuumaha ku jira:
ForEach-Object { блок сценария }
Koox-Wax kooxuhu waxay wax ku iibsadaan qiimaha hantida:
Group-Object PropertyName
Haddii aad ku socodsiiso halbeegga -NoElement, waxaad ogaan kartaa tirada curiyeyaasha ee kooxaha.
Cabbir-Wax wuxuu isu geeyaa cabbirro kooban oo kala duwan iyadoo la eegayo qiyamka goobta shayga ee dhuumaha (wuxuu xisaabiyaa wadarta, iyo sidoo kale wuxuu helaa ugu yaraan, ugu badnaan ama celceliska qiimaha):
Measure-Object -Property PropertyName -Minimum -Maximum -Average -Sum
Caadi ahaan, cmdlets-ka laga hadlay waxaa loo istcimaalaa si dhexgal ah, waxaana badanaa lagu abuuraa qoraallo.
Abuuritaanka .NET iyo walxaha COM (Wax Cusub)
Waxaa jira qaybo badan oo software ah oo leh NET Core iyo COM interfaces kuwaas oo waxtar u leh maamulayaasha nidaamka. Adigoo isticmaalaya fasalka System.Diagnostics.EventLog, waxaad si toos ah uga maamuli kartaa diiwaannada nidaamka Windows PowerShell. Aynu eegno tusaale abuurista tusaale fasalkan annagoo adeegsanayna cmdlet-Walaxda Cusub oo leh halbeegga -TypeName:
New-Object -TypeName System.Diagnostics.EventLog
Maadaama aynaan cayimin diiwaanka dhacdooyinka gaarka ah, tusaalaha soo baxay ee fasalka kuma jiraan xog. Si aad tan u bedesho, waxaad u baahan tahay inaad wacdo hab dhisme gaar ah inta lagu jiro abuuritaankiisa adoo isticmaalaya cabbirka -ArgumentList. Haddii aan rabno in aan galno log-ka arjiga, waa in aan u gudubno xardhigga "Codsiga" dood ahaan dhisaha:
$AppLog = New-Object -TypeName System.Diagnostics.EventLog -ArgumentList Application
$AppLog
Fadlan ogow inaan ku keydinay wax soo saarka amarka doorsoomaha $AppLog. Inkasta oo dhuumaha inta badan loo isticmaalo habka is-dhexgalka, qoraallada qorista waxay inta badan u baahan yihiin in la ilaaliyo tixraaca shay. Intaa waxaa dheer, fasallada NET Core xudunta u ah waxay ka kooban yihiin nidaamka magaca nidaamka: PowerShell asal ahaan waxay u eegtaa noocyo cayiman, markaa qorista Diagnostics.EventLog beddelka System.Diagnostics.EventLog waa sax.
Si aad ula shaqeyso log, waxaad isticmaali kartaa hababka ku habboon:
$AppLog | Get-Member -MemberType Method
Aynu nidhaahno waxaa lagu nadiifiyay habka Clear () haddii ay jiraan xuquuqaha gelitaanka:
$AppLog.Clear()
cmdlet-ka-Cusub waxa kale oo loo istcimaalaa in lagula shaqeeyo qaybaha COM. Waxaa jira wax badan oo iyaga ka mid ah - laga bilaabo maktabadaha lagu soo bandhigay server-ka qoraalka Windows ilaa codsiyada ActiveX, sida Internet Explorer. Si aad u abuurto shayga COM, waxaad u baahan tahay inaad dejiso -ComObject parameter oo leh barnaamijka ProgId ee fasalka la rabo:
New-Object -ComObject WScript.Shell
New-Object -ComObject WScript.Network
New-Object -ComObject Scripting.Dictionary
New-Object -ComObject Scripting.FileSystemObject
Si aad u abuurto walxo kuu gaar ah oo leh qaab-dhismeed aan caadi ahayn, adeegsiga New-Object waxay u muuqataa mid qadiimi ah oo dhib badan; cmdlet-kan waxa loo isticmaalaa in lagu shaqeeyo qaybaha softiweerka ee ka baxsan PowerShell. Maqaallada mustaqbalka arrintan ayaa si faahfaahsan looga doodi doonaa. Marka lagu daro .NET iyo walxaha COM, waxaanu sidoo kale sahamin doonaa CIM (WMI) iyo walxaha ADSI.
Wacaysta Hababka Joogtada ah
Qaar ka mid ah fasalada NET Core lama soo dajin karo, oo ay ku jiraan System.Environment and System.Math. Waxay kala yihiin
[System.Environment] | Get-Member
Si aad u aragto xubnaha joogtada ah, wac Get-Member oo leh cabbirka -Static (u fiirso nooca shayga):
[System.Environment] | Get-Member -Static
Si aad u hesho hanti ma guurto ah iyo habab, isticmaal laba xiidan oo isku xigta halkii aad ka isticmaali lahayd muddo ka dib macnaha dhabta ah:
[System.Environment]::OSVersion
Ama
$test=[System.Math]::Sqrt(25)
$test
$test.GetType()
Nooca PSUStomObject
Ka mid ah noocyada xogta ee tirada badan ee laga heli karo PowerShell, waxaa mudan in la xuso PSCustomObject, oo loogu talagalay in lagu kaydiyo walxo leh qaab dhismeed aan caadi ahayn. Abuuritaanka shaygan oo kale iyadoo la isticmaalayo cmdlet-Walaxda Cusub waxa loo tixgaliyaa hab caadi ah, laakiin dhib badan oo duugoobay:
$object = New-Object –TypeName PSCustomObject -Property @{Name = 'Ivan Danko';
City = 'Moscow';
Country = 'Russia'}
Aynu eegno qaabka shayga:
$object | Get-Member
Laga bilaabo PowerShell 3.0, syntax kale ayaa diyaar ah:
$object = [PSCustomObject]@{Name = 'Ivan Danko';
City = 'Moscow';
Country = 'Russia'
}
Waxaad xogta ku heli kartaa mid ka mid ah siyaabaha u dhigma:
$object.Name
$object.'Name'
$value = 'Name'
$object.$value
Waa kuwan tusaale u beddelashada hashtable jira shay:
$hash = @{'Name'='Ivan Danko'; 'City'='Moscow'; 'Country'='Russia'}
$hash.GetType()
$object = [pscustomobject]$hash
$object.GetType()
Mid ka mid ah faa'iido darrada walxaha noocan oo kale ah ayaa ah in nidaamka hantidoodu isbeddeli karaan. Si taas looga fogaado, waa inaad isticmaashaa sifada [dalbashada]:
$object = [PSCustomObject][ordered]@{Name = 'Ivan Danko';
City = 'Moscow';
Country = 'Russia'
}
Waxaa jira xulashooyin kale oo lagu abuurayo shay: kor waxaan eegnay annaga oo adeegsanayna cmdlet
$object | Add-Member –MemberType NoteProperty –Name Age –Value 33
$object | Get-Member
cmdlet-ku-darka-xubinta waxay kuu oggolaanaysaa inaad ku darto guryaha oo keliya, laakiin sidoo kale habab aad ku darto shay hore loo sameeyay $ shay adoo isticmaalaya "-MemberType ScriptMethod" dhiska:
$ScriptBlock = {
# код
}
$object | Add-Member -Name "MyMethod" -MemberType ScriptMethod -Value $ScriptBlock
$object | Get-Member
Fadlan la soco in aan isticmaalnay doorsoomaha $ScriptBlock ee nooca ScriptBlock si aan u kaydiyo koodka habka cusub.
Si aad meesha uga saarto guryaha, isticmaal habka u dhigma:
$object.psobject.properties.remove('Name')
Abuuritaanka fasallo adiga kuu gaar ah
PowerShell 5.0 waxay soo bandhigtay awooda lagu qeexo
class MyClass
{
# тело класса
}
Kani waa nooca .NET Core oo run ah, oo leh jidh qeexaya sifooyinkiisa, hababka iyo walxaha kale. Aynu eegno tusaale qeexida fasalka ugu fudud:
class MyClass
{
[string]$Name
[string]$City
[string]$Country
}
Si aad u abuurto shay (tusaale fasalka), isticmaal cmdlet
$object = New-Object -TypeName MyClass
ama
$object = [MyClass]::new()
Aynu falanqeyno qaabka shayga:
$object | Get-Member
Ha iloobin baaxadda: magaca nooca xarriiq ahaan uma tixraaci kartid ama ma isticmaali kartid nooc ka baxsan qoraalka ama moduleka kaas oo fasalka lagu qeexay. Xaaladdan, hawluhu waxay soo celin karaan tusaalooyinka fasalka (walxaha) ee laga heli karo meel ka baxsan cutubka ama qoraalka.
Kadib abuurista shayga, buuxi sifooyinkiisa:
$object.Name = 'Ivan Danko'
$object.City = 'Moscow'
$object.Country = 'Russia'
$object
Ogsoonow in sharraxaadda fasalka aysan qeexayn oo keliya noocyada hantida, laakiin sidoo kale qiimahooda caadiga ah:
class Example
{
[string]$Name = 'John Doe'
}
Sharaxaada habka fasalku waxay u egtahay sharraxaadda shaqada, laakiin iyada oo aan la isticmaalin ereyga shaqada. Sida shaqada, cabbirada waxaa loo gudbiyaa hababka haddii loo baahdo:
class MyClass
{
[string]$Name
[string]$City
[string]$Country
#описание метода
Smile([bool]$param1)
{
If($param1) {
Write-Host ':)'
}
}
}
Hadda wakiilka fasalkayagu wuu dhoola cadeyn karaa:
$object = [MyClass]::new()
$object.Smile($true)
Hababka waa la badin karaa, marka lagu daro, fasal ayaa leh
class MyClass2 : MyClass
{
#тело нового класса, базовым для которого является MyClass
}
[MyClass2]::new().Smile($true)
Sharaxaada ku saabsan la shaqaynta walxaha PowerShell waa mid aad u yar. Daabacaadaha soo socda, waxaan isku dayi doonaa inaan ku sii qotono tusaalooyin wax ku ool ah: maqaalka shanaad ee taxanaha ayaa loo go'aamin doonaa arrimaha isku dhafka PowerShell ee qaybaha software-ka saddexaad. Qaybihii hore waxaa laga heli karaa xiriirinta hoose.
Source: www.habr.com