เด•เตเดฒเดพเดธเตเด•เดณเตเดณเตเดณ เดซเด‚เด—เตเดทเดฃเตฝ เดชเดตเตผเดทเต†เตฝ เด’เดฐเต เด“เด•เตเดธเดฟเดฎเต‹เดฑเต‹เตบ เด…เดฒเตเดฒ, เดžเดพเตป เด…เดคเต เด‰เดฑเดชเตเดชเตเดจเตฝเด•เตเดจเตเดจเต

เดนเต‡ เดนเดฌเตผ! เดฒเต‡เด–เดจเดคเตเดคเดฟเดจเตเดฑเต† เดตเดฟเดตเตผเดคเตเดคเดจเด‚ เดžเดพเตป เดจเดฟเด™เตเด™เดณเตเดŸเต† เดถเตเดฐเดฆเตเดงเดฏเดฟเตฝเดชเตเดชเต†เดŸเตเดคเตเดคเตเดจเตเดจเต "เด•เตเดฒเดพเดธเตเด•เดณเตเดณเตเดณ เดซเด‚เด—เตเดทเดฃเตฝ เดชเดตเตผเดทเต†เตฝ.
เด‡เดคเต เด’เดฐเต เด“เด•เตเดธเดฟเดฎเต‹เดฑเต‹เตบ เด…เดฒเตเดฒเต†เดจเตเดจเต เดžเดพเตป เดตเดพเด—เตเดฆเดพเดจเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต"
เด•เตเดฐเดฟเดธเตเดฑเตเดฑเดซเตผ เด•เตเดšเตเดšเต เดŽเดดเตเดคเดฟเดฏเดคเต.

เด’เดฌเตเดœเด•เตเดฑเตเดฑเต เด“เดฑเดฟเดฏเดจเตเดฑเดกเต, เดซเด™เตเดทเดฃเตฝ เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดฟเด‚เด—เต เดฎเดพเดคเตƒเด•เด•เตพ เดชเดฐเดธเตเดชเดฐเด‚ เดตเดฟเดฏเต‹เดœเดฟเดชเตเดชเตเดณเตเดณเดคเดพเดฏเดฟ เดคเต‹เดจเตเดจเดฟเดฏเต‡เด•เตเด•เดพเด‚, เดŽเดจเตเดจเดพเตฝ เดชเดตเตผเดทเต†เดฒเตเดฒเดฟเตฝ เด‡เดต เดฐเดฃเตเดŸเตเด‚ เด’เดฐเตเดชเต‹เดฒเต† เดชเดฟเดจเตเดคเตเดฃเดฏเตเด•เตเด•เตเดจเตเดจเต. เดชเตเดฐเดตเตผเดคเตเดคเดจเดชเดฐเดฎเต‹ เด…เดฒเตเดฒเดพเดคเตเดคเดคเต‹ เด†เดฏ เดฎเดฟเด•เตเด•เดตเดพเดฑเตเด‚ เดŽเดฒเตเดฒเดพ เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดฟเด‚เด—เต เดญเดพเดทเด•เตพเด•เตเด•เตเด‚ เดตเดฟเดชเตเดฒเต€เด•เตƒเดค เดจเต†เดฏเดฟเด‚-เดตเดพเดฒเตเดฏเต‚ เดฌเตˆเตปเดกเดฟเด‚เด—เดฟเดจเตเดณเตเดณ เดธเต—เด•เดฐเตเดฏเด™เตเด™เดณเตเดฃเตเดŸเต; เดธเตเดŸเตเดฐเด•เตโ€Œเดฑเตเดฑเตเด•เดณเตเด‚ เดฑเต†เด•เตเด•เต‹เตผเดกเตเด•เดณเตเด‚ เดชเต‹เดฒเต† เด•เตเดฒเดพเดธเตเด•เตพ เด’เดฐเต เดธเดฎเต€เดชเดจเด‚ เดฎเดพเดคเตเดฐเดฎเดพเดฃเต. เดชเต‡เดฐเตเด•เดณเตเดŸเต†เดฏเตเด‚ เดฎเต‚เดฒเตเดฏเด™เตเด™เดณเตเดŸเต†เดฏเตเด‚ เดฌเตˆเตปเดกเดฟเด‚เด—เดฟเดฒเต‡เด•เตเด•เต เด•เตเดฒเดพเดธเตเด•เดณเตเดŸเต† เด‰เดชเดฏเต‹เด—เด‚ เดชเดฐเดฟเดฎเดฟเดคเดชเตเดชเต†เดŸเตเดคเตเดคเตเด•เดฏเตเด‚ เดชเดพเดฐเดฎเตเดชเดฐเตเดฏเด‚, เดชเต‹เดณเดฟเดฎเต‹เตผเดซเดฟเดธเด‚ เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดฎเตเดฏเต‚เดŸเตเดŸเดฌเดฟเดฒเดฟเดฑเตเดฑเดฟ เดชเต‹เดฒเตเดณเตเดณ เด•เดจเดคเตเดค เด’เดฌเตเดœเด•เตเดฑเตเดฑเต-เด“เดฑเดฟเดฏเดจเตเดฑเดกเต เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดฟเด‚เด—เต เด†เดถเดฏเด™เตเด™เตพ เด’เดดเดฟเดตเดพเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดคเดพเตฝ, เดžเด™เตเด™เดณเตเดŸเต† เด•เต‹เดกเต เดธเด™เตเด•เต€เตผเดฃเตเดฃเดฎเดพเด•เตเด•เดพเดคเต† เดคเดจเตเดจเต† เด…เดตเดฏเตเดŸเต† เดจเต‡เดŸเตเดŸเด™เตเด™เตพ เดจเดฎเตเด•เตเด•เต เดชเตเดฐเดฏเต‹เดœเดจเดชเตเดชเต†เดŸเตเดคเตเดคเดพเด‚. เด•เต‚เดŸเดพเดคเต†, เดฎเดพเดฑเตเดฑเดฎเดฟเดฒเตเดฒเดพเดคเตเดค เดคเดฐเด‚ เดชเดฐเดฟเดตเตผเดคเตเดคเดจ เดฐเต€เดคเดฟเด•เตพ เดšเต‡เตผเด•เตเด•เตเดจเตเดจเดคเดฟเดฒเต‚เดŸเต†, เด•เตเดฒเดพเดธเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดžเด™เตเด™เดณเตเดŸเต† เดซเด™เตเดทเดฃเตฝ เด•เต‹เดกเต เดธเดฎเตเดชเตเดทเตเดŸเดฎเดพเด•เตเด•เดพเด‚.

