powershell - Powershell 使用 arg 启动/停止
问题描述
我在 test.ps1 中编写了以下函数,我想在运行 thsi 脚本以启动/停止/.. 时做出选择:
function getState($SeviceName) {
$server = @('host_1', 'host_2')
# get status
$server | % {Write-Host "verify: $_"; Get-Service -ComputerName $_ -Name SeviceName
}
- 我想提供
$ServiceName
作为参数(使用标准输入)我该怎么做?=> 类似选择 1 开始 2 停止... 在 Powershell 中使用 switch/case
$doAction = {"Stop-Service", "Start-service"} $server | % {Write-Host "verify: $_"; Get-Service -ComputerName $_ -Name SeviceName | $doAction}
如何使用开关选择启动或停止?
解决方案
这是一个可以满足您要求的功能:
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
用您的话来说)。我建议阅读此文档。
推荐阅读
- database - 在文件分配系统中的某个文件中间删除和插入内容如何工作?
- google-apps-script - 当列中没有值时解决循环中的错误
- swiftui - 如何从嵌套的 ForEach 循环中获取连续的索引号?
- encryption - 为什么使用 AES_128_CBC_HMAC_SHA_256 加密 JWT 也会更改其“alg”标头参数?
- python - Python JupyterNotebook:清除变量?
- algorithm - 按重叠日期范围分组的算法
- pine-script - series 和 float 的添加总是在 pine 脚本中返回 n/a
- javascript - 如何为 kaboom.js 网站制作背景
- laravel - 仅当最后一个相关元素超过 30 天时才返回元素?
- android - 我想创建一个函数调用,但没有创建函数