【问题标题】:Powershell - Cannot bind argument to parameter 'Name' because it is nullPowershell - 无法将参数绑定到参数“名称”,因为它为空
【发布时间】:2017-03-09 10:45:20
【问题描述】:

我正在尝试使用此 Powershell 脚本停止远程服务:

$hostname1 = "myhost"
$serviceName = "myservice"
Write-Host "Hostname: $hostname1"
Write-Host "Service name: $serviceName"
Invoke-Command -ComputerName $hostname1 -ScriptBlock {
  Stop-Service -Name $serviceName -Force
}

但收到此错误消息:

Cannot bind argument to parameter 'Name' because it is null.
    + CategoryInfo          : InvalidData: (:) [Stop-Service], ParameterBindin
   gValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,M icrosoft.PowerShell.Commands.StopServiceCommand

如果我从脚本中删除Invoke-Command,我可以看到变量已正确初始化:

$hostname1 = "myhost"
$serviceName = "myservice"
Write-Host "Hostname: $hostname1"
Write-Host "Service name: $serviceName"

返回:

Hostname: myhost
Service name: myservice

这可能是什么原因?

谢谢, 罗马

【问题讨论】:

标签: powershell


【解决方案1】:

进一步挖掘,我自己找到了答案 - 需要使用-argumentlist

$hostname1 = "myhost"
$serviceName = "myservice"
Write-Host "Hostname: $hostname1"
Write-Host "Service name: $serviceName"
Invoke-Command -ComputerName $hostname1 -ScriptBlock {
  Stop-Service -Name $args[0] -Force
} -argumentlist $serviceName

【讨论】:

    【解决方案2】:

    另一种解决方案
    请使用自动变量“$using”。

    $hostname1 = "myhost"
    $serviceName = "myservice"
    Write-Host "Hostname: $hostname1"
    Write-Host "Service name: $serviceName"
    Invoke-Command -ComputerName $hostname1 -ScriptBlock {
      Stop-Service -Name $Using:ServiceName -Force
    } 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-18
      • 1970-01-01
      • 2021-03-14
      • 1970-01-01
      • 2021-02-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多