ืคืื ืืืงืกื ืฉื ืคืงืืืืช ืืืืื ืืืชืืจืืื ืฉื PowerShell ืืื ืจืง ืืจื ืืืฆืื ืืืืข ืืฆืืจื ืืืชืืืื ืืชืคืืกื ืื ืืฉืืช. ืืขืฆื ืืื ืจืืืขื
ืืืคืฆืืืช:
ืืืืืืงืืื ื- PowerShell
ื ืืืืจ ืฉืืืืืืงื ืืื ืืืกืฃ ืฉื ืฉืืืช ื ืชืื ืื (ืืืคืืื ืื, ืืืจืืขืื ืืื') ืืฉืืืืช ืืขืืืืื (ืฉืืืืช). ืืืื ื ืฉืื ืืืืืจ ืขื ืืื ืกืื, ืืืืืกืก ืืืจื ืืื ืขื ืืืืงืืช ืืืฉืืฉืืช ืืคืืืคืืจืืช .NET Core ืืืืืืืช. ืืคืฉืจ ืื ืืขืืื ืขื ืืืืืืงืื COM, CIM (WMI) ื-ADSI. ืืจืืฉืื ืืืคืืื ืื ืืฉืืืืช ืืืืฆืืข ืคืขืืืืช ืฉืื ืืช ืื ืชืื ืื; ืื ืืกืฃ, ื-PowerShell, ื ืืชื ืืืขืืืจ ืืืืืืงืืื ืืืจืืืื ืืื ืืคืื ืงืฆืืืช ื-cmdlet, ืืืงืฆืืช ืืช ืืขืจืืื ืฉืืื ืืืฉืชื ืื, ืืืฉ ืื
ืฆืคืืื ืืืื ื ืฉื ืืคืฆืื
ืืืืืื, ืืืื ื ืจืืฅ ืืช ื-cmdlet Get-Process, ืืืืคืฉืจ ืืงืื ืืืืข ืขื ืืชืืืืืื ืืจืฆืื ืืืขืจืืช:
ืื ืืฆืื ืืื ื ืชืื ื ืืงืกื ืืขืืฆืืื ืฉืืื ื ื ืืชื ืื ืืืฉื ืืืื ืืืืคืืื ืื ืฉื ืืืืืืืงืืื ืืืืืืจืื ืืืฉืืืืช ืฉืืื. ืืื ืืืืื ื ืืช ืืคืื, ืขืืื ื ืืืืื ืืืฆื ืืืืื ืืช ืืืื ื ืฉื ืืืืืืงืืื, ืื-cmdlet Get-Member ืืขืืืจ ืื ื ืืื:
Get-Process | Get-Member
ืืื ืืืจ ืจืืืื ืืช ืืกืื ืืืืื ื, ืืืขืืจืช ืคืจืืืจืื ื ืืกืคืื ื ืืื, ืืืฉื, ืืืฆืื ืจืง ืืช ืืืืคืืื ืื ืฉื ืืืืืืืงื ืฉื ืืื ืืงืื:
Get-Process | Get-Member -MemberType Property
ืืืข ืื ืืืื ื ืืืฅ ืืื ืืคืชืืจ ืืขืืืช ื ืืืื ืืืืคื ืืื ืืจืืงืืืื ืื ืืื ืืืชืื ืกืงืจืืคืืื ืืฉืื: ืืืฉื, ืืื ืืงืื ืืืืข ืขื ืชืืืืืื ืชืืืืื ืืืืฆืขืืช ืืืืคืืื Reponding.
ืกืื ืื ืืคืฆืื
PowerShell ืืืคืฉืจ ืืืขืืืจ ืืืืืืงืืื ืืขืืืืื ืืชื ืื ืืกืืื ืืจื ืฆืื ืืจ:
Where-Object { ะฑะปะพะบ ััะตะฝะฐัะธั }
ืืชืืฆืื ืฉื ืืืฆืืข ืืืืง ืืกืงืจืืคื ืืชืื ืืกืืืจืืื ืืืืืช ืืืืืช ืขืจื ืืืืืื ื. ืื ืื ื ืืื ($true), ืืืืืืืงื ืฉื ืงืื ื-cmdlet Where-Object ืืืขืืจ ืืืืจื ืืฆืื ืืจ, ืืืจืช ($false) ืืื ืืืืืง. ืืืืืื, ืืืื ื ืฆืื ืจืฉืืื ืฉื ืฉืืจืืชื Windows Server ืฉืืืคืกืงื, ืืืืืจ. ืืื ืฉืืืคืืื ืืกืืืืก ืฉืืื ืืืืืจ ื-"Stopped":
Get-Service | Where-Object {$_.Status -eq "Stopped"}
ืืื ืฉืื ืื ื ืจืืืื ืืืฆืื ืืงืกืืืืื, ืืื ืื ืืชื ืจืืฆื ืืืืื ืืช ืืกืื ืืืืื ื ืืคื ืืื ืฉื ืืืืืืืงืืื ืืขืืืจืื ืืฆืื ืืจ ืื ืื ืงืฉื:
Get-Service | Where-Object {$_.Status -eq "Stopped"} | Get-Member
ืืืื ืืคืฆืื
ืืขืช ืขืืืื ืฆื ืจืช ืฉื ืืืืืืงืืื, ืืขืชืื ืงืจืืืืช ืืฉ ืฆืืจื ืืืืื ืืืชื. ื-cmdlet Sort-Object ืืขืืืจ ืืช ืฉืืืช ืืืืคืืื ืื (ืืคืชืืืช ืืืื) ืืืืืืจ ืืืืืืงืืื ืืกืืืจืื ืืคื ืืขืจืืื ืฉืืื. ืงื ืืืืื ืืช ืืคืื ืฉื ืชืืืืืื ืคืืขืืื ืืคื ืืื ื-CPU (ืืืคืืื CPU):
Get-Process | Sort-Object โProperty cpu
ื ืืชื ืืืฉืืื ืืช ืืคืจืืืจ -Property ืืขืช ืงืจืืื ื-Sort-Object cmdlet; ืืื ืืฉืืฉ ืืืจืืจืช ืืืื. ืืืืื ืืคืื, ืืฉืชืืฉ ืืคืจืืืจ -ืืืจืืื:
Get-Process | Sort-Object cpu -Descending
ืืืืจืช ืืคืฆืื ืืืืงืืื
ื-cmdlet Select-Object ืืืคืฉืจ ืื ืืืืืจ ืืกืคืจ ืืกืืื ืฉื ืืืืืืงืืื ืืชืืืืช ืื ืืกืืฃ ืฆืื ืืจ ืืืืฆืขืืช ืืคืจืืืจืื -First ืื -Last. ืืขืืจืชื ืชืืืื ืืืืืจ ืืืืืืงืืื ืืืืืื ืื ืืืคืืื ืื ืืกืืืืื, ืืื ืืืฆืืจ ืืืืืืงืืื ืืืฉืื ืขื ืกืื ืืืชื. ืืืื ื ืกืชืื ืืืฆื ื-cmdlet ืขืืื ืืืืฆืขืืช ืืืืืืืช ืคืฉืืืืช.
ืืคืงืืื ืืืื ืืฆืืื ืืืืข ืขื 10 ืืชืืืืืื ืฉืฆืืจืืื ืืช ืืืืืช ืืืงืกืืืืืช ืฉื RAM (ืืืคืืื WS):
Get-Process | Sort-Object WS -Descending | Select-Object -First 10
ืืชื ืืืื ืืืืืจ ืจืง ืืืคืืื ืื ืืกืืืืื ืฉื ืืืืืืงืืื ืืขืืืจืื ืืฆืื ืืจ ืืืืฆืืจ ืืืคืืื ืื ืืืฉืื ืขื ืกืื ืืืชื:
Get-Process | Select-Object ProcessName, Id -First 1
ืืชืืฆืื ืืืคืขืืช ืืฆืื ืืจ ื ืงืื ืืืืืืงื ืืืฉ ืฉืืื ืื ืืืื ืฉืื ื ืืืืื ื ืฉืืืืืจ ื-Cmdlet Get-Process. ืืืื ื ืืืื ืืืช ืืืืฆืขืืช Get-Member:
Get-Process | Select-Object ProcessName, Id -First 1 | Get-Member
ืฉืืื ืื ืฉ- Select-Object ืืืืืจ ืืืืืืงื ืืืื (-1 ืจืืฉืื) ืฉืืฉ ืื ืจืง ืฉื ืืื ืืืฉืืืช ืฉืฆืืื ื: ืืขืจืืื ืฉืืื ืืืขืชืงื ืืืืืืืืงื ืืจืืฉืื ืฉืืืขืืจ ืืฆืื ืืจ ืขื ืืื ื-cmdlet Get-Process. ืืืช ืืืจืืื ืืืฆืืจ ืืืืืืงืืื ืืกืงืจืืคืืื ืฉื PowerShell ืืืืกืกืช ืขื ืฉืืืืฉ ื- Select-Object:
$obj = Get-Process | Select-Object ProcessName, Id -First 1
$obj.GetType()
ืืืืฆืขืืช Select-Object, ื ืืชื ืืืืกืืฃ ืืืคืืื ืื ืืืืฉืืื ืืืืืืืงืืื ืฉืฆืจืืืื ืืืืืช ืืืืฆืืื ืืชืืจ
Get-Process | Select-Object -Property ProcessName, @{Name="StartTime"; Expression = {$_.StartTime.Minute}}
ืืืื ื ืกืชืื ืขื ืืื ื ืืืคืฆืื ืืขืืืจืื ืืจื ืืืกืืข:
Get-Process | Select-Object -Property ProcessName, @{Name="StartTime"; Expression = {$_.StartTime.Minute}} | Get-Member
ForEach-Object, Group-Object ืืืืื-Object
ืืฉื ื cmdlets ืืืจืื ืืขืืืื ืขื ืืืืืืงืืื. ืืืืืื, ืืืื ื ืืืจ ืขื ืฉืืืฉืช ืืฉืืืืฉืืื ืืืืชืจ:
ForEach-Object ืืืคืฉืจ ืื ืืืจืืฅ ืงืื PowerShell ืขืืืจ ืื ืืืืืืงื ืืฆืื ืืจ:
ForEach-Object { ะฑะปะพะบ ััะตะฝะฐัะธั }
ืงืืืฆื-ืืืืืืงื ืืงืืฅ ืืืืืืงืืื ืืคื ืขืจื ืืืคืืื:
Group-Object PropertyName
ืื ืชืคืขืื ืืืชื ืขื ืืคืจืืืจ -NoElement, ืชืืื ืืืืืช ืืช ืืกืคืจ ืืืืื ืืื ืืงืืืฆืืช.
ืืืื-ืืคืฅ ืืืกืฃ ืคืจืืืจื ืกืืืื ืฉืื ืื ืืคื ืขืจืื ืฉืืืช ืืืืืืงื ืืฆื ืจืช (ืืืฉื ืืช ืืกืืื, ืืื ืืืฆื ืืช ืืขืจื ืืืื ืืืื, ืืืงืกืืืื ืื ืืืืืฆืข):
Measure-Object -Property PropertyName -Minimum -Maximum -Average -Sum
ืืืจื ืืื, ื-cmdlets ืื ืืืื ืื ืืฉืืฉืื ืืืืคื ืืื ืืจืืงืืืื, ืืืขืชืื ืงืจืืืืช ื ืืฆืจืื ืืกืงืจืืคืืื.
ืืฆืืจืช ืืืืืืงืื NET ื-COM (New-Object)
ืืฉื ื ืจืืืื ืชืืื ื ืจืืื ืขื ืืืฉืงื .NET Core ื-COM ืฉืืืืฉืืื ืืื ืืื ืืขืจืืช. ืืืืฆืขืืช ืืืืืงื System.Diagnostics.EventLog, ืืชื ืืืื ืื ืื ืืืื ื ืืขืจืืช ืืฉืืจืืช ื-Windows PowerShell. ืืืื ื ืกืชืื ืขื ืืืืื ืืืฆืืจืช ืืืคืข ืฉื ืืืืงื ืื ืืืืฆืขืืช ื-cmdlet New-Object ืขื ืืคืจืืืจ -TypeName:
New-Object -TypeName System.Diagnostics.EventLog
ืืืืืื ืฉืื ืฆืืื ื ืืืื ืืืจืืขืื ืกืคืฆืืคื, ืืืืคืข ืืืชืงืื ืฉื ืืืืืงื ืืื ื ืืืื ื ืชืื ืื. ืืื ืืฉื ืืช ืืืช, ืขืืื ืืงืจืื ืืฉืืืช ืื ืื ืืืืืืช ืืืืื ืืฆืืจืชื ืืืืฆืขืืช ืืคืจืืืจ -ArgumentList. ืื ืืจืฆืื ื ื ืืืฉืช ืืืืื ืืืืฉืื, ืขืืื ื ืืืขืืืจ ืืช ืืืืจืืืช "Application" ืืืจืืืื ื ืืื ืื:
$AppLog = New-Object -TypeName System.Diagnostics.EventLog -ArgumentList Application
$AppLog
ืฉืืื ืื ืฉืฉืืจื ื ืืช ืืคืื ืฉื ืืคืงืืื ืืืฉืชื ื $AppLog. ืืืจืืช ืฉืืืจื ืืื ืืฉืชืืฉืื ืืฆืื ืืจืืช ืืืฆื ืืื ืืจืืงืืืื, ืืชืืืช ืกืงืจืืคืืื ืืืจืฉืช ืืขืชืื ืงืจืืืืช ืฉืืืจื ืขื ืืคื ืื ืืืืืืืงื. ืื ืืกืฃ, ืืืืงืืช ืืืืื .NET Core ืืืืืืช ืืืจืื ืืฉืืืช ืฉื ืืืขืจืืช: PowerShell ืืืจืืจืช ืืืื ืืืคืฉืช ืกืืืื ืฉืฆืืื ื ืื, ืื ืฉืืชืืืช Diagnostics.EventLog ืืืงืื System.Diagnostics.EventLog ืืื ืื ื ืืื ื.
ืืื ืืขืืื ืขื ืืืืื, ืืชื ืืืื ืืืฉืชืืฉ ืืฉืืืืช ืืืชืืืืืช:
$AppLog | Get-Member -MemberType Method
ื ื ืื ืฉืืื ืื ืืงื ืขื ืืื ืฉืืืช Clear() ืื ืืฉ ืืืืืืช ืืืฉื:
$AppLog.Clear()
ื-cmdlet New-Object ืืฉืืฉ ืื ืืขืืืื ืขื ืจืืืื COM. ืืฉ ืื ืืจืื ืืื - ืืืกืคืจืืืช ืืืกืืคืงืืช ืขื ืฉืจืช ืืกืงืจืืคืืื ืฉื Windows ืืขื ืืืืฉืืื ActiveX, ืืื Internet Explorer. ืืื ืืืฆืืจ ืืืืืืงื COM, ืขืืื ืืืืืืจ ืืช ืืคืจืืืจ -ComObject ืขื ื-ProgId ืืชืืื ืืชื ืฉื ืืืืืงื ืืจืฆืืื:
New-Object -ComObject WScript.Shell
New-Object -ComObject WScript.Network
New-Object -ComObject Scripting.Dictionary
New-Object -ComObject Scripting.FileSystemObject
ืืื ืืืฆืืจ ืืืืืืงืืื ืืฉืื ืขื ืืื ื ืฉืจืืจืืชื, ืืฉืืืืฉ ื-New-Object ื ืจืื ืืจืืื ืืืกืืจืื ืืื; ื-cmdlet ืืื ืืฉืืฉ ืืขืืืื ืขื ืจืืืื ืชืืื ื ืืืฆืื ืืื ื-PowerShell. ืืืืืจืื ืขืชืืืืื ื ืืฉื ืื ืืืืื ืืืชืจ ืคืืจืื. ืื ืืกืฃ ืืืืืืืงืื .NET ื-COM, ื ืืงืืจ ืื ืืืืืืงืื CIM (WMI) ื-ADSI.
ืงืจืืื ืืฉืืืืช ืกืืืืืช
ืืืง ืืฉืืขืืจื .NET Core ืืื ื ื ืืชื ืื ืืืืคืข, ืืืื System.Environment ื-System.Math. ืื
[System.Environment] | Get-Member
ืืื ืืืฆืื ืจืง ืืืจืื ืกืืืืื, ืืชืงืฉืจ ื-Get-Member ืขื ืืคืจืืืจ -Static (ืฉืื ืื ืืกืื ืืืืืืืงื):
[System.Environment] | Get-Member -Static
ืืื ืืืฉืช ืืืืคืืื ืื ืืืฉืืืืช ืกืืืืืช, ืืฉืชืืฉ ืืฉื ื ื ืงืืืชืืื ืขืืงืืื ืืืงืื ื ืงืืื ืืืจื ืืืืื ืืืืืืื:
[System.Environment]::OSVersion
ืื
$test=[System.Math]::Sqrt(25)
$test
$test.GetType()
ืืงืื PSCustomObject
ืืื ืกืืื ืื ืชืื ืื ืืจืืื ืืืืื ืื ื- PowerShell, ืจืืื ืืืืืืจ ืืช PSCustomObject, ืืืืืขื ืืืืกืื ืืืืืืงืืื ืืขืื ืืื ื ืฉืจืืจืืชื. ืืฆืืจืช ืืืืืืงื ืืื ืืืืฆืขืืช ื-cmdlet New-Object ื ืืฉืืช ืืืจื ืงืืืกืืช, ืื ืืกืืจืืืช ืืืืืฉื ืช:
$object = New-Object โTypeName PSCustomObject -Property @{Name = 'Ivan Danko';
City = 'Moscow';
Country = 'Russia'}
ืืืื ื ืกืชืื ืขื ืืื ื ืืืืืืืงื:
$object | Get-Member
ืืื ื-PowerShell 3.0, ืชืืืืจ ื ืืกืฃ ืืืื:
$object = [PSCustomObject]@{Name = 'Ivan Danko';
City = 'Moscow';
Country = 'Russia'
}
ืืชื ืืืื ืืืฉืช ืื ืชืื ืื ืืืืช ืืืืจืืื ืืืงืืืืืช:
$object.Name
$object.'Name'
$value = 'Name'
$object.$value
ืื ื ืืืืื ืืืืจืช hashable ืงืืื ืืืืืืืงื:
$hash = @{'Name'='Ivan Danko'; 'City'='Moscow'; 'Country'='Russia'}
$hash.GetType()
$object = [pscustomobject]$hash
$object.GetType()
ืืื ืืืกืจืื ืืช ืฉื ืืคืฆืื ืืกืื ืื ืืื ืฉืกืืจ ืืืืคืืื ืื ืฉืืื ืืืื ืืืฉืชื ืืช. ืืื ืืืืื ืข ืืื, ืขืืื ืืืฉืชืืฉ ืืชืืื ื [ordered]:
$object = [PSCustomObject][ordered]@{Name = 'Ivan Danko';
City = 'Moscow';
Country = 'Russia'
}
ืืฉื ื ืืคืฉืจืืืืช ื ืืกืคืืช ืืืฆืืจืช ืืืืืืงื: ืืืขืื ืืกืชืืื ื ืขื ืืฉืืืืฉ ื-cmdlet
$object | Add-Member โMemberType NoteProperty โName Age โValue 33
$object | Get-Member
ื-cmdlet Add-Member ืืืคืฉืจ ืื ืืืืกืืฃ ืื ืจืง ืืืคืืื ืื, ืืื ืื ืฉืืืืช ื-$object ืฉื ืืฆืจ ืืขืืจ ืขื ืืื ืฉืืืืฉ ืืืื ื "-MemberType ScriptMethod":
$ScriptBlock = {
# ะบะพะด
}
$object | Add-Member -Name "MyMethod" -MemberType ScriptMethod -Value $ScriptBlock
$object | Get-Member
ืฉืืื ืื ืฉืืฉืชืืฉื ื ืืืฉืชื ื $ScriptBlock ืืกืื ScriptBlock ืืื ืืืืกื ืืช ืืงืื ืขืืืจ ืืฉืืื ืืืืฉื.
ืืื ืืืกืืจ ืืืคืืื ืื, ืืฉืชืืฉ ืืฉืืื ืืืชืืืื:
$object.psobject.properties.remove('Name')
ืืฆืืจืช ืฉืืขืืจืื ืืฉืื
PowerShell 5.0 ืืฆืื ืืช ืืืืืืช ืืืืืืจ
class MyClass
{
# ัะตะปะพ ะบะปะฐััะฐ
}
ืืื ืกืื .NET Core ืืืืชื, ืขื ืืืฃ ืฉืืชืืจ ืืช ืืืืคืืื ืื, ืืฉืืืืช ืืืืื ืืื ืืืจืื ืฉืื. ืืืื ื ืกืชืื ืขื ืืืืื ืืืืืจืช ืืืืืงื ืืคืฉืืื ืืืืชืจ:
class MyClass
{
[string]$Name
[string]$City
[string]$Country
}
ืืื ืืืฆืืจ ืืืืืืงื (ืืืคืข ืืืืงื), ืืฉืชืืฉ ื-cmdlet
$object = New-Object -TypeName MyClass
ืื
$object = [MyClass]::new()
ืืืื ื ื ืชื ืืช ืืื ื ืืืืืืืงื:
$object | Get-Member
ืื ืชืฉืื ืืืื scope: ืืชื ืื ืืืื ืืืชืืืืก ืืฉื ืืืคืืก ืืืืจืืืช ืื ืืืฉืชืืฉ ืืกืื ืืืืืื ืืืืฅ ืืกืงืจืืคื ืื ืืืืืื ืฉืื ืืืืืจืช ืืืืืงื. ืืืงืจื ืื, ืคืื ืงืฆืืืช ืืืืืืช ืืืืืืจ ืืืคืขื ืืืืงื (ืืืืืืงืืื) ืฉืืืื ื ืืืฉืื ืืืืฅ ืืืืืื ืื ืืกืงืจืืคื.
ืืืืจ ืืฆืืจืช ืืืืืืืงื, ืืื ืืช ืืืืคืืื ืื ืฉืื:
$object.Name = 'Ivan Danko'
$object.City = 'Moscow'
$object.Country = 'Russia'
$object
ืฉืืื ืื ืฉืชืืืืจ ืืืืืงื ืืฆืืื ืื ืจืง ืืช ืกืืื ืืืืคืืื ืื, ืืื ืื ืืช ืขืจืื ืืจืืจืช ืืืืื ืฉืืื:
class Example
{
[string]$Name = 'John Doe'
}
ืืชืืืืจ ืฉื ืฉืืืช ืืืืงื ืืืื ืืชืืืืจ ืฉื ืคืื ืงืฆืื, ืื ืืื ืฉืืืืฉ ืืืืืช ืืคืื ืงืฆืื. ืืื ืืคืื ืงืฆืื, ืคืจืืืจืื ืืืขืืจืื ืืฉืืืืช ืืืืืช ืืฆืืจื:
class MyClass
{
[string]$Name
[string]$City
[string]$Country
#ะพะฟะธัะฐะฝะธะต ะผะตัะพะดะฐ
Smile([bool]$param1)
{
If($param1) {
Write-Host ':)'
}
}
}
ืขืืฉืื ื ืฆืื ืืืืชื ืฉืื ื ืืืื ืืืืื:
$object = [MyClass]::new()
$object.Smile($true)
ื ืืชื ืืืขืืืก ืขื ืฉืืืืช; ืื ืืกืฃ, ืืืืชื ืืฉ
class MyClass2 : MyClass
{
#ัะตะปะพ ะฝะพะฒะพะณะพ ะบะปะฐััะฐ, ะฑะฐะทะพะฒัะผ ะดะปั ะบะพัะพัะพะณะพ ัะฒะปัะตััั MyClass
}
[MyClass2]::new().Smile($true)
ืืชืืืืจ ืฉืื ื ืฉื ืขืืืื ืขื ืืืืืืงืืื ื- PowerShell ืืื ื ืืืฆื ืืืขื. ืืคืจืกืืืื ืืืืื ื ื ืกื ืืืขืืืง ืืืืืืืืช ืืขืฉืืืช: ืืืืืจ ืืืืืฉื ืืกืืจื ืืืงืืฉ ืื ืืฉืืื ืฉื ืฉืืืื PowerShell ืขื ืจืืืื ืชืืื ื ืฉื ืฆื ืฉืืืฉื. ื ืืชื ืืืฆืื ืืืงืื ืงืืืืื ืืงืืฉืืจืื ืืืื.
ืืงืืจ: www.habr.com