เดœเดพเดคเดฟเด•เดณเตเดŸเต† เดฎเดพเดฏเดพเดœเดพเดฒเด‚

เดชเดตเตผเดทเต†เดฒเตเดฒเดฟเดฒเต† เดเดฑเตเดฑเดตเตเด‚ เดถเด•เตเดคเดฎเดพเดฏ เดธเดตเดฟเดถเต‡เดทเดคเด•เดณเดฟเตฝ เด’เดจเตเดจเดพเดฃเต เดœเดพเดคเดฟเด•เตพ. เดจเดฟเด™เตเด™เตพ เด’เดฐเต เดฎเต‚เดฒเตเดฏเด‚ เด•เดพเดธเตโ€Œเดฑเตเดฑเต เดšเต†เดฏเตเดฏเตเดฎเตเดชเต‹เตพ, เดจเดฟเด™เตเด™เดณเตเดŸเต† เด…เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเดฟเดฒเต‡เด•เตเด•เต เดชเดฐเดฟเดธเตเดฅเดฟเดคเดฟ เดšเต‡เตผเด•เตเด•เตเดจเตเดจ เดชเดฐเต‹เด•เตเดทเดฎเดพเดฏ เดธเดฎเดพเดฐเด‚เดญเดตเตเด‚ เดฎเต‚เดฒเตเดฏเดจเดฟเตผเดฃเตเดฃเดฏ เดถเต‡เดทเดฟเดฏเตเด‚ เดจเดฟเด™เตเด™เตพ เด†เดถเตเดฐเดฏเดฟเด•เตเด•เตเดจเตเดจเต. เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, [xml]-เตฝ เด’เดฐเต เดธเตเดŸเตเดฐเดฟเด‚เด—เต เด•เดพเดธเตเดฑเตเดฑเตเดšเต†เดฏเตเดฏเตเดจเตเดจเดคเต เด…เดคเต เดชเดพเตผเดธเตผ เด•เต‹เดกเดฟเดฒเต‚เดŸเต† เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเด•เดฏเตเด‚ เด’เดฐเต เดชเต‚เตผเดฃเตเดฃเดฎเดพเดฏ xml เดŸเตเดฐเต€ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเด‚. เดจเดฎเตเดฎเตเดŸเต† เด•เต‹เดกเดฟเดฒเต† เด•เตเดฒเดพเดธเตเด•เตพ เด‡เดคเต‡ เด†เดตเดถเตเดฏเดคเตเดคเดฟเดจเดพเดฏเดฟ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเด‚.

เด•เดพเดธเตเดฑเตเดฑเต เดนเดพเดทเตโ€ŒเดŸเต‡เดฌเดฟเดณเตเด•เตพ

เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด’เดฐเต เด•เตบเดธเตโ€ŒเดŸเตเดฐเด•เตโ€Œเดฑเตเดฑเตผ เด‡เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ, เดจเดฟเด™เตเด™เดณเตเดŸเต† เด•เตเดฒเดพเดธเต เดคเดฐเดคเตเดคเดฟเดฒเต‡เด•เตเด•เต เด’เดฐเต เดนเดพเดทเตโ€ŒเดŸเต‡เดฌเดฟเตพ เด•เดพเดธเตโ€Œเดฑเตเดฑเต เดšเต†เดฏเตโ€Œเดคเต เด’เดจเตเดจเตเดฎเดฟเดฒเตเดฒเดพเดคเต† เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดคเตเดŸเดฐเดพเด‚. เดˆ เดชเดพเดฑเตเดฑเต‡เตบ เดชเต‚เตผเดฃเตเดฃเดฎเดพเดฏเดฟ เดชเตเดฐเดฏเต‹เดœเดจเดชเตเดชเต†เดŸเตเดคเตเดคเตเดจเตเดจเดคเดฟเดจเต เดฎเต‚เดฒเตเดฏเดจเดฟเตผเดฃเตเดฃเดฏ เด†เดŸเตเดฐเดฟเดฌเตเดฏเต‚เดŸเตเดŸเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเตป เดฎเดฑเด•เตเด•เดฐเตเดคเต. เด…เดคเต‡ เดธเดฎเดฏเด‚, เด•เต‚เดŸเตเดคเตฝ เด†เดดเดคเตเดคเดฟเดฒเตเดณเตเดณ เด‡เดจเต€เดทเตเดฏเดฒเตˆเดธเต‡เดทเดจเตเด‚ เดฎเต‚เดฒเตเดฏเดจเดฟเตผเดฃเตเดฃเดฏ เดฒเต‹เดœเดฟเด•เตเด•เตเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดจเดฎเตเด•เตเด•เต เด•เตเดฒเดพเดธเตเดธเดฟเดจเตเดฑเต† เดŸเตˆเดชเตเดชเต เดšเต†เดฏเตเดค เดชเตเดฐเต‹เดชเตเดชเตผเดŸเตเดŸเดฟเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเด‚.

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
}

เด•เต‚เดŸเดพเดคเต†, เด•เดพเดธเตเดฑเตเดฑเดฟเด‚เด—เต เด’เดฐเต เด•เตเดฒเต€เตป เด”เดŸเตเดŸเตเดชเตเดŸเตเดŸเต เดฒเดญเดฟเด•เตเด•เดพเตป เดธเดนเดพเดฏเดฟเด•เตเด•เตเดจเตเดจเต. เดซเต‹เตผเดฎเดพเดฑเตเดฑเต-เดŸเต‡เดฌเดฟเดณเดฟเดฒเต‡เด•เตเด•เต เด•เตˆเดฎเดพเดฑเดฟเดฏ เด•เตเดฒเดธเตเดฑเตเดฑเตผ เดนเดพเดทเตโ€ŒเดŸเต‡เดฌเดฟเตพ เด…เดฑเต‡เดฏเตเดŸเต† เด”เดŸเตเดŸเตโ€ŒเดชเตเดŸเตเดŸเตเด‚ เดˆ เดนเดพเดทเตโ€ŒเดŸเต‡เดฌเดฟเดณเตเด•เตพ เด’เดฐเต เด•เตเดฒเดพเดธเดฟเดฒเต‡เด•เตเด•เต เด†เดฆเตเดฏเด‚ เด•เดพเดธเตโ€Œเดฑเตเดฑเต เดšเต†เดฏเตโ€Œเดคเดพเตฝ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดฒเดญเดฟเด•เตเด•เตเดจเตเดจเดคเตเด‚ เดคเดพเดฐเดคเดฎเตเดฏเด‚ เดšเต†เดฏเตเดฏเตเด•. เด’เดฐเต เด•เตเดฒเดพเดธเดฟเดจเตเดฑเต† เด—เตเดฃเดตเดฟเดถเต‡เดทเดคเด•เตพ เดŽเดฒเตเดฒเดพเดฏเตเดชเตเดชเต‹เดดเตเด‚ เด…เดตเดฟเดŸเต† เดจเดฟเตผเดตเดšเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เด•เตเดฐเดฎเดคเตเดคเดฟเดฒเดพเดฃเต เดชเดŸเตเดŸเดฟเด•เดชเตเดชเต†เดŸเตเดคเตเดคเดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเต. เดซเดฒเด™เตเด™เดณเดฟเตฝ เดฆเตƒเดถเตเดฏเดฎเดพเด•เดพเตป เดจเดฟเด™เตเด™เตพ เด†เด—เตเดฐเดนเดฟเด•เตเด•เดพเดคเตเดค เดŽเดฒเตเดฒเดพ เดชเตเดฐเต‹เดชเตเดชเตผเดŸเตเดŸเดฟเด•เตพเด•เตเด•เตเด‚ เดฎเตเดฎเตเดชเต เดฎเดฑเดžเตเดžเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เด•เต€เดตเต‡เดกเต เดšเต‡เตผเด•เตเด•เดพเตป เดฎเดฑเด•เตเด•เดฐเตเดคเต.

เด•เตเดฒเดพเดธเตเด•เดณเตเดณเตเดณ เดซเด‚เด—เตเดทเดฃเตฝ เดชเดตเตผเดทเต†เตฝ เด’เดฐเต เด“เด•เตเดธเดฟเดฎเต‹เดฑเต‹เตบ เด…เดฒเตเดฒ, เดžเดพเตป เด…เดคเต เด‰เดฑเดชเตเดชเตเดจเตฝเด•เตเดจเตเดจเต

