Powershell函数使用参数抛出null异常

时间:2014-01-10 21:56:11

标签: powershell

这个脚本抛出了一个空例外,我不确定为什么会这样......

Function StopServices{    
    Param
    (
        $ServiceName,     
        $Remoteserver
    )
    write-host($Remoteserver)
    write-host($ServiceName)
    [System.ServiceProcess.ServiceController]$service = Get-Service -Name $ServiceName -ComputerName $Remoteserver
}

写主机写入变量。 Get-Service -ComputerName方法抛出此异常:

powershell cannot validate argument on parameter 'computername' the argument is null or empty

我想知道他们在说什么,两个都不是空的......

StopServices("DUMMY","VALUES")

这些都不是空的。为什么会抛出这个例外?

3 个答案:

答案 0 :(得分:3)

您正在错误地调用该函数。你应该这样称呼它:

StopServices "DUMMY" "VALUES"

或者,如果你想更清楚:

StopServices -ServiceName DUMMY -Remoteserver VALUES

您将参数传递给函数的方式,PowerShell将(“DUMMY”,“VALUES”)解释为一个数组,该数组将被分配给$ ServiceName,而$ Remoteserver为null。

答案 1 :(得分:3)

与大多数语言不同,PowerShell 使用括号来调用函数。

这意味着三件事:

  1. ("DUMMY","VALUES")实际上被解释为数组。换句话说,您只提供StopServices 一个参数而不是它需要的两个参数。

  2. 此阵列已分配给$ServiceName

  3. 由于缺少参数,$Remoteserver被指定为null。


  4. 要解决此问题,您需要像这样调用StopServices

    PS > StopServices DUMMY VALUES
    

答案 2 :(得分:3)

实际上,$ RemoteServer null。

StopServices("Dummy", "Values")没有做你认为它正在做的事情 - PowerShell不像其他编程语言那样接受函数的参数。 PowerShell正在解释您用作表达式的语法,以创建一个包含两个值的数组(“DUMMY”和“VALUES”),并将该数组存储在$ ServiceName中,将$ RemoteServer保留为$ null。

以下示例之一将为您提供您所追求的行为:

StopServices "Dummy" "Values"

-OR -

StopServices -ServiceName "Dummy" -RemoteServer "Values"