Hey Habr! เบเปเบฒโเบเบฐโเปเบเบปเปเบฒโเบเปเบฒโเบชเบฐโเปเบซเบเบตโเปเบซเปโเบเปเบฒเบโเบชเบปเบโเปเบโเบเบฒเบโเปเบโเบเบฒโเบชเบฒโเบเบญเบโเบเบปเบโเบเบงเบฒเบกโเปเบเปโ
เบเปเบญเบเบชเบฑเบเบเบฒเบงเปเบฒเบกเบฑเบเบเปเปเปเบกเปเบ oxymoron"
เปเบเบเบงเบฒเบเบเบฒเบเบเบฝเบเปเบเบฅเปเบเบฅเบกเปเบเบเบฎเบฑเบเบเบธเบก เปเบฅเบฐ เบกเบตเบเบฐเปเบซเบเบเบญเบฒเบเปเบเบดเปเบเบเบทเบงเปเบฒเบเปเปเบเบปเบเบเบฑเบเบเบฑเบเบเบฑเบ, เปเบเปเบเบฑเบเบชเบญเบเปเบกเปเบเปเบเปเบฎเบฑเบเบเบฒเบเบชเบฐเปเบฑเบเบชเบฐเปเบนเบเปเบเบปเปเบฒเบเบฝเบกเบเบฑเบเปเบ Powershell. เปเบเบทเบญเบเบเบธเบเบเบฒเบชเบฒเบเบฒเบเบเบฝเบเปเบเบฅเปเบเบฅเบก, เบกเบตเบเบฐเปเบซเบเบเบซเบผเบทเบเปเป, เบกเบตเบชเบดเปเบเบญเปเบฒเบเบงเบเบเบงเบฒเบกเบชเบฐเบเบงเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบฐเบซเบเบฒเบเบเบฒเบเบเบนเบเบกเบฑเบเบเบทเป-เบกเบนเบเบเปเบฒ; เบซเปเบญเบเบฎเบฝเบ, เปเบเบฑเปเบเปเบเบเบชเปเบฒเบเปเบฅเบฐเบเบฑเบเบเบถเบ, เปเบกเปเบเบเบฝเบเปเบเปเบงเบดเบเบตเบเบฒเบเบซเบเบถเปเบ. เบเปเบฒเบเบงเบเปเบฎเบปเบฒเบเปเบฒเบเบฑเบเบเบฒเบเปเบเป Classes เบเบญเบเบเบงเบเปเบฎเบปเบฒเบเบฑเบเบเบฒเบเบเบนเบเบกเบฑเบเบเบญเบเบเบทเปเปเบฅเบฐเบเบธเบเบเปเบฒ, เปเบฅเบฐเบซเบผเบตเบเปเบงเบฑเปเบเปเบเบงเบเบงเบฒเบกเบเบดเบเบเบฒเบเบเบฝเบเปเบเบฅเปเบเบฅเบกเบเบตเปเปเบเบฑเปเบเปเบชเปเบงเบฑเบเบเบธเบซเบเบฑเบเปเบเบฑเปเบ: เบเบฒเบเบชเบทเบเบเบญเบ, polymorphism, เบซเบผเบท mutability, เบเบงเบเปเบฎเบปเบฒเบชเบฒเบกเบฒเบเปเบเปเบเบฐเปเบซเบเบเบเบฒเบเบเบปเบเบเบฐเปเบซเบเบเบเบญเบเบเบงเบเปเบเบปเบฒเปเบเบเบเปเปเบกเบตเบเบฒเบเบชเบฑเบเบชเบปเบเบเบฑเบเบฅเบฐเบซเบฑเบเบเบญเบเบเบงเบเปเบฎเบปเบฒ. เบเบญเบเบเบฒเบเบเบฑเปเบ, เปเบเบเบเบฒเบเปเบเบตเปเบกเบงเบดเบเบตเบเบฒเบเบเปเบฝเบเบเบฐเปเบเบเบเบตเปเบเปเปเบเปเบฝเบเปเบเบเปเบเป, เบเบงเบเปเบฎเบปเบฒเบชเบฒเบกเบฒเบเปเบเบตเปเบกเบฅเบฐเบซเบฑเบเบเบตเปเปเบเบฑเบเบเบฐเปเบซเบเบเบเบญเบเบเบงเบเปเบฎเบปเบฒเบเปเบงเบ Classes.
magic เบเบญเบเบเบฑเปเบเบงเบฑเบเบเบฐ
Castes เปเบกเปเบเปเบถเปเบเปเบเบฅเบฑเบเบชเบฐเบเบฐเบเบตเปเบกเบตเบเบฐเบชเบดเบเบเบดเบเบฒเบเบเบตเปเบชเบธเบเปเบ Powershell. เปเบกเบทเปเบญเบเปเบฒเบเบงเบฒเบเบกเบนเบเบเปเบฒ, เบเปเบฒเบเบเปเบฒเบฅเบฑเบเบญเบตเบเปเบชเปเบเบงเบฒเบกเบชเบฒเบกเบฒเบเปเบเบทเปเบญเบเบเบปเปเบเปเบฅเบฐเบเบฒเบเบเบงเบเบชเบญเบ implicit เบเบตเปเบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบกเปเบเบตเปเบกเปเบชเปเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเบเบญเบเบเปเบฒเบ. เบเบปเบงเบขเปเบฒเบ, เบเบฝเบเปเบเปเบเบฒเบเปเบเบเบชเบฐเบเบฃเบดเบเปเบ [xml] เบเบฐเปเบฅเปเบเบกเบฑเบเบเปเบฒเบเบฅเบฐเบซเบฑเบ parser เปเบฅเบฐเบชเปเบฒเบเบเบปเปเบเปเบกเป xml เบเบตเปเบชเบปเบกเบเบนเบ. เบเบงเบเปเบฎเบปเบฒเบชเบฒเบกเบฒเบเปเบเป Classes เปเบเบฅเบฐเบซเบฑเบเบเบญเบเบเบงเบเปเบฎเบปเบฒเปเบเบทเปเบญเบเบธเบเบเบฐเบชเบปเบเบเบฝเบงเบเบฑเบ.
เบเบฒเบชเบ hashtables
เบเปเบฒเบเปเบฒเบเบเปเปเบกเบตเบเบปเบงเบชเปเบฒเบ, เบเปเบฒเบเบชเบฒเบกเบฒเบเบชเบทเบเบเปเปเปเบเบเบเปเปเบกเบตเบเบปเบงเบชเปเบฒเบเปเบเบเบเบฒเบเบชเบปเปเบ hashtable เปเบเบซเบฒเบเบฐเปเบเบเบซเปเบญเบเบฎเบฝเบเบเบญเบเบเปเบฒเบ. เบขเปเบฒเบฅเบทเบกเปเบเปเบเบธเบเบชเบปเบกเบเบฑเบเบเบฒเบเบเบงเบเบชเบญเบเปเบเบทเปเบญเปเบเปเบเบฐเปเบซเบเบเบขเปเบฒเบเปเบเบฑเบกเบเบตเปเบเบฒเบเบฎเบนเบเปเบเบเบเบตเป. เปเบเปเบงเบฅเบฒเบเบฝเบงเบเบฑเบ, เบเบงเบเปเบฎเบปเบฒเบชเบฒเบกเบฒเบเปเบเปเบเบธเบเบชเบปเบกเบเบฑเบเบเบตเปเบเบดเบกเบเบญเบเบซเปเบญเบเบฎเบฝเบเปเบเบทเปเบญเบเปเบฒเปเบเบตเบเบเบฒเบเปเบเบดเบเปเบซเบเบเบปเบเปเบเบทเปเบญเบเบเบปเปเบเปเบฅเบฐเบเบงเบฒเบกเบเบทเบเบเปเบญเบเบเบตเปเปเบฅเบดเบเปเบเบดเปเบเบเบงเปเบฒ.
class Cluster {
[ValidatePattern("^[A-z]+$")]
[string] $Service
[ValidateSet("TEST", "STAGE", "CANARY", "PROD")]
[string] $FlightingRing
[ValidateSet("EastUS", "WestUS", "NorthEurope")]
[string] $Region
[ValidateRange(0, 255)]
[int] $Index
}
[Cluster]@{
Service = "MyService"
FlightingRing = "PROD"
Region = "EastUS"
Index = 2
}
เบเบญเบเบเบฒเบเบเบฑเปเบ, เบเบฒเบเบซเบฅเปเปเบเปเบงเบเปเบซเปเปเบเปเบฎเบฑเบเบเบปเบเบเบฐเบฅเบดเบเบเบตเปเบชเบฐเบญเบฒเบ. เบเบฝเบเบเบฝเบเบเบปเบเบเบฐเบฅเบดเบเบเบญเบ Cluster hashtable array เบเบตเปเบชเบปเปเบเปเบเบซเบฒ Format-Table เบเบฑเบเบชเบดเปเบเบเบตเปเบเปเบฒเบเปเบเปเบฎเบฑเบ เบเปเบฒเปเบเบปเปเบฒเปเบเบ hashtables เปเบซเบผเบปเปเบฒเบเบตเปเปเบเบปเปเบฒเปเบเปเบเบเบฑเปเบเบฎเบฝเบ. เบเบธเบเบชเบปเบกเบเบฑเบเบเบญเบเบซเปเบญเบเบฎเบฝเบเบเบทเบเบฅเบฐเบเบธเปเบงเปเบชเบฐเปเปเบตเปเบเบฅเบณเบเบฑเบเบเบตเปเบเบงเบเบกเบฑเบเบเบทเบเบเบณเบเบปเบเบขเบนเปเบเบตเปเบเบฑเปเบ. เบขเปเบฒเบฅเบทเบกเปเบเบตเปเบกเบเปเบฒเบเบตเปเปเบเบทเปเบญเบเปเบงเปเบเปเบญเบเบเบตเปเบเบฐเบกเบตเบเบธเบเบชเบปเบกเบเบฑเบเบเบฑเบเบซเบกเบปเบเบเบตเปเบเปเบฒเบเบเปเปเบเปเบญเบเบเบฒเบเบเบตเปเบเบฐเปเบซเบฑเบเปเบเปเปเบเบเบปเบเปเบเปเบฎเบฑเบ.
เบเบงเบฒเบกเบซเบกเบฒเบ
เบเปเบฒเบเปเบฒเบเบกเบต constructor เบเบตเปเบกเบตเบซเบเบถเปเบ argument, เบเบฒเบเบชเบปเปเบเบเปเบฒเปเบเบซเบฒเบเบฐเปเบเบ class เบเบญเบเบเปเบฒเบเบเบฐเบชเบปเปเบเบเปเบฒเปเบซเปเบเบฑเบ constructor เบเบญเบเบเปเบฒเบ, เบเปเบญเบเบเบตเปเบเปเบฒเบเบชเบฒเบกเบฒเบเปเบฅเบตเปเบกเบเบปเปเบ instance เบเบญเบ class เบเบญเบเบเปเบฒเบ.
class Cluster {
[ValidatePattern("^[A-z]+$")]
[string] $Service
[ValidateSet("TEST", "STAGE", "CANARY", "PROD")]
[string] $FlightingRing
[ValidateSet("EastUS", "WestUS", "NorthEurope")]
[string] $Region
[ValidateRange(0, 255)]
[int] $Index
Cluster([string] $id) {
$this.Service, $this.FlightingRing, $this.Region, $this.Index = $id -split "-"
}
}
[Cluster]"MyService-PROD-EastUS-2"
เบชเบปเปเบเบชเบฑเบเบเบฒเบเปเบเปเบเบง
เบเบญเบเบเบฑเปเบเบเปเบฒเบเบเบฑเบเบชเบฒเบกเบฒเบ override เบงเบดเบเบตเบเบฒเบเบเบฑเปเบเบฎเบฝเบ [string] ToString() เปเบเบทเปเบญเบเปเบฒเบเบปเบเปเบซเบเบเบปเบเบเบตเปเบขเบนเปเปเบเบทเปเบญเบเบซเบผเบฑเบเบเบฒเบเปเบเบฑเบเบเบปเบงเปเบเบเบเบญเบ string เบเบญเบเบงเบฑเบเบเบธ, เปเบเบฑเปเบ: เบเบฒเบเปเบเป string interpolation.
class Cluster {
[ValidatePattern("^[A-z]+$")]
[string] $Service
[ValidateSet("TEST", "STAGE", "CANARY", "PROD")]
[string] $FlightingRing
[ValidateSet("EastUS", "WestUS", "NorthEurope")]
[string] $Region
[ValidateRange(0, 255)]
[int] $Index
[string] ToString() {
return $this.Service, $this.FlightingRing, $this.Region, $this.Index -join "-"
}
}
$cluster = [Cluster]@{
Service = "MyService"
FlightingRing = "PROD"
Region = "EastUS"
Index = 2
}
Write-Host "We just created a model for '$cluster'"
Cast serialized instances
Cast เบญเบฐเบเบธเบเบฒเบเปเบซเป deserialization เบเบญเบเปเบ. เบเบปเบงเบขเปเบฒเบเบเปเบฒเบเบฅเบธเปเบกเบเบตเปเบเบฐเบฅเบปเปเบกเปเบซเบฅเบงเบเปเบฒเบเปเปเบกเบนเบเบเปเปเบเบปเบเบเบฑเบเบเปเปเบเปเบฒเบเบปเบเบเบญเบเบเบงเบเปเบฎเบปเบฒเปเบ Cluster
# ะะฐะปะธะดะฐัะธั ัะตัะธะฐะปะธะทะพะฒะฐะฝะฝัั
ะดะฐะฝะฝัั
[Cluster]$cluster = Get-Content "./my-cluster.json" | ConvertFrom-Json
[Cluster[]]$clusters = Import-Csv "./my-clusters.csv"
Castes เปเบเบฅเบฐเบซเบฑเบเบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบญเบเบเปเบฒเบ
เปเบเบฅเปเบเบฅเบกเบเบตเปเปเบฎเบฑเบเบงเบฝเบเบเปเบฒเบญเบดเบเบเปเบฒเบเบปเบเปเบเบเบชเปเบฒเบเบเปเปเบกเบนเบ, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบเบฐเบเบดเบเบฑเบเปเบเบเบเบฒเบเปเบเบฑเบเบฅเปเบฒเบเบฑเบเบเบญเบเบเบฒเบเบซเบฑเบเบเปเบฝเบเบซเบผเบฒเบเบเบงเปเบฒเปเบเบเบชเปเบฒเบเบเปเปเบกเบนเบเบเบตเปเบเปเปเบเปเบฝเบเปเบเบเปเบเป. เปเบเบดเบเบงเปเบฒเบเบฐเบกเบตเบเบงเบฒเบกเบเบฐเบเบฑเบเปเบเบเบตเปเบเบปเบเบเบฑเบเบเปเบฒเบก, เบซเปเบญเบเบฎเบฝเบเบเปเปเบเปเบงเบเปเบซเปเบเปเบฒเบเบเบฝเบเบฅเบฐเบซเบฑเบเบเบตเปเปเบเบฑเบเบเบฐเปเบซเบเบเบเปเบญเบเบเบฒเบเบเบดเบกเบงเบดเบเบตเบเบฒเบเปเบเบ.
Powershell เบเบตเปเบเปเบญเบเบเปเบฒเบฅเบฑเบเบเบฝเบเบกเบตเบเบฐเปเบซเบเบเบเป?
เบซเบผเบฒเบเบเบปเบเบเบตเปเบกเบฒเบเบฒเบ C# เบซเบผเบทเบเบทเปเบเบเบฒเบเบเบตเปเบเปเบฒเบเบเบทเบเบฑเบเปเบกเปเบเบเบฝเบ Powershell, เปเบเบดเปเบเบเปเบฒเบเบเบทเบเบฑเบ C#. เปเบเบเบเบฒเบเปเบฎเบฑเบเบชเบดเปเบเบเบตเป, เบเปเบฒเบเบเปเบฒเบฅเบฑเบเบเปเบฒเบเบญเบญเบเปเบเบเบฒเบเบเบฒเบเบเปเบฒเปเบเปเปเบเบงเบเบงเบฒเบกเบเบดเบเบเบฒเบเบเบฝเบเปเบเบฅเปเบเบฅเบกเบเบตเปเปเบเบฑเบเบเบฐเปเบซเบเบเปเบฅเบฐเบญเบฒเบเบเบฐเปเบเปเบฎเบฑเบเบเบปเบเบเบฐเปเบซเบเบเบเบฒเบเบเบฒเบเบฅเบปเบเปเบฅเบดเบเปเบเบปเปเบฒเปเบเปเบเบเบฒเบเบเบฝเบเปเบเบฅเปเบเบฅเบกเปเบเบเบงเบฑเบเบเบธเปเบ Powershell เบซเบผเบทเบฎเบฝเบเบฎเบนเปเปเบเบตเปเบกเปเบเบตเบกเบเปเบฝเบงเบเบฑเบเบเบฒเบเบเบฝเบเปเบเบผเปเบเบผเบกเบเบตเปเปเบเบฑเบเบเบฐเปเบซเบเบ.
เบเปเบฒเบเปเบฒเบเบญเบตเบเปเบชเปเบเบฒเบเบซเบฑเบเบเปเบฝเบเบเปเปเบกเบนเบเบเบตเปเบเปเปเบเปเบฝเบเปเบเบเบซเบผเบฒเบเปเบเบเปเบเปเบเปเป (|), Where-Object, ForEach-Object, Select-Object, Group-Object, Sort-Object, เปเบฅเบฐเบญเบทเปเบเป. เบซเปเบญเบเบฎเบฝเบเปเบเบฎเบนเบเปเบเบเบเบตเปเปเบเบฑเบเบเบฐเปเบซเบเบ.
เบเบฒเบเบเปเบฒเปเบเปเบซเบเปเบฒเบเบตเปเบเบญเบเบซเปเบญเบเบฎเบฝเบ
Castes, เปเบเบดเบเปเบกเปเบเบงเปเบฒเบเบงเบเปเบเบปเบฒเปเบเป syntax เบเบฒเบเปเบฅเบทเบญเบ, เปเบกเปเบเบเบฝเบเปเบเปเบเบฒเบเบชเปเบฒเบเปเบเบเบเบตเปเบฅเบฐเบซเบงเปเบฒเบเบชเบญเบเปเบเปเบกเบ. เปเบเบเปเป, เบเปเบฒเบเบชเบฒเบกเบฒเบเบชเปเบฒเบเปเบเบเบเบตเป array เบเบญเบเบเปเบฒเปเบเบเปเบเป ForEach-Object.
เปเบเบเบปเบงเบขเปเบฒเบเบเปเบฒเบเบฅเบธเปเบกเบเบตเป, Node constructor เบเบทเบเบเบฐเบเบดเบเบฑเบเบเบธเบเบเบฑเปเบเบเบตเป Datum เบเบทเบเปเบเบ, เปเบฅเบฐเบเบตเปเปเบฎเบฑเบเปเบซเปเบเบงเบเปเบฎเบปเบฒเบกเบตเปเบญเบเบฒเบเบเบตเปเบเบฐเบเปเปเบเบฝเบเบฅเบฐเบซเบฑเบเบเบตเปเปเบซเบกเบฒเบฐเบชเบปเบก. เบเบฑเปเบเบเบฑเปเบ, เบเปเปเบเบญเบเบเบงเบเปเบฎเบปเบฒเบชเบธเบกเปเบชเปเบเบฒเบเบชเบญเบเบเบฒเบกเบเปเปเบกเบนเบเปเบฅเบฐเบเบฒเบเบฅเบงเบเบฅเบงเบกเบเปเปเบกเบนเบเบเบฐเบเบฒเบ, เปเบเบเบฐเบเบฐเบเบตเปเบซเปเบญเบเบฎเบฝเบเบเบญเบเบเบงเบเปเบฎเบปเบฒเปเบเบดเปเบเปเบเบเบเบฒเบเปเบเบเบเปเปเบกเบนเบเปเบฅเบฐเบเบฒเบเบเบงเบเบชเบญเบเบเบงเบฒเบกเบเบทเบเบเปเบญเบ.
# ะัะธะผะตั ะบะพะผะฑะธะฝะธัะพะฒะฐะฝะธั ะบะปะฐััะพะฒ ั ะบะพะฝะฒะตะนะตัะฐะผะธ ะดะปั separation of concerns ะฒ ะบะพะฝะฒะตะนะตัะฐั
class Node {
[ValidateLength(3, 7)]
[string] $Name
[ValidateSet("INT", "PPE", "PROD")]
[string] $FlightingRing
[ValidateSet("EastUS", "WestUS", "NorthEurope", "WestEurope")]
[string] $Region
Node([string] $Name) {
$Name -match "([a-z]+)(INT|PPE|PROD)([a-z]+)"
$_, $this.Service, $this.FlightingRing, $this.Region = $Matches
$this.Name = $Name
}
}
class Datum {
[string] $Name
[int] $Value
[Node] $Computer
[int] Severity() {
$this.Name -match "[0-9]+$"
return $Matches[0]
}
}
Write-Host "Urgent Security Audit Issues:"
Import-Csv "./audit-results.csv" `
| ForEach-Object {[Datum]$_} `
| Where-Object Value -gt 0 `
| Group-Object {$_.Severity()} `
| Where-Object Name -lt 2 `
| ForEach-Object Group `
| ForEach-Object Computer `
| Where-Object FlightingRing -eq "PROD" `
| Sort-Object Name, Region -Unique
เบซเปเบญเบเบฎเบฝเบเบเบฑเบเบเบธเบเบฑเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเปเบฒเปเบเปเบเบทเบ
เบเปเปเบกเบตเบซเบเบฑเบเบเบตเปเบเบปเปเบฒเบเบตเปเบกเบฑเบเปเบเบดเปเบเบเบทเบงเปเบฒ
เปเบเปเบซเบเปเบฒเปเบชเบเบเบฒเบ, เบซเปเบญเบเบฎเบฝเบเบเปเปเบชเบฒเบกเบฒเบเบเบทเบเบชเบปเปเบเบญเบญเบเปเบเบเปเบกเบเบนเบเปเบเบฅเบฑเบเบชเบฐเบเบฐเบเบฝเบงเบเบฑเบเบเบฑเบเบซเบเปเบฒเบเบตเปเบซเบผเบทเบเบปเบงเปเบ; เปเบเปเบกเบตเบเบฒเบ tricks. เปเบซเปเปเบงเบปเปเบฒเบงเปเบฒเบซเปเบญเบเบฎเบฝเบเบเบญเบเบเปเบฒเบเบเบทเบเบเปเบฒเบเบปเบเปเบงเปเปเบเปเบเบฅเป ./my-classes.ps1
-
เบเปเบฒเบเบชเบฒเบกเบฒเบ dotsource เปเบเบฅเปเบเบตเปเบกเบตเบซเปเบญเบเบฎเบฝเบ:. ./my-classes.ps1. เบเบตเปเบเบฐเบเปเบฒเปเบเบตเบเบเบฒเบ my-classes.ps1 เปเบเบเบญเบเปเบเบเบเบฐเบเบธเบเบฑเบเบเบญเบเบเปเบฒเบเปเบฅเบฐเบเปเบฒเบเบปเบเบเบฑเปเบเบฎเบฝเบเบเบฑเบเบซเบกเบปเบเบเบฒเบเปเบเบฅเปเบขเบนเปเบเบตเปเบเบฑเปเบ.
-
เบเปเบฒเบเบชเบฒเบกเบฒเบเบชเปเบฒเบเปเบกเบเบนเบ Powershell เบเบตเปเบชเบปเปเบเบญเบญเบ APIs เบเบญเบเบเปเบฒเบเปเบญเบเบเบฑเบเบซเบกเบปเบ (cmdlets) เปเบฅเบฐเบเปเบฒเบเบปเบเบเบปเบงเปเบ ScriptsToProcess = "./my-classes.ps1" เปเบ manifest เปเบกเบเบนเบเบเบญเบเบเปเบฒเบ, เบเปเบงเบเบเบปเบเปเบเปเบฎเบฑเบเบเบฝเบงเบเบฑเบ: ./my-classes.ps1 เบเบฐเบเปเบฒเปเบเบตเบเบเบฒเบเปเบ เบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบกเบเบญเบเปเบเบปเปเบฒ.
เบเบปเบงเปเบฅเบทเบญเบเปเบเบเปเปเบเบฒเบกเบเบตเปเบเปเบฒเบเปเบฅเบทเบญเบ, เบเบปเปเบเบเบทเปเปเบงเปเบงเปเบฒเบฅเบฐเบเบปเบเบเบฐเปเบเบเบเบญเบ Powershell เบเปเปเบชเบฒเบกเบฒเบเปเบเปเปเบเบเบฐเปเบเบเบเบญเบเบเบทเปเบเบฝเบงเบเบฑเบเบเบตเปเปเบซเบฅเบเบกเบฒเบเบฒเบเบเปเบญเบเบเปเบฒเบเป.
เปเบเบดเบเปเบกเปเบเบงเปเบฒเบเปเบฒเบเบเบฐเปเบซเบฅเบเบชเบญเบเบเบฑเปเบเบฎเบฝเบเบเบฝเบงเบเบฑเบเบเบตเปเบกเบตเบเบธเบเบชเบปเบกเบเบฑเบเบเบฝเบงเบเบฑเบเบเบฒเบเบเปเบญเบเบเบตเปเปเบเบเบเปเบฒเบเบเบฑเบ, เบเปเบฒเบเบกเบตเบเบงเบฒเบกเบชเปเบฝเบเบเบตเปเบเบฐเบกเบตเบเบฑเบเบซเบฒ.
เบงเบดเบเบตเบเบฒเบเบเปเป
เบงเบดเบเบตเบเบตเปเบเบตเบเบตเปเบชเบธเบเปเบเบเบฒเบเบซเบผเบตเบเบฅเปเบฝเบเบเบฑเบเบซเบฒเบเบฒเบเปเบเปเปเบเบเบฐเปเบเบเปเบกเปเบ เบขเปเบฒเปเบเบตเบเปเบเบตเบเบเบฑเปเบเบฎเบฝเบเบเบญเบเปเบเบปเปเบฒเปเบซเปเบเบฑเบเบเบนเปเปเบเป. เปเบเบเบเบตเปเบเบฐเบเบฒเบเบซเบงเบฑเบเปเบซเปเบเบนเปเปเบเปเบเปเบฒเปเบเบปเปเบฒเบเบฐเปเบเบเบเบตเปเบเปเบฒเบเบปเบเปเบเบเบฑเปเบเบฎเบฝเบ, เบชเบปเปเบเบญเบญเบเบเบฑเบเบเบฑเบเบเบฒเบเปเบกเบเบนเบเบเบญเบเปเบเบปเปเบฒเบเบตเปเบเปเบฒเบเบฑเบเบเบงเบฒเบกเบเปเบญเบเบเบฒเบเปเบเบเบฒเบเปเบเบปเปเบฒเปเบเบดเบเบเบฑเปเบเบฎเบฝเบเปเบเบเบเบปเบ. เบชเปเบฒเบฅเบฑเบ Cluster, เบเบงเบเปเบฎเบปเบฒเบชเบฒเบกเบฒเบเบชเบปเปเบเบญเบญเบเบเบฑเบเบเบฑเบ New-Cluster เบเบตเปเบเบฐเบชเบฐเบซเบเบฑเบเบชเบฐเบซเบเบนเบเบเบธเบเบเบฒเบฅเบฒเบกเบดเปเบเบตเบเบตเปเปเบเบฑเบเบกเบดเบเบเบฑเบเบเบนเปเปเบเปเปเบฅเบฐเบชเบปเปเบเบเบทเบ Cluster.
class Cluster {
[ValidatePattern("^[A-z]+$")]
[string] $Service
[ValidateSet("TEST", "STAGE", "CANARY", "PROD")]
[string] $FlightingRing
[ValidateSet("EastUS", "WestUS", "NorthEurope")]
[string] $Region
[ValidateRange(0, 255)]
[int] $Index
}
function New-Cluster {
[OutputType([Cluster])]
Param(
[Parameter(Mandatory, ParameterSetName = "Id", Position = 0)]
[ValidateNotNullOrEmpty()]
[string] $Id,
[Parameter(Mandatory, ParameterSetName = "Components")]
[string] $Service,
[Parameter(Mandatory, ParameterSetName = "Components")]
[string] $FlightingRing,
[Parameter(Mandatory, ParameterSetName = "Components")]
[string] $Region,
[Parameter(Mandatory, ParameterSetName = "Components")]
[int] $Index
)
if ($Id) {
$Service, $FlightingRing, $Region, $Index = $Id -split "-"
}
[Cluster]@{
Service = $Service
FlightingRing = $FlightingRing
Region = $Region
Index = $Index
}
}
Export-ModuleMember New-Cluster
เบกเบตเบซเบเบฑเบเบญเบตเบเปเบเปเบเบตเปเบเบฐเบญเปเบฒเบ
เปเบซเบผเปเบเบเปเปเบกเบนเบ: www.habr.com