เด…เตผเดคเตเดฅเด™เตเด™เดณเตเดŸเต† เดœเดพเดคเดฟ

เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด’เดฐเต เด†เตผเด—เตเดฏเตเดฎเต†เดจเตเดฑเต เด‰เดณเตเดณ เด’เดฐเต เด•เตบเดธเตโ€ŒเดŸเตเดฐเด•เตโ€ŒเดŸเตผ เด‰เดฃเตเดŸเต†เด™เตเด•เดฟเตฝ, เดจเดฟเด™เตเด™เดณเตเดŸเต† เด•เตเดฒเดพเดธเต เดคเดฐเดคเตเดคเดฟเดฒเต‡เด•เตเด•เต เด’เดฐเต เดฎเต‚เดฒเตเดฏเด‚ เด•เดพเดธเตโ€Œเดฑเตเดฑเตเดšเต†เดฏเตเดฏเตเดจเตเดจเดคเต เดฎเต‚เดฒเตเดฏเด‚ เดจเดฟเด™เตเด™เดณเตเดŸเต† เด•เตบเดธเตโ€ŒเดŸเตเดฐเด•เตโ€ŒเดŸเตผเด•เตเด•เต เด•เตˆเดฎเดพเดฑเตเด‚, เด…เดตเดฟเดŸเต† เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดจเดฟเด™เตเด™เดณเตเดŸเต† เด•เตเดฒเดพเดธเดฟเดจเตเดฑเต† เด’เดฐเต เด‰เดฆเดพเดนเดฐเดฃเด‚ เด†เดฐเด‚เดญเดฟเด•เตเด•เดพเดจเดพเด•เตเด‚.

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"

เดตเดฐเดฟเดฏเดฟเดฒเต‡เด•เตเด•เต เด•เดพเดธเตเดฑเตเดฑเต เดšเต†เดฏเตเดฏเตเด•

เดธเตเดŸเตเดฐเดฟเด‚เด—เต เด‡เดจเตเดฑเตผเดชเต‹เดณเต‡เดทเตป เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเต เดชเต‹เดฒเต†เดฏเตเดณเตเดณ เด’เดฌเตโ€Œเดœเด•เตเดฑเตเดฑเดฟเดจเตเดฑเต† เดธเตเดŸเตเดฐเดฟเด‚เด—เต เดชเตเดฐเดพเดคเดฟเดจเดฟเดงเตเดฏเดคเตเดคเดฟเดจเต เดชเดฟเดจเตเดจเดฟเดฒเต† เดฏเตเด•เตเดคเดฟ เดจเดฟเตผเดตเดšเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดจเดฟเด™เตเด™เตพเด•เตเด•เต [string] ToString() เด•เตเดฒเดพเดธเต เดฐเต€เดคเดฟ เด…เดธเดพเดงเตเดตเดพเด•เตเด•เดพเดจเตเด‚ เด•เดดเดฟเดฏเตเด‚.

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 เดธเตเดฐเด•เตเดทเดฟเดคเดฎเดพเดฏ เดกเต€เดธเดฟเดฏเดฒเตˆเดธเต‡เดทเตป เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเต. เดกเดพเดฑเตเดฑ เด•เตเดฒเดธเตเดฑเตเดฑเดฑเดฟเดฒเต† เดžเด™เตเด™เดณเตเดŸเต† เดธเตเดชเต†เดธเดฟเดซเดฟเด•เตเด•เต‡เดทเตป เดชเดพเดฒเดฟเด•เตเด•เตเดจเตเดจเดฟเดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดšเตเดตเดŸเต†เดฏเตเดณเตเดณ เด‰เดฆเดพเดนเดฐเดฃเด™เตเด™เตพ เดชเดฐเดพเดœเดฏเดชเตเดชเต†เดŸเตเด‚

# ะ’ะฐะปะธะดะฐั†ะธั ัะตั€ะธะฐะปะธะทะพะฒะฐะฝะฝั‹ั… ะดะฐะฝะฝั‹ั…

[Cluster]$cluster = Get-Content "./my-cluster.json" | ConvertFrom-Json
[Cluster[]]$clusters = Import-Csv "./my-clusters.csv"

เดจเดฟเด™เตเด™เดณเตเดŸเต† เดซเด™เตเดทเดฃเตฝ เด•เต‹เดกเดฟเดฒเต† เดœเดพเดคเดฟเด•เตพ

