【问题标题】:Passing string $variable to invoke-command scriptblock parameter -name [duplicate]将字符串 $variable 传递给调用命令脚本块参数 -name [重复]
【发布时间】:2016-10-26 11:49:10
【问题描述】:

我目前正在编写一个相对简单的 PowerShell 脚本来重新启动/停止/启动远程机器上的服务。在我决定将$Service 变量传递给Invoke-Command 脚本块中的-Name 参数之前,一切都运行良好。我知道我做错了什么或忘记了什么,但您的帮助将不胜感激。这是突出显示给我问题的部分的代码

[CmdletBinding()] Param([Parameter(Mandatory=$True,Position=1)]
  [string]$Server,
  [Parameter(Mandatory=$True)]
  [string]$Service) 
get-service -ComputerName $Server -Name "$Service"

Write-Host("------------------------------------------------")
Write-Host("Execute action on selected service: ")
Write-Host("1. Restart service ")
Write-Host("2. Stop service ")
Write-Host("3. Start service")
$choice = Read-Host -Prompt "Your choice"

switch ($choice)
{
    1 {Invoke-command -Computername $Server {Restart-Service -Name "$Service" } }
    2 {Invoke-command -ComputerName $Server {Stop-Service  -Name "$Service" } }
    3 {Invoke-command -ComputerName $Server {Start-Service -Name "$Service" } }
}

我试过了:

  • $Service 周围的单引号
  • $Service 周围的双引号
  • 在脚本块中使用 param([String]$Service)

我不断收到同样的错误:

Cannot bind argument to parameter 'Name' because it is an empty string.
    + CategoryInfo          : InvalidData: (:) [Stop-Service], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorEmptyStringNotAllowed,Microsoft.PowerShell.Commands.StopServiceCommand

我知道这与我试图在远程机器上运行局部变量的事实有关。但是有人能指出我正确的方向吗,我希望脚本简单地使用强制参数

使用这里提到的方法How to pass local variable to Invoke-Command's 我修改了这样的代码:

1 {Invoke-command -Computername $Server {param ([string] $srv = $Service) Restart-Service -Name "$srv" } }

不幸的是,错误仍然存​​在

【问题讨论】:

标签: windows powershell


【解决方案1】:

将参数传递到脚本块的语法应该如下:

(更正为@pk198105 建议)

Invoke-command -Computername $Server  {
param($service)
Restart-Service -Name "$Service" 
} -ArgumentList $service

argumentlist 和 param 都是必需的

【讨论】:

  • 不行不行。对不起
【解决方案2】:

好的,部分感谢 Abhijith pk

正确的实现方式如下:

Invoke-command -Computername $Server  {param ($Service) Restart-Service -Name "$service" } -ArgumentList $service

谢谢

【讨论】:

  • 这看起来与您的其他答案相同,但参数移动了
  • 是的 Abhijith 回答的论点位置错误
猜你喜欢
  • 2018-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-16
  • 1970-01-01
  • 2017-02-07
  • 2016-09-15
  • 2014-03-08
相关资源
最近更新 更多