首页 > 解决方案 > Powershell 使用 arg 启动/停止

问题描述

我在 test.ps1 中编写了以下函数,我想在运行 thsi 脚本以启动/停止/.. 时做出选择:

function getState($SeviceName) { 
    $server = @('host_1', 'host_2')

    # get status 
    $server | % {Write-Host "verify: $_"; Get-Service -ComputerName $_ -Name SeviceName
}
  1. 我想提供$ServiceName作为参数(使用标准输入)我该怎么做?=> 类似选择 1 开始 2 停止...
  2. 在 Powershell 中使用 switch/case

    $doAction = {"Stop-Service", "Start-service"}
    $server | % {Write-Host "verify: $_"; Get-Service -ComputerName $_ -Name SeviceName | $doAction}
    

如何使用开关选择启动或停止?

标签: powershell

解决方案


这是一个可以满足您要求的功能:

function Get-State {
    [CmdletBinding()]
    [OutputType('System.ServiceProcess.ServiceController')]
    param(
        [Parameter(Position = 0, Mandatory)]
        [ValidateSet('Start', 'Stop', 'Get')]
        [string] $Action,

        [Parameter(Position = 1, ValueFromPipeline, Mandatory)]
        [ValidateNotNullOrEmpty()]
        [string] $ServiceName
    )

    begin {
        $serverList = @('host_1', 'host_2')
    }

    process {
        foreach ($server in $serverList) {
            try {
                $svc = Get-Service -ComputerName $server -Name $ServiceName -ErrorAction Stop
            } catch {
                throw "Failed to find service $ServiceName on $server! $PSItem"
            }

            switch ($Action) {
                'Start' { $svc | Start-Service -PassThru }
                'Stop'  { $svc | Stop-Service -Force -PassThru }
                default { $svc }
            }
        }
    }
}

它利用高级功能特性和属性来获取管道输入(stdin用您的话来说)。我建议阅读此文档。


推荐阅读