เดซเด™เตเดทเดฃเตฝ เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเตเด•เตพ เด†เดฆเตเดฏเด‚ เดกเดพเดฑเตเดฑ เด˜เดŸเดจเด•เดณเต† เดจเดฟเตผเดตเดšเดฟเด•เตเด•เตเดจเตเดจเต, เดคเตเดŸเตผเดจเตเดจเต เดฎเดพเดฑเตเดฑเดฎเดฟเดฒเตเดฒเดพเดคเตเดค เดกเดพเดฑเตเดฑเดพ เดธเตเดŸเตเดฐเด•เตเดšเดฑเตเด•เดณเตเดŸเต† เดชเดฐเดฟเดตเตผเดคเตเดคเดจเด™เตเด™เดณเตเดŸเต† เด’เดฐเต เดถเตเดฐเต‡เดฃเดฟเดฏเดพเดฏเดฟ เดชเตเดฐเต‹เด—เตเดฐเดพเด‚ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเดจเตเดจเต. เดชเดฐเดธเตเดชเดฐ เดตเดฟเดฐเตเดฆเตเดงเดฎเดพเดฏ เดฎเดคเดฟเดชเตเดชเต เด‰เดฃเตเดŸเดพเดฏเดฟเดฐเตเดจเตเดจเดฟเดŸเตเดŸเตเด‚, เดŸเตˆเดชเตเดชเต เดชเดฐเดฟเดตเตผเดคเตเดคเดจ เดฐเต€เดคเดฟเด•เตพเด•เตเด•เต เดจเดจเตเดฆเดฟ เดซเด‚เด—เตเดทเดฃเตฝ เด•เต‹เดกเต เดŽเดดเตเดคเดพเตป เด•เตเดฒเดพเดธเตเด•เตพ เดจเดฟเด™เตเด™เดณเต† เดธเดนเดพเดฏเดฟเด•เตเด•เตเดจเตเดจเต.

เดžเดพเตป เดŽเดดเตเดคเตเดจเตเดจ เดชเดตเตผเดทเต†เตฝ เดชเตเดฐเดตเตผเดคเตเดคเดจเด•เตเดทเดฎเดฎเดพเดฃเต‹?

C# เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดธเดฎเดพเดจเดฎเดพเดฏ เดชเดถเตเดšเดพเดคเตเดคเดฒเดคเตเดคเดฟเตฝ เดจเดฟเดจเตเดจเต เดตเดฐเตเดจเตเดจ เดงเดพเดฐเดพเดณเด‚ เด†เดณเตเด•เตพ เดชเดตเตผเดทเต†เตฝ เดŽเดดเตเดคเตเดจเตเดจเต, เด‡เดคเต C# เดจเต เดธเดฎเดพเดจเดฎเดพเดฃเต. เด‡เดคเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดฒเต‚เดŸเต†, เดจเดฟเด™เตเด™เตพ เดซเด™เตเดทเดฃเตฝ เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดฟเด‚เด—เต เด†เดถเดฏเด™เตเด™เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเดฟเตฝ เดจเดฟเดจเตเดจเต เดฎเดพเดฑเตเด•เดฏเดพเดฃเต, เด•เต‚เดŸเดพเดคเต† Powershell-เดฒเต† เด’เดฌเตเดœเด•เตเดฑเตเดฑเต-เด“เดฑเดฟเดฏเดจเตเดฑเดกเต เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดฟเด‚เด—เดฟเดฒเต‡เด•เตเด•เต เดตเตปเดคเต‹เดคเดฟเตฝ เดกเตˆเดตเดฟเด‚เด—เต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเต‹ เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดซเด‚เด—เตเดทเดฃเตฝ เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดฟเด‚เด—เดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เด•เต‚เดŸเตเดคเดฒเดฑเดฟเดฏเตเดจเตเดจเดคเดฟเดจเต‹ เดชเตเดฐเดฏเต‹เดœเดจเด‚ เดฒเดญเดฟเด•เตเด•เตเด‚.

เดชเตˆเดชเตเดชเต เดฒเตˆเดจเตเด•เตพ (|), เดŽเดตเดฟเดŸเต†-เด’เดฌเตเดœเด•เตเดฑเตเดฑเต, เดซเต‹เตผเดŽเดšเตเดšเต-เด’เดฌเตเดœเด•เตเดฑเตเดฑเต, เดธเต†เดฒเด•เตเดŸเต-เด’เดฌเตเดœเด•เตเดฑเตเดฑเต, เด—เตเดฐเต‚เดชเตเดชเต-เด’เดฌเตเดœเด•เตเดฑเตเดฑเต, เดธเต‹เตผเดŸเตเดŸเต-เด’เดฌเตเดœเด•เตเดฑเตเดฑเต เดฎเตเดคเดฒเดพเดฏเดต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดฎเดพเดฑเตเดฑเดฎเดฟเดฒเตเดฒเดพเดคเตเดค เดกเดพเดฑเตเดฑ เดฐเต‚เดชเดพเดจเตเดคเดฐเดชเตเดชเต†เดŸเตเดคเตเดคเตเดจเตเดจเดคเดฟเตฝ เดจเดฟเด™เตเด™เตพ เดตเดณเดฐเต†เดฏเดงเดฟเด•เด‚ เด†เดถเตเดฐเดฏเดฟเด•เตเด•เตเดจเตเดจเตเดตเต†เด™เตเด•เดฟเตฝ - เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด•เต‚เดŸเตเดคเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดจเด•เตเดทเดฎเดฎเดพเดฏ เดถเตˆเดฒเดฟเดฏเตเดฃเตเดŸเต, เดชเดตเตผเดทเต†เตฝ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเดฟเตฝ เดจเดฟเดจเตเดจเต เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดชเตเดฐเดฏเต‹เดœเดจเด‚ เดฒเดญเดฟเด•เตเด•เตเด‚. เดชเตเดฐเดตเตผเดคเตเดคเดจ เดถเตˆเดฒเดฟเดฏเดฟเดฒเตเดณเตเดณ เด•เตเดฒเดพเดธเตเด•เตพ.

