Powershell函数抛出空异常

问题描述:

好吧,所以我已经阅读了调用函数并在PowerShell中传递参数,但也许我不理解的东西。我正在调用一个函数并传递几个参数,一切正常。它是在函数中定义的变量,当它不是时,它似乎是空的。Powershell函数抛出空异常

功能:

function get-session { 
$session = New-PSSession -ComputerName $ip -Credential $cred -Auth CredSSP 
$subcomps = 'COMP1' 
foreach ($Computer in $subcomps) 
{ 
$Computer 
Invoke-Command -Session $session -ScriptBlock { Get-WmiObject -ComputerName $Computer -Query "SELECT * FROM Win32_Group" } 
} 
Remove-PSSession -ComputerName $ip 
} 

脚本:

$ip = '123.45.67.89' 
$ComputerName = "HOPCOMP" 
$user = '\Admin' 
$cred = $ComputerName + $user 
$ip 
$cred 
(get-session -ComputerName $ip -Credential $cred) 

当我运行此:

Cannot validate argument on parameter 'ComputerName'. The argument is null or empty. 
Supply an argument that is not null or empty and then try the command again. 
+ CategoryInfo   : InvalidData: (:) [Get-WmiObject], ParameterBindingValidationException 
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.PowerShell.Commands.GetWmiObjectCommand 

当然,如果我在功能改变$计算机Get-WmiObject中一行到COMP1一切正常。但是,在$ foreach循环中写出的$ Computer会成功写入COMP1。

我在这里错过了什么?

的参数,你需要指定你的调用命令的参数-ArgumentList。例如:

Invoke-Command -Session $session -ScriptBlock { param($Computer) Get-WmiObject -ComputerName $Computer -Query "SELECT * FROM Win32_Group" } -ArgumentList $Computer 
+0

非常好,谢谢! – snoop

该函数不知道$ ip是什么。

您需要更改函数接受$ IP

+0

它的行为就像它一样。会话在您运行脚本时打开。你能解释更多吗? – snoop

$ IP是全局的,因此已知该函数。在使用Invoke-Command对其执行操作之前,需要-ArgumentList或填充$ MyScriptBlock行。