Powershell函数抛出null异常

时间:2014-02-27 19:35:36

标签: function powershell null wmi-query

好的,所以我已经阅读了关于在powershell中调用函数和传递参数的内容,但也许我不理解某些东西。我正在调用一个函数并传递一些参数,一切正常。它是在函数中定义的变量,当它不是时,它似乎是null。

功能:

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行中的$ Computer in更改为COMP1,一切都很好。但是,$ fore计算机在foreach循环中写出成功写入COMP1。

我在这里缺少什么?

3 个答案:

答案 0 :(得分:3)

您需要使用-ArgumentLis指定Invoke-Command t参数。例如:

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

答案 1 :(得分:0)

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

您需要更改函数以接受$ip

的参数

答案 2 :(得分:0)

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