เด•เตเดฒเดพเดธเตเด•เดณเตเดŸเต† เดชเตเดฐเดตเตผเดคเตเดคเดจเดชเดฐเดฎเดพเดฏ เด‰เดชเดฏเต‹เด—เด‚

เดœเดพเดคเดฟเด•เตพ, เด…เดตเตผ เด’เดฐเต เด‡เดคเดฐ เดตเดพเด•เตเดฏเด˜เดŸเดจ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเตเดฃเตเดŸเต†เด™เตเด•เดฟเดฒเตเด‚, เดฐเดฃเตเดŸเต เดกเตŠเดฎเต†เดฏเตโ€Œเดจเตเด•เตพเด•เตเด•เดฟเดŸเดฏเดฟเดฒเตเดณเตเดณ เด’เดฐเต เดฎเดพเดชเตเดชเดฟเด‚เด—เต เดฎเดพเดคเตเดฐเดฎเดพเดฃเต. เดชเตˆเดชเตเดชเตเดฒเตˆเดจเดฟเตฝ, ForEach-Object เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดฎเต‚เดฒเตเดฏเด™เตเด™เดณเตเดŸเต† เด’เดฐเต เดจเดฟเดฐ เดฎเดพเดชเตเดชเต เดšเต†เดฏเตเดฏเดพเตป เด•เดดเดฟเดฏเตเด‚.

เดšเตเดตเดŸเต†เดฏเตเดณเตเดณ เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเตฝ, เด’เดฐเต Datum เด•เดพเดธเตโ€Œเดฑเตเดฑเต เดšเต†เดฏเตเดฏเตเดฎเตเดชเต‹เตพ เด“เดฐเต‹ เดคเดตเดฃเดฏเตเด‚ Node เด•เตบเดธเตเดŸเตเดฐเด•เตโ€Œเดฑเตเดฑเตผ เดŽเด•เตโ€Œเดธเดฟเด•เตเดฏเต‚เดŸเตเดŸเต เดšเต†เดฏเตเดฏเดชเตเดชเต†เดŸเตเดจเตเดจเต, เด‡เดคเต เดจเตเดฏเดพเดฏเดฎเดพเดฏ เด…เดณเดตเดฟเตฝ เด•เต‹เดกเต เดŽเดดเตเดคเดพเดคเดฟเดฐเดฟเด•เตเด•เดพเดจเตเดณเตเดณ เด…เดตเดธเดฐเด‚ เดจเตฝเด•เตเดจเตเดจเต. เดคเตฝเดซเดฒเดฎเดพเดฏเดฟ, เดžเด™เตเด™เดณเตเดŸเต† เดชเตˆเดชเตเดชเตโ€Œเดฒเตˆเตป เดกเดฟเด•เตเดฒเดฑเต‡เดฑเตเดฑเต€เดตเต เดกเดพเดฑเตเดฑ เด•เตเดตเดฏเดฑเดฟเด‚เด—เดฟเดฒเตเด‚ เด…เด—เตเดฐเด—เต‡เดทเดจเดฟเดฒเตเด‚ เดถเตเดฐเดฆเตเดง เด•เต‡เดจเตเดฆเตเดฐเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจเต, เด…เดคเต‡เดธเดฎเดฏเด‚ เดžเด™เตเด™เดณเตเดŸเต† เด•เตเดฒเดพเดธเตเด•เตพ เดกเดพเดฑเตเดฑ เดชเดพเดดเตโ€Œเดธเดฟเด‚เด—เตเด‚ เดฎเต‚เดฒเตเดฏเดจเดฟเตผเดฃเตเดฃเดฏเดตเตเด‚ เดถเตเดฐเดฆเตเดงเดฟเด•เตเด•เตเดจเตเดจเต.

# ะŸั€ะธะผะตั€ ะบะพะผะฑะธะฝะธั€ะพะฒะฐะฝะธั ะบะปะฐััะพะฒ ั ะบะพะฝะฒะตะนะตั€ะฐะผะธ ะดะปั 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

เดชเตเดจเดฐเตเดชเดฏเต‹เด—เดคเตเดคเดฟเดจเตเดณเตเดณ เดชเดพเด•เตเด•เต‡เดœเดฟเด‚เด—เต เด•เตเดฒเดพเดธเต

เด’เดจเตเดจเตเด‚ เดคเต‹เดจเตเดจเตเดจเตเดจเดคเตเดฐ เดจเดฒเตเดฒเดคเดฒเตเดฒ

