Cov ntawv sau tawm ntawm cov lus txib hauv PowerShell lub qhov rais txhais lus tsuas yog ib txoj hauv kev los tso saib cov ntaub ntawv hauv ib daim ntawv uas haum rau tib neeg kev nkag siab. Tiag tiag hnub Wednesday
Cov ntsiab lus:
Cov khoom hauv PowerShell
Cia peb nco qab tias ib qho khoom yog ib qho kev sau ntawm cov ntaub ntawv (cov khoom, cov xwm txheej, thiab lwm yam) thiab cov txheej txheem rau kev ua lawv (txoj kev). Nws cov qauv yog teev los ntawm ib hom, uas feem ntau yog raws li cov chav kawm siv nyob rau hauv unified .NET Core platform. Nws tseem tuaj yeem ua haujlwm nrog COM, CIM (WMI) thiab ADSI cov khoom. Cov cuab yeej thiab cov txheej txheem yuav tsum tau ua los ua ntau yam kev ua ntawm cov ntaub ntawv; ntxiv rau, hauv PowerShell, cov khoom tuaj yeem dhau los ua kev sib cav rau cov haujlwm thiab cmdlets, muab lawv cov txiaj ntsig rau qhov sib txawv, thiab tseem muaj.
Saib cov qauv ntawm cov khoom
Piv txwv li, cia peb khiav qhov Get-Process cmdlet, uas tso cai rau koj kom tau txais cov ntaub ntawv hais txog cov txheej txheem khiav hauv qhov system:
Nws yuav tso tawm qee cov ntaub ntawv formatted uas tsis muab lub tswv yim txog cov khoom ntawm cov khoom xa rov qab thiab lawv txoj kev. Txhawm rau kho qhov tso tawm kom zoo, peb yuav tsum kawm paub tshuaj xyuas cov qauv ntawm cov khoom, thiab Get-Member cmdlet yuav pab peb nrog qhov no:
Get-Process | Get-Member
Ntawm no peb twb pom hom thiab cov qauv, thiab nrog kev pab los ntawm cov tsis ntxiv peb tuaj yeem, piv txwv li, tsuas yog tso saib cov khoom ntawm cov khoom suav nrog hauv cov tswv yim:
Get-Process | Get-Member -MemberType Property
Qhov kev paub no yuav xav tau los daws cov teeb meem kev tswj hwm kev sib tham lossis sau koj tus kheej cov ntawv sau: piv txwv li, kom tau txais cov ntaub ntawv hais txog cov txheej txheem dai siv cov cuab yeej teb.
Lim cov khoom
PowerShell tso cai rau cov khoom uas ua tau raws li qee yam xwm txheej kom dhau los ntawm cov kav dej:
Where-Object { блок сценария }
Qhov tshwm sim ntawm kev ua tiav cov ntawv thaiv nyob rau hauv cov kab lus yuav tsum yog tus nqi boolean. Yog tias nws muaj tseeb ($ tseeb), cov khoom uas nkag mus rau Qhov Chaw-Object cmdlet yuav dhau mus raws cov kav dej, txwv tsis pub ($ cuav) nws yuav raug muab tshem tawm. Piv txwv li, cia peb tso saib cov npe ntawm Windows Server cov kev pabcuam nres, i.e. cov uas nws cov xwm txheej xwm txheej tau teeb tsa rau "Stopped":
Get-Service | Where-Object {$_.Status -eq "Stopped"}
Ntawm no dua peb pom cov ntaub ntawv sawv cev, tab sis yog tias koj xav nkag siab txog hom thiab cov qauv sab hauv ntawm cov khoom hla lub raj xa dej nws tsis yooj yim:
Get-Service | Where-Object {$_.Status -eq "Stopped"} | Get-Member
Kev txheeb cov khoom
Thaum lub raj xa dej ntawm cov khoom siv, feem ntau yuav tsum tau txheeb lawv. Qhov Xaiv-Object cmdlet tau dhau lub npe ntawm cov khoom (cov yuam sij cais) thiab xa cov khoom xaj los ntawm lawv cov nqi. Nws yooj yim los txheeb xyuas cov txiaj ntsig ntawm cov txheej txheem khiav los ntawm CPU lub sijhawm siv (cpu khoom):
Get-Process | Sort-Object –Property cpu
Qhov -Property parameter tuaj yeem raug tshem tawm thaum hu rau Sort-Object cmdlet; nws yog siv los ntawm lub neej ntawd. Rau kev rov qab sorting, siv qhov -Descending parameter:
Get-Process | Sort-Object cpu -Descending
Xaiv cov khoom thiab lawv qhov chaw
Lub Select-Object cmdlet tso cai rau koj xaiv ib tus lej tshwj xeeb ntawm cov khoom thaum pib lossis xaus ntawm cov kav dej siv cov -First lossis -Last tsis. Nrog nws cov kev pab, koj tuaj yeem xaiv ib qho khoom lossis qee yam khoom, thiab tseem tsim cov khoom tshiab raws li lawv. Cia peb saib seb cmdlet ua haujlwm li cas siv cov piv txwv yooj yim.
Cov lus txib hauv qab no qhia cov ntaub ntawv hais txog 10 txheej txheem siv qhov siab tshaj plaws ntawm RAM (WS khoom):
Get-Process | Sort-Object WS -Descending | Select-Object -First 10
Koj tuaj yeem xaiv tsuas yog qee yam khoom ntawm cov khoom dhau los ntawm cov kav dej thiab tsim cov tshiab raws li lawv:
Get-Process | Select-Object ProcessName, Id -First 1
Raws li kev ua haujlwm ntawm cov raj xa dej, peb yuav tau txais cov khoom tshiab, cov qauv uas yuav txawv ntawm cov qauv xa rov qab los ntawm Get-Process cmdlet. Cia peb txheeb xyuas qhov no siv Get-Member:
Get-Process | Select-Object ProcessName, Id -First 1 | Get-Member
Nco ntsoov tias Select-Object xa rov qab ib qho khoom (-First 1) uas tsuas muaj ob qhov chaw peb tau teev tseg: lawv cov txiaj ntsig tau luam tawm los ntawm thawj cov khoom dhau mus rau hauv cov raj xa dej los ntawm Get-Process cmdlet. Ib txoj hauv kev los tsim cov khoom hauv PowerShell scripts yog raws li kev siv Select-Object:
$obj = Get-Process | Select-Object ProcessName, Id -First 1
$obj.GetType()
Siv Select-Object, koj tuaj yeem ntxiv cov khoom suav nrog rau cov khoom uas yuav tsum tau sawv cev ua
Get-Process | Select-Object -Property ProcessName, @{Name="StartTime"; Expression = {$_.StartTime.Minute}}
Cia peb saib cov qauv ntawm cov khoom uas dhau los ntawm lub conveyor:
Get-Process | Select-Object -Property ProcessName, @{Name="StartTime"; Expression = {$_.StartTime.Minute}} | Get-Member
ForEach-Object, Group-Object thiab Measure-Object
Muaj lwm cov cmdlets ua haujlwm nrog cov khoom. Ua piv txwv, cia peb tham txog peb qhov tseem ceeb tshaj plaws:
ForEach-Object tso cai rau koj khiav PowerShell code rau txhua yam khoom hauv cov kav dej:
ForEach-Object { блок сценария }
Pawg-Qhov Khoom pab pawg khoom los ntawm cov khoom muaj nqis:
Group-Object PropertyName
Yog tias koj khiav nws nrog -NoElement parameter, koj tuaj yeem pom cov naj npawb ntawm cov ntsiab lus hauv pawg.
Ntsuas-Qhov Khoom aggregates ntau cov ntsiab lus tsis sib xws los ntawm cov khoom lag luam qhov tseem ceeb hauv cov raj xa dej (xws li cov lej, thiab tseem pom qhov tsawg kawg nkaus, siab tshaj lossis nruab nrab tus nqi):
Measure-Object -Property PropertyName -Minimum -Maximum -Average -Sum
Feem ntau, cov cmdlets sib tham yog siv sib tham sib, thiab feem ntau yog tsim nyob rau hauv scripts.
Tsim .NET thiab COM khoom (New-Object)
Muaj ntau ntau yam software nrog .NET Core thiab COM interfaces uas muaj txiaj ntsig zoo rau cov thawj tswj hwm. Siv cov chav kawm System.Diagnostics.EventLog, koj tuaj yeem tswj cov ntawv teev lus ncaj qha los ntawm Windows PowerShell. Cia peb saib ib qho piv txwv ntawm kev tsim ib qho piv txwv ntawm chav kawm no siv New-Object cmdlet nrog rau -TypeName parameter:
New-Object -TypeName System.Diagnostics.EventLog
Txij li thaum peb tsis tau qhia meej txog qhov xwm txheej tshwj xeeb, qhov tshwm sim ntawm cov chav kawm tsis muaj cov ntaub ntawv. Txhawm rau hloov qhov no, koj yuav tsum hu rau tus qauv tsim tshwj xeeb thaum nws tsim siv -ArgumentList parameter. Yog tias peb xav nkag mus rau hauv daim ntawv thov, peb yuav tsum dhau txoj hlua "Application" raws li kev sib cav rau tus tsim:
$AppLog = New-Object -TypeName System.Diagnostics.EventLog -ArgumentList Application
$AppLog
Thov nco ntsoov tias peb tau khaws cov khoom tso tawm ntawm cov lus txib hauv $ AppLog hloov pauv. Txawm hais tias cov raj xa dej feem ntau siv rau hauv kev sib tham sib, kev sau ntawv feem ntau yuav tsum muaj kev tuav pov hwm rau ib yam khoom. Tsis tas li ntawd, cov chav kawm .NET Core muaj nyob hauv System namespace: PowerShell los ntawm lub neej ntawd saib rau cov hom teev hauv nws, yog li sau Diagnostics.EventLog es tsis siv System.Diagnostics.EventLog yog qhov tseeb.
Txhawm rau ua haujlwm nrog lub cav, koj tuaj yeem siv cov txheej txheem tsim nyog:
$AppLog | Get-Member -MemberType Method
Cia peb hais tias nws raug tshem tawm los ntawm Clear() txoj kev yog tias muaj txoj cai nkag:
$AppLog.Clear()
Lub New-Object cmdlet kuj tseem siv los ua haujlwm nrog COM Cheebtsam. Muaj ntau ntau ntawm lawv - los ntawm cov tsev qiv ntawv muab nrog Windows script server rau ActiveX daim ntawv thov, xws li Internet Explorer. Txhawm rau tsim ib qho khoom COM, koj yuav tsum tau teeb tsa -ComObject parameter nrog cov programmatic ProgId ntawm cov chav kawm xav tau:
New-Object -ComObject WScript.Shell
New-Object -ComObject WScript.Network
New-Object -ComObject Scripting.Dictionary
New-Object -ComObject Scripting.FileSystemObject
Txhawm rau tsim koj tus kheej cov khoom nrog cov qauv tsis txaus ntseeg, siv New-Object zoo li qub thiab cumbersome; cmdlet no yog siv los ua haujlwm nrog cov khoom siv software sab nraud rau PowerShell. Nyob rau hauv tsab xov xwm yav tom ntej no qhov teeb meem yuav tau tham nyob rau hauv kom meej ntxiv. Ntxiv rau .NET thiab COM cov khoom, peb tseem yuav tshawb txog CIM (WMI) thiab ADSI cov khoom.
Hu rau Static Methods
Qee cov chav kawm .NET Core tsis tuaj yeem ua tau sai, suav nrog System.Environment thiab System.Math. Lawv yog
[System.Environment] | Get-Member
Txhawm rau saib tsuas yog cov tswv cuab zoo li qub, hu rau Get-Member nrog -Static parameter (nco txog hom khoom):
[System.Environment] | Get-Member -Static
Txhawm rau nkag mus rau cov khoom zoo li qub thiab cov txheej txheem, siv ob qhov sib law liag es tsis txhob siv lub sijhawm tom qab cov lus:
[System.Environment]::OSVersion
Los yog
$test=[System.Math]::Sqrt(25)
$test
$test.GetType()
Ntaus PSCustomObject
Ntawm ntau hom ntaub ntawv muaj nyob rau hauv PowerShell, nws tsim nyog hais txog PSCustomObject, tsim los khaws cov khoom nrog cov qauv tsis raug. Tsim ib yam khoom siv New-Object cmdlet yog suav tias yog classic, tab sis cumbersome thiab outdated txoj kev:
$object = New-Object –TypeName PSCustomObject -Property @{Name = 'Ivan Danko';
City = 'Moscow';
Country = 'Russia'}
Cia peb saib cov qauv ntawm cov khoom:
$object | Get-Member
Pib nrog PowerShell 3.0, lwm cov syntax muaj:
$object = [PSCustomObject]@{Name = 'Ivan Danko';
City = 'Moscow';
Country = 'Russia'
}
Koj tuaj yeem nkag mus rau cov ntaub ntawv hauv ib txoj hauv kev sib npaug:
$object.Name
$object.'Name'
$value = 'Name'
$object.$value
Nov yog ib qho piv txwv ntawm kev hloov ib qho hashable uas twb muaj lawm rau ib yam khoom:
$hash = @{'Name'='Ivan Danko'; 'City'='Moscow'; 'Country'='Russia'}
$hash.GetType()
$object = [pscustomobject]$hash
$object.GetType()
Ib qho tsis zoo ntawm cov khoom ntawm hom no yog qhov kev txiav txim ntawm lawv cov khoom tuaj yeem hloov pauv. Txhawm rau zam qhov no, koj yuav tsum siv tus cwj pwm [ordered]:
$object = [PSCustomObject][ordered]@{Name = 'Ivan Danko';
City = 'Moscow';
Country = 'Russia'
}
Muaj lwm txoj hauv kev los tsim ib qho khoom: saum toj no peb saib ntawm kev siv cmdlet
$object | Add-Member –MemberType NoteProperty –Name Age –Value 33
$object | Get-Member
Add-Member cmdlet tso cai rau koj ntxiv tsis yog cov khoom xwb, tab sis kuj tseem muaj txoj hauv kev rau ib qho khoom siv yav dhau los uas tau tsim los ntawm kev siv "-MemberType ScriptMethod" tsim:
$ScriptBlock = {
# код
}
$object | Add-Member -Name "MyMethod" -MemberType ScriptMethod -Value $ScriptBlock
$object | Get-Member
Thov nco ntsoov tias peb siv $ ScriptBlock sib txawv ntawm hom ScriptBlock los khaws cov cai rau txoj kev tshiab.
Txhawm rau tshem tawm cov khoom, siv cov txheej txheem sib xws:
$object.psobject.properties.remove('Name')
Tsim Koj Tus Kheej Chav Kawm
PowerShell 5.0 qhia txog lub peev xwm los txhais
class MyClass
{
# тело класса
}
Qhov no yog qhov tseeb .NET Core hom, nrog lub cev uas piav qhia nws cov khoom, txoj hauv kev, thiab lwm yam. Cia peb saib ib qho piv txwv ntawm kev txhais cov chav kawm yooj yim tshaj plaws:
class MyClass
{
[string]$Name
[string]$City
[string]$Country
}
Txhawm rau tsim ib qho khoom (chav piv txwv), siv cmdlet
$object = New-Object -TypeName MyClass
los yog
$object = [MyClass]::new()
Cia peb tsom xam cov qauv ntawm cov khoom:
$object | Get-Member
Tsis txhob hnov qab txog qhov: koj tsis tuaj yeem xa mus rau hom npe raws li txoj hlua lossis siv hom ntawv sab nraud ntawm tsab ntawv lossis cov qauv uas cov chav kawm tau txhais. Hauv qhov no, kev ua haujlwm tuaj yeem xa rov qab cov piv txwv hauv chav kawm (cov khoom) uas yuav nkag mus tau sab nraum lub module lossis tsab ntawv.
Tom qab tsim cov khoom, sau rau hauv nws cov khoom:
$object.Name = 'Ivan Danko'
$object.City = 'Moscow'
$object.Country = 'Russia'
$object
Nco ntsoov tias cov lus piav qhia hauv chav kawm tsis yog tsuas yog cov khoom vaj khoom tsev xwb, tab sis kuj tseem muaj lawv qhov tseem ceeb:
class Example
{
[string]$Name = 'John Doe'
}
Cov lus piav qhia ntawm ib txoj hauv kev zoo ib yam li cov lus piav qhia ntawm lub luag haujlwm, tab sis tsis siv lo lus ua haujlwm. Raws li nyob rau hauv ib tug muaj nuj nqi, parameters yog kis mus rau txoj kev yog tias tsim nyog:
class MyClass
{
[string]$Name
[string]$City
[string]$Country
#описание метода
Smile([bool]$param1)
{
If($param1) {
Write-Host ':)'
}
}
}
Tam sim no tus neeg sawv cev ntawm peb chav kawm tuaj yeem luag nyav:
$object = [MyClass]::new()
$object.Smile($true)
Cov txheej txheem tuaj yeem overloaded; ntxiv rau, chav kawm muaj
class MyClass2 : MyClass
{
#тело нового класса, базовым для которого является MyClass
}
[MyClass2]::new().Smile($true)
Peb cov lus piav qhia ntawm kev ua hauj lwm nrog cov khoom hauv PowerShell yog qhov nyuaj heev. Hauv cov ntawv tshaj tawm hauv qab no, peb yuav sim ua kom tob rau nws nrog cov piv txwv zoo: tsab xov xwm thib tsib hauv koob yuav mob siab rau cov teeb meem ntawm kev koom ua ke PowerShell nrog cov khoom siv thib peb. Cov seem yav dhau los tuaj yeem pom ntawm qhov txuas hauv qab no.
Tau qhov twg los: www.hab.com