参数为的Powershell函数引发null异常

参数为的Powershell函数引发null异常,powershell,Powershell,这个脚本抛出了一个空异常,我不确定为什么会这样 Function StopServices{ Param ( $ServiceName, $Remoteserver ) write-host($Remoteserver) write-host($ServiceName) [System.ServiceProcess.ServiceController]$service = Get-Service -

这个脚本抛出了一个空异常,我不确定为什么会这样

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")

这两个都不是空的。为什么它会抛出该异常?

您调用函数的方式不正确。你应该这样称呼它:

StopServices "DUMMY" "VALUES"
PS > StopServices DUMMY VALUES
或者,如果您想更清楚:

StopServices -ServiceName DUMMY -Remoteserver VALUES

按照向函数传递参数的方式,PowerShell将(“伪”、“值”)解释为数组,该数组将被分配给$ServiceName,而$Remoteserver为空。

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

这意味着三件事:

  • (“虚拟”、“值”)
    实际上被解释为数组。换句话说,您只给出了
    StopServices
    一个参数,而不是它所需要的两个参数

  • 此数组正在分配给
    $ServiceName

  • 由于缺少参数,
    $Remoteserver
    被分配为null


  • 要解决此问题,您需要按如下方式调用
    StopServices

    StopServices "DUMMY" "VALUES"
    
    PS > StopServices DUMMY VALUES
    
    实际上,$RemoteServer是空的

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

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

    StopServices "Dummy" "Values"
    
    -或-