Powershell以arg

时间:2018-07-24 14:09:15

标签: powershell

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

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

    # get status 
    $server | % {Write-Host "verify: $_"; Get-Service -ComputerName $_ -Name SeviceName
}
  1. 我想提供$ServiceName作为参数(与stdin一起使用),我该怎么做? =>诸如此类的选择1开始2停止...
  2. 要在Powershell中使用开关/盒

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

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

2 个答案:

答案 0 :(得分:2)

以下功能可以满足您的要求:

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)。我建议reading this documentation.

答案 1 :(得分:1)

您可以通过向脚本添加参数来向脚本添加参数。 在脚本文件的顶部:

Param
(
    [parameter()]
    [String[]]$YourArgumentVariable

    [parameter()]
    [switch] $MySwitch
)

对于一个函数,它在函数定义之后。因此,在您的情况下:

function getState($SeviceName) { 
    Param
    (
        [parameter()]
        [String[]]$server

        [parameter()]
        [switch] $MySwitch
    )
    # get status 
    $server | % {Write-Host "verify: $_"; Get-Service -ComputerName $_ -Name SeviceName
}

开关基本上将布尔值设置为true或false。 因此,如果您使用-MySwitch调用脚本,它将把变量$ MySwitch设置为true。否则它将保持为假。

唐·琼斯(Don Jones)写了good getting started article on paramters,我建议您退房。

请注意,您可以在参数中定义很多内容。就像如果您要确保始终填充它一样,可以设置

 [parameter(Mandatory=$true)]

这只是使用参数可以执行的众多示例之一。