เดจเดฟเตผเดญเดพเด—เตเดฏเดตเดถเดพเตฝ, เดซเด‚เด—เตโ€Œเดทเดจเตเด•เตพ เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดตเต‡เดฐเดฟเดฏเดฌเดฟเดณเตเด•เตพ เดชเต‹เดฒเต† เดฎเตŠเดกเตเดฏเต‚เดณเตเด•เตพ เดตเดดเดฟ เด•เตเดฒเดพเดธเตเด•เตพ เดŽเด•เตโ€Œเดธเตโ€Œเดชเต‹เตผเดŸเตเดŸเต เดšเต†เดฏเตเดฏเดพเตป เด•เดดเดฟเดฏเดฟเดฒเตเดฒ; เดŽเดจเตเดจเดพเตฝ เดšเดฟเดฒ เดคเดจเตเดคเตเดฐเด™เตเด™เดณเตเดฃเตเดŸเต. เดจเดฟเด™เตเด™เดณเตเดŸเต† เด•เตเดฒเดพเดธเตเด•เตพ ./my-classes.ps1 เดŽเดจเตเดจ เดซเดฏเดฒเดฟเตฝ เดจเดฟเตผเดตเดšเดฟเดšเตเดšเดฟเดŸเตเดŸเตเดฃเตเดŸเต†เดจเตเดจเต เดชเดฑเดฏเดพเด‚

  • เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด•เตเดฒเดพเดธเตเด•เดณเตเดณเตเดณ เด’เดฐเต เดซเดฏเตฝ เดกเต‹เดŸเตเดŸเตโ€Œเดธเต‹เดดเตโ€Œเดธเต เดšเต†เดฏเตเดฏเดพเด‚:. ./my-classes.ps1. เด‡เดคเต เดจเดฟเด™เตเด™เดณเตเดŸเต† เดจเดฟเดฒเดตเดฟเดฒเต† เดธเตเด•เต‹เดชเตเดชเดฟเตฝ my-classes.ps1 เดŽเด•เตเดธเดฟเด•เตเดฏเต‚เดŸเตเดŸเต เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดซเดฏเดฒเดฟเตฝ เดจเดฟเดจเตเดจเต เดŽเดฒเตเดฒเดพ เด•เตเดฒเดพเดธเตเด•เดณเตเด‚ เดจเดฟเตผเดตเดšเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเด‚.

  • เดจเดฟเด™เตเด™เดณเตเดŸเต† เดŽเดฒเตเดฒเดพ เด‡เดทเตโ€ŒเดŸเดพเดจเตเดธเตƒเดค API-เด•เดณเตเด‚ (cmdlets) เดŽเด•เตโ€Œเดธเตโ€Œเดชเต‹เตผเดŸเตเดŸเตเดšเต†เดฏเตเดฏเตเดจเตเดจ เด’เดฐเต เดชเดตเตผเดทเต†เตฝ เดฎเตŠเดกเตเดฏเต‚เตพ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดธเตƒเดทเตโ€ŒเดŸเดฟเด•เตเด•เดพเดจเตเด‚ เดจเดฟเด™เตเด™เดณเตเดŸเต† เดฎเตŠเดกเตเดฏเต‚เตพ เดฎเดพเดจเดฟเดซเต†เดธเตเดฑเตเดฑเดฟเตฝ ScriptsToProcess = "./my-classes.ps1" เดตเต‡เดฐเดฟเดฏเดฌเดฟเตพ เดธเดœเตเดœเต€เด•เดฐเดฟเด•เตเด•เดพเดจเตเด‚ เด•เดดเดฟเดฏเตเด‚, เด…เดคเต‡ เดซเดฒเดคเตเดคเต‹เดŸเต†: ./my-classes.ps1 เดŽเด•เตโ€Œเดธเดฟเด•เตเดฏเต‚เดŸเตเดŸเต เดšเต†เดฏเตเดฏเตเด‚ เดจเดฟเด™เตเด™เดณเตเดŸเต† เดชเดฐเดฟเดธเตเดฅเดฟเดคเดฟ.

เดจเดฟเด™เตเด™เตพ เดคเดฟเดฐเดžเตเดžเต†เดŸเตเด•เตเด•เตเดจเตเดจ เด“เดชเตเดทเตป เดเดคเดพเดฏเดพเดฒเตเด‚, เดชเดตเตผเดทเต†เดฒเตเดฒเดฟเดจเตเดฑเต† เดคเดฐเด‚ เดธเดฟเดธเตเดฑเตเดฑเดคเตเดคเดฟเดจเต เดตเตเดฏเดคเตเดฏเดธเตเดค เดธเตเดฅเดฒเด™เตเด™เดณเดฟเตฝ เดจเดฟเดจเตเดจเต เดฒเต‹เดกเตเดšเต†เดฏเตเดค เด’เดฐเต‡ เดชเต‡เดฐเดฟเดจเตเดฑเต† เดคเดฐเด™เตเด™เตพ เดชเดฐเดฟเดนเดฐเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเดฟเดฒเตเดฒเต†เดจเตเดจเต เด“เตผเดฎเตเดฎเดฟเด•เตเด•เตเด•.
เดตเตเดฏเดคเตเดฏเดธเตโ€Œเดค เดธเตเดฅเดฒเด™เตเด™เดณเดฟเตฝ เดจเดฟเดจเตเดจเต เด’เดฐเต‡ เดชเตเดฐเต‹เดชเตเดชเตผเดŸเตเดŸเดฟเด•เตพ เด‰เดณเตเดณ เดฐเดฃเตเดŸเต เดธเดฎเดพเดจ เด•เตเดฒเดพเดธเตเด•เตพ เดจเดฟเด™เตเด™เตพ เดฒเต‹เดกเต เดšเต†เดฏเตโ€Œเดคเดพเดฒเตเด‚, เดจเดฟเด™เตเด™เตพ เดชเตเดฐเดถเตโ€Œเดจเด™เตเด™เดณเดฟเตฝ เด…เด•เดชเตเดชเต†เดŸเดพเตป เดธเดพเดงเตเดฏเดคเดฏเตเดฃเตเดŸเต.

