2014-01-10 56 views
1

此腳本拋出一個空的異常,我也不確定爲什麼是這樣的話......PowerShell的功能與參數拋出空例外

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

寫主機寫入變量。一開始服務-ComputerName方法拋出此異常:

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

我想知道他們在說什麼,也不是空的...

StopServices("DUMMY","VALUES") 

這些都不是空的。爲什麼拋出異常?

回答

3

與大多數語言不同,PowerShell確實使用而不是使用括號來調用函數。

這意味着三兩件事:

  1. ("DUMMY","VALUES")實際上是被解釋爲一個數組。換句話說,你只給出一個參數而不是它所要求的兩個參數StopServices

  2. 此數組正在分配到$ServiceName

  3. 由於缺少參數,$Remoteserver被分配給null。


要解決此問題,需要調用StopServices這樣的:

PS > StopServices DUMMY VALUES 
3

您正在錯誤地調用該功能。你應該調用它像這樣:

StopServices "DUMMY" "VALUES" 

或者,如果你想更清楚:

StopServices -ServiceName DUMMY -Remoteserver VALUES 

要傳遞參數給函數的方式,PowerShell的解釋(「虛擬」, 「VALUES」)作爲一個數組,它將被分配給$ ServiceName,並將$ Remoteserver留空。

3

事實上,$ REMOTESERVER 空。

StopServices("Dummy", "Values")沒有做你認爲它在做的事情--PowerShell不像其他編程語言那樣使用參數。 PowerShell正在將您用作表達式的語法解釋爲創建一個包含兩個值(「DUMMY」和「VALUES」)的數組,並將該數組存儲在$ ServiceName中,並將$ RemoteServer保留爲$ null。

其中一個下面的例子會給你的行爲,你是後:

StopServices "Dummy" "Values" 

- 或 -

StopServices -ServiceName "Dummy" -RemoteServer "Values"