Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
要使用arg启动/停止的Powershell_Powershell - Fatal编程技术网

要使用arg启动/停止的Powershell

要使用arg启动/停止的Powershell,powershell,Powershell,我在test.ps1中编写了以下函数,我想在运行thsi脚本启动/停止/时做出选择: function getState($SeviceName) { $server = @('host_1', 'host_2') # get status $server | % {Write-Host "verify: $_"; Get-Service -ComputerName $_ -Name SeviceName } 我想提供$ServiceName作为参数(使用stdi

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

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

    # get status 
    $server | % {Write-Host "verify: $_"; Get-Service -ComputerName $_ -Name SeviceName
}
  • 我想提供
    $ServiceName
    作为参数(使用stdin)我怎么做?=>例如选择1开始2停止
  • 在Powershell中使用开关/机箱的步骤

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

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

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

    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。否则它将仍然是假的

    唐·琼斯写了一封信,我建议你退房

    请注意,您可以在参数中定义大量内容。比如,如果你想确保它总是充满你可以设置

     [parameter(Mandatory=$true)]
    

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

    这里有一个函数可以满足您的要求:

    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
    )。我建议

    -Name SeviceName
    -Name$SeviceName@Lika我忘了在我的示例中添加
    进程{}
    。现在应该可以正常工作了。@Theincorrigible:对不起,我不熟悉powershell在其他语言中的用法,我们称之为带或不带arg的脚本,在这里,如果我尝试调用test.ps,它不会返回任何内容,而我希望被要求提供arg@Lika我现在在
    $ServiceName
    中添加了一个
    强制属性
    ,因此如果您在没有参数的情况下执行它,您应该会得到提示。要运行,我只需调用。\test.ps1其中包含此函数吗?因为正如我所说,它不会回来anything@Lika不,您需要在定义函数后调用它。
    }Get State
    。如果您想这样调用它,请将内容保存到一个文件中,而不使用
    函数。。。{
    和结尾
    }
    。我再次更新了它,因此它将提示您输入服务名称和要执行的操作。该操作可以通过制表符完成。您可能需要重写演示函数
    getState
    ,因为其中有很多语法错误/打字错误。。