我目前正在编写一个相对简单的 PowerShell 脚本来重新启动/停止/启动远程计算机上的服务。一切都运行良好,直到我决定将$Service变量传递给脚本块-Name中的参数Invoke-Command。我知道我做错了什么或忘记了什么,但我将非常感谢您的帮助。这是代码,突出显示了给我带来问题的部分
[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" } }
}
我努力了:
我不断地遇到同样的错误:
Cannot bind argument to parameter 'Name' because it is an empty string.
    + CategoryInfo          : InvalidData: (:) [Stop-Service], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorEmptyStringNotAllowed,Microsoft.PowerShell.Commands.StopServiceCommand
我知道这与我尝试在远程计算机上运行本地变量有关。但有人能指出我正确的方向吗?我希望脚本只使用强制参数
使用此处提到的方法如何将局部变量传递给 Invoke-Command's我修改了代码,如下所示:
1 {Invoke-command -Computername $Server {param ([string] $srv = $Service) Restart-Service -Name "$srv" } }
不幸的是错误仍然存在
将参数传递到脚本块的语法应如下所示:
(按照@pk198105建议更正)
Invoke-command -Computername $Server  {
param($service)
Restart-Service -Name "$Service" 
} -ArgumentList $service
argumentlist 和 param 都是必需的
| 归档时间: | 
 | 
| 查看次数: | 29361 次 | 
| 最近记录: |