这个脚本抛出了一个空例外,我不确定为什么会这样......
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")
这些都不是空的。为什么会抛出这个例外?
答案 0 :(得分:3)
您正在错误地调用该函数。你应该这样称呼它:
StopServices "DUMMY" "VALUES"
或者,如果你想更清楚:
StopServices -ServiceName DUMMY -Remoteserver VALUES
您将参数传递给函数的方式,PowerShell将(“DUMMY”,“VALUES”)解释为一个数组,该数组将被分配给$ ServiceName,而$ Remoteserver为null。
答案 1 :(得分:3)
与大多数语言不同,PowerShell 不使用括号来调用函数。
这意味着三件事:
("DUMMY","VALUES")
实际上被解释为数组。换句话说,您只提供StopServices
一个参数而不是它需要的两个参数。
此阵列已分配给$ServiceName
。
由于缺少参数,$Remoteserver
被指定为null。
要解决此问题,您需要像这样调用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"