เดฎเตเดจเตเดจเต‹เดŸเตเดŸเตเดณเตเดณ เดตเดดเดฟ

เดŸเตˆเดชเตเดชเต เดฑเต†เดธเดฒเตเดฏเต‚เดทเตป เดชเตเดฐเดถเตเดจเด™เตเด™เตพ เด’เดดเดฟเดตเดพเด•เตเด•เดพเดจเตเดณเตเดณ เดเดฑเตเดฑเดตเตเด‚ เดจเดฒเตเดฒ เดฎเดพเตผเด—เตเด—เด‚, เดจเดฟเด™เตเด™เดณเตเดŸเต† เด•เตเดฒเดพเดธเตเด•เตพ เด’เดฐเดฟเด•เตเด•เดฒเตเด‚ เด‰เดชเดฏเต‹เด•เตเดคเดพเด•เตเด•เตพเด•เตเด•เต เดตเต†เดณเดฟเดชเตเดชเต†เดŸเตเดคเตเดคเดพเดคเดฟเดฐเดฟเด•เตเด•เตเด• เดŽเดจเตเดจเดคเดพเดฃเต. เด•เตเดฒเดพเดธเต-เดจเดฟเตผเดตเดšเดฟเด•เตเด•เดชเตเดชเต†เดŸเตเดŸ เดคเดฐเด‚ เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเต เด‡เดฑเด•เตเด•เตเดฎเดคเดฟ เดšเต†เดฏเตเดฏเตเดฎเต†เดจเตเดจเต เดชเตเดฐเดคเต€เด•เตเดทเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดชเด•เดฐเด‚, เด•เตเดฒเดพเดธเต เดจเต‡เดฐเดฟเดŸเตเดŸเต เด†เด•เตโ€Œเดธเดธเต เดšเต†เดฏเตเดฏเต‡เดฃเตเดŸเดคเดฟเดจเตเดฑเต† เด†เดตเดถเตเดฏเด•เดค เด‡เดฒเตเดฒเดพเดคเดพเด•เตเด•เตเดจเตเดจ เด’เดฐเต เดซเด‚เด—เตโ€Œเดทเตป เดจเดฟเด™เตเด™เดณเตเดŸเต† เดฎเตŠเดกเตเดฏเต‚เดณเดฟเตฝ เดจเดฟเดจเตเดจเต เดŽเด•เตโ€Œเดธเตโ€Œเดชเต‹เตผเดŸเตเดŸเต เดšเต†เดฏเตเดฏเตเด•. เด•เตเดฒเดธเตเดฑเตเดฑเดฑเดฟเดจเดพเดฏเดฟ, เด‰เดชเดฏเต‹เด•เตเดคเตƒ-เดธเต—เดนเตƒเดฆ เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเตผ เดธเต†เดฑเตเดฑเตเด•เดณเต† เดชเดฟเดจเตเดคเตเดฃเดฏเตโ€Œเด•เตเด•เตเด•เดฏเตเด‚ เด’เดฐเต เด•เตเดฒเดธเตเดฑเตเดฑเตผ เดคเดฟเดฐเดฟเด•เต† เดจเตฝเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจ เด’เดฐเต เดชเตเดคเดฟเดฏ-เด•เตเดฒเดธเตเดฑเตเดฑเตผ เดซเด‚เด—เตโ€Œเดทเตป เดžเด™เตเด™เตพเด•เตเด•เต เดŽเด•เตโ€Œเดธเตโ€Œเดชเต‹เตผเดŸเตเดŸเต เดšเต†เดฏเตเดฏเดพเด‚.

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

เดตเต‡เดฑเต† เดŽเดจเตเดคเต เดตเดพเดฏเดฟเด•เตเด•เดพเตป

เด•เตเดฒเดพเดธเตเด•เดณเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต
เดชเตเดฐเดคเดฟเดฐเต‹เดง เดชเดตเตผเดทเต†เตฝ
PowerShell-เดฒเต† เดซเด™เตเดทเดฃเตฝ เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดฟเด‚เด—เต

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•