src/Public/New-ProcessRule.ps1

Function New-ProcessRule {
    param(
        [Parameter(Mandatory=$false)] [String] $Selector        = ".*",
        [Parameter(Mandatory=$false)] [CpuPriority] $Priority   = [CpuPriority]::Normal,
        [Parameter(Mandatory=$false)] [CpuAffinity] $Affinity   = [CpuAffinity]::All,
        [Parameter(Mandatory=$false)] [String] $Config          = (Get-ProcessConfigFile -Global:$Global),
        [Parameter(Mandatory=$false)] [Switch] $Global      
    )

    if($Config -notlike "*.y*ml" )
        {  $Config = "${Config}.yml" } 

    if(!(Test-Path $Config)) 
        { New-Item -Force $Config | Out-Null}

    $Rules = Get-Content $Config | ConvertFrom-Yaml -ErrorAction Ignore -Ordered
    
    if(!$Rules) { $Rules = @{  } }

    $Rules.rules = @($Rules.rules | Where-Object selector -notlike $Selector )
   
    $Rules.rules += @([PSCustomObject] [Ordered] @{ 
        selector=$Selector
        priority=[int]$Priority
        affinity=[int]$Affinity
    })

    $Rules.rules = $Rules.rules | Sort-Object selector

    $Rules | ConvertTo-Yaml |  Set-Content $Config

    $Rules.rules | Format-Table

    return  @([PSCustomObject] [Ordered] @{ 
        selector=$Selector
        priority=$Priority
        affinity=$Affinity
    })
}