要使用arg启动/停止的Powershell
我在test.ps1中编写了以下函数,我想在运行thsi脚本启动/停止/时做出选择:要使用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
function getState($SeviceName) {
$server = @('host_1', 'host_2')
# get status
$server | % {Write-Host "verify: $_"; Get-Service -ComputerName $_ -Name SeviceName
}
$ServiceName
作为参数(使用stdin)我怎么做?=>例如选择1开始2停止$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
,因为其中有很多语法错误/打字错误。。