Скрипт Powershell для проверки типа запуска сервиса - PullRequest
0 голосов
/ 04 мая 2020

Мне было интересно, как лучше использовать оператор if / else для проверки типа запуска службы в Windows 10? Например, если у службы есть тип запуска вручную в разделе «Службы», я хотел бы подтвердить, что он имеет тип запуска вручную без необходимости проверять его вручную в разделе «Службы».

Это то, что я пробовал:

функция validate-services {

$servicelist =

@{

"Example Name of Service" = "Manual"
"Example Name of Service #2" = "Automatic"
}
foreach ($service in $servicelist.Keys)
{ 
            if(Get-Service -name [$service] -ErrorAction SilentlyContinue){

                write-host $service "is correct"

            }
            else
            {
                write-host $service "is not correct"                  
            }
} 

}

Ответы [ 2 ]

0 голосов
/ 04 мая 2020
# Function that display if a given service
# is correct based in hash values
function validate-services {

    # Hash keys and values
    $servicelist =    
    @{    
        "RasMan"   = "Manual";
        "wmiApSrv" = "Automatic";
        "SamSs"    = "Automatic"    
    }

    # Iterates over keys
    foreach ($service in $servicelist.Keys){ 

        # Get the current StartType from current service
        $startType = (Get-Service -Name $service).StartType

        # Compares current starType 
        # with the value of the key
        # and shows result
        if ( $startType -eq $servicelist[$service] ){

            write-host $service "is correct"

        } else {

            write-host $service "is not correct"                  

        }
    } 
}
0 голосов
/ 04 мая 2020

это дает вам [bool] результат, основанный на комбинации Name & StartType.

функция делает оба параметра обязательными, присваивает каждому номер позиции, устанавливает для каждого типа значение [string] и - для StartType - определяет действительный набор вариантов.

при запуске он получает служебную информацию, сравнивает фактический тип запуска с требуемым типом и, наконец, отправляет $False/$True в зависимости от ситуации.

function Validate-ServiceStartType
    {
    <#
    Comment Based Help goes here
    #>
    Param (
        [Parameter (
            Mandatory,
            Position = 0
            )]
            [string]
            $Name,

        [Parameter (
            Mandatory,
            Position = 1
            )]
            [ValidateSet (
                'Boot',
                'System',
                'Automatic',
                'Manual',
                'Disabled'
                )]
            [string]
            $StartType
        )

    begin {}

    process
        {
        (Get-Service -Name $Name).StartType -eq $StartType
        }

    end {}

    } # end >>> function Validate-ServiceStartType

примеры с выводом ...

Validate-ServiceStartType -Name spool* -StartType Boot
# False
Validate-ServiceStartType -Name spool* -StartType Automatic
# True

Validate-ServiceStartType -Name ZigZagPapers -StartType Manual
# False
# lots of red error text

если вы хотите подавить текст ошибки, измените следующую строку кода на следующую после нее ...

(Get-Service -Name $Name).StartType -eq $StartType
(Get-Service -Name $Name -ErrorAction 'SilentlyContinue').StartType -eq $StartType

Я предпочитаю получить ошибку и разобраться с ней [возможно, с -ErrorAction SilentlyContinue], но вы можете предпочесть иное. [ ухмылка ]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...