svc.ps1

. $psscriptroot\types.ps1

function svc_regfind (
    [string] $name
) {
    # match by service name, not by displayname. return found reg props
    $key = "HKLM:\SYSTEM\CurrentControlSet\Services"
    return (get-childitem $key | where-object {$_.PSChildName -match $name})
}

function svc_startup (
    [Parameter(Mandatory = $true)][ValidateNotNullOrEmpty()][string] $name,
    [Parameter(Mandatory = $true)][ValidateNotNullOrEmpty()][Start] $startup
) {
    # set startup mode
    # usage: {svc_startup "csc" "disabled"} or {svc_startup "csc" 4} or {svc_startup "csc" ([Start]::disabled)}
    $key = "HKLM:\SYSTEM\CurrentControlSet\Services\$name"
    SetProp $key 'Start' 'DWORD' $([int]$startup)
}

function svcs_startup (
    [Parameter(Mandatory = $true)][string[]] $names,
    [Parameter(Mandatory = $true)][Start] $startup
) {
    foreach ($name in $names) {
        svc_startup "$name" ($startup)
    }
}

function svc_disable (
    [Parameter(Mandatory = $true)][ValidateNotNullOrEmpty()][string] $name
) {
    stop-service -force -ea 0 "$name"
    svc_startup "$name" ([Start]::disabled)
}

function svcs_disable (
    [Parameter(Mandatory = $true)][string[]] $names
) {
    svcs_stop $names
    svcs_startup $names ([Start]::disabled)
}

function svc_rm (
    [Parameter(Mandatory = $true)][ValidateNotNullOrEmpty()][string] $name
) {
    stop-service "$name" -force -ea 0
    svc_disable "$name"
    remove-service -ea 0 "$name"
}

function svcs_rm (
    [Parameter(Mandatory = $true)][string[]] $names
) {
    foreach ($name in $names) {
        svc_rm "$name"
    }
}

function svcs_start (
    [Parameter(Mandatory = $true)][string[]] $names
) {
    $names | ForEach-Object {Start-Service $_ -ea 0}
}

function svcs_stop (
    [Parameter(Mandatory = $true)][string[]] $names
) {
    $names | ForEach-Object {Stop-Service $_ -force -ea 0}
}

function svcs_stems (
    [Parameter(Mandatory = $true)][string[]] $stems
) {
    # pass array of strings, where service name starts with stem and ends in random string of chars
    # passed array is modified in-place with full service names
    for ($i = 0; $i -lt $stems.count; $i++) {
        $stem = $stems[$i]
        $svc_obj = get-service -Name "$stem*"
        $stems[$i] = $svc_obj.Name
    }
}