参数为的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"
-或-