我已经在test.ps1中编写了以下函数,我想在运行该脚本以启动/停止/ ..时进行选择:
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}
如何使用开关选择开始或停止?
答案 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)]
这只是使用参数可以执行的众多示例之一。