Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.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
Function 将cmdlet作为参数传递_Function_Powershell_Parameters_Cmdlets - Fatal编程技术网

Function 将cmdlet作为参数传递

Function 将cmdlet作为参数传递,function,powershell,parameters,cmdlets,Function,Powershell,Parameters,Cmdlets,我需要在powershell脚本中重新启动服务。问题是这个服务有点问题,经常需要关闭几次才能进入“停止”状态。因此,我似乎无法使用Restart-Servicecmdlet,而是需要重试Stop-Servicecmdlet几次。这同样适用于启动服务 因此,我认为这是一个编写函数的好地方,该函数将执行一个操作(启动或停止)并重试几次,直到它工作为止。问题是我不确定如何将操作作为参数传入。我可以让动作成为一个字符串,然后说,如果动作==“start”do starcAction,但这不会很干净。是否

我需要在powershell脚本中重新启动服务。问题是这个服务有点问题,经常需要关闭几次才能进入“停止”状态。因此,我似乎无法使用
Restart-Service
cmdlet,而是需要重试
Stop-Service
cmdlet几次。这同样适用于启动服务


因此,我认为这是一个编写函数的好地方,该函数将执行一个操作(启动或停止)并重试几次,直到它工作为止。问题是我不确定如何将操作作为参数传入。我可以让动作成为一个
字符串
,然后说
,如果动作==“start”do starcAction
,但这不会很干净。是否有任何方法可以将类似
Stop Service
的cmdlet作为参数传入?

对于您描述的场景,您通常会执行以下操作:

$maxTries=5
开关($args(0)){
“开始”{
启动服务“MySvc”
}
“停下来”{
$i=0
做{
停止服务“MySvc”
$i++
}直到((获取服务'MySvc')。状态-eq'Stopped'-或$i-ge$maxTries)
if((获取服务'MySvc')。状态-ne'Stopped'){
写入错误“无法停止服务”
出口1
}
}
违约{
写入错误“未知操作:$\ux”
出口1
}
}
如果确实希望避免字符串参数,可以使用如下参数集:

[CmdletBinding(DefaultParameterSetName='none')]
Param(
[参数(必需=$true,参数setName='start')]
[Switch][bool]$Start=$false,
[参数(必需=$true,参数setName='stop')]
[开关][bool]$Stop=$false
)
$maxTries=5
开关($PSCmdlet.ParameterSetName){
“开始”{
启动服务“MySvc”
}
“停下来”{
$i=0
做{
停止服务“MySvc”
$i++
}直到((获取服务'MySvc')。状态-eq'Stopped'-或$i-ge$maxTries)
if((获取服务'MySvc')。状态-ne'Stopped'){
写入错误“无法停止服务”
出口1
}
}
“没有”{
写入错误“用法:$($MyInvocation.MyCommand.Name){-Start |-Stop}”
出口1
}
}

对于您描述的场景,您通常会执行以下操作:

$maxTries=5
开关($args(0)){
“开始”{
启动服务“MySvc”
}
“停下来”{
$i=0
做{
停止服务“MySvc”
$i++
}直到((获取服务'MySvc')。状态-eq'Stopped'-或$i-ge$maxTries)
if((获取服务'MySvc')。状态-ne'Stopped'){
写入错误“无法停止服务”
出口1
}
}
违约{
写入错误“未知操作:$\ux”
出口1
}
}
如果确实希望避免字符串参数,可以使用如下参数集:

[CmdletBinding(DefaultParameterSetName='none')]
Param(
[参数(必需=$true,参数setName='start')]
[Switch][bool]$Start=$false,
[参数(必需=$true,参数setName='stop')]
[开关][bool]$Stop=$false
)
$maxTries=5
开关($PSCmdlet.ParameterSetName){
“开始”{
启动服务“MySvc”
}
“停下来”{
$i=0
做{
停止服务“MySvc”
$i++
}直到((获取服务'MySvc')。状态-eq'Stopped'-或$i-ge$maxTries)
if((获取服务'MySvc')。状态-ne'Stopped'){
写入错误“无法停止服务”
出口1
}
}
“没有”{
写入错误“用法:$($MyInvocation.MyCommand.Name){-Start |-Stop}”
出口1
}
}

对于您描述的场景,您通常会执行以下操作:

$maxTries=5
开关($args(0)){
“开始”{
启动服务“MySvc”
}
“停下来”{
$i=0
做{
停止服务“MySvc”
$i++
}直到((获取服务'MySvc')。状态-eq'Stopped'-或$i-ge$maxTries)
if((获取服务'MySvc')。状态-ne'Stopped'){
写入错误“无法停止服务”
出口1
}
}
违约{
写入错误“未知操作:$\ux”
出口1
}
}
如果确实希望避免字符串参数,可以使用如下参数集:

[CmdletBinding(DefaultParameterSetName='none')]
Param(
[参数(必需=$true,参数setName='start')]
[Switch][bool]$Start=$false,
[参数(必需=$true,参数setName='stop')]
[开关][bool]$Stop=$false
)
$maxTries=5
开关($PSCmdlet.ParameterSetName){
“开始”{
启动服务“MySvc”
}
“停下来”{
$i=0
做{
停止服务“MySvc”
$i++
}直到((获取服务'MySvc')。状态-eq'Stopped'-或$i-ge$maxTries)
if((获取服务'MySvc')。状态-ne'Stopped'){
写入错误“无法停止服务”
出口1
}
}
“没有”{
写入错误“用法:$($MyInvocation.MyCommand.Name){-Start |-Stop}”
出口1
}
}

对于您描述的场景,您通常会执行以下操作:

$maxTries=5
开关($args(0)){
“开始”{
启动服务“MySvc”
}
“停下来”{
$i=0
做{
停止服务“MySvc”
$i++
}直到((获取服务'MySvc')。状态-eq'Stopped'-或$i-ge$maxTries)
if((获取服务'MySvc')。状态-ne'Stopped'){
写入错误“无法停止服务”
出口1
}
}
违约{
写入错误“未知操作:$\ux”
出口1
}
}
如果确实希望避免字符串参数,可以使用如下参数集:

[CmdletBinding(DefaultParameterSetName='none')]
Param(
[参数(必需=$true,参数setName='start')]
[Switch][bool]$Start=$false,
[参数(必需=$true,参数setName='stop')]
[开关][bool]$Stop=$false
)
$maxTries=5
开关($PSCmdlet.ParameterSetName){
“开始”{
启动服务“MySvc”
}
“停下来”{
$i=0
做{
停止服务“MySvc”
$i++
}直到((获取服务'MySvc')。状态-eq'Stopped'-或$i-ge$maxTries)
if((获取服务'MySvc')。状态-ne'Stopped'){
写入错误“无法停止服务”
出口1
}
}
“没有”{
写入错误“用法:$($MyInvocation.MyCom
Param([Parameter(Mandatory)] [ValidateSet('Start','Stop')] [string] $Action)