Object 使用PowerShell';s添加成员将导致错误
为什么下面的脚本会出现以下错误 “添加成员:无法处理命令,因为缺少一个或多个Object 使用PowerShell';s添加成员将导致错误,object,powershell,wmi,pipeline,Object,Powershell,Wmi,Pipeline,为什么下面的脚本会出现以下错误 “添加成员:无法处理命令,因为缺少一个或多个 必需参数:InputObject. +$obj=addmember首先,您需要通过管道将属性添加到指定的输入对象。 然后,如果希望cmdlet返回修改过的对象,则应使用-PassThru参数调用它: 使用PassThru参数时,Add Member返回 新扩展的对象。否则,此cmdlet不会生成任何 输出 下面是您的脚本的一个稍加修改的版本: $obj = $objItem | Add-Member -MemberTy
必需参数:InputObject.
+$obj=addmember首先,您需要通过管道将属性添加到指定的输入对象。
然后,如果希望cmdlet返回修改过的对象,则应使用
-PassThru
参数调用它:
使用PassThru参数时,Add Member返回
新扩展的对象。否则,此cmdlet不会生成任何
输出
下面是您的脚本的一个稍加修改的版本:
$obj = $objItem | Add-Member -MemberType NoteProperty -Name ComputerName -Value $ComputerName -PassThru
但是,由于您不需要将输出对象保存在新变量中,因此也可以简单地说:
$obj | Add-Member -MemberType NoteProperty -Name ComputerName -Value $ComputerName
试着这样做:
$objcol = @()
ForEach ($objItem in $colItems)
{
$obj = New-Object System.Object
$obj | Add-Member -MemberType NoteProperty -Name ComputerName -Value $ComputerName
$obj | Add-Member -MemberType NoteProperty -Name MacAddress -Value $objItem.MacAddress
$obj | Add-Member -MemberType NoteProperty -Name IPAdress -Value $objitem.IpAddress
$objcol += $obj
}
Write-Output $objcol
您需要将创建移动到循环中。否则,您将得到错误,即对象上已经存在属性
其次,您需要告诉要在哪个对象上操作。您可以通过将对象管道化到cmdlet,或者通过在InputObject
参数中指定它来完成操作。最后,通过在最后一次Add Member
调用中指定PassThru
开关,将对象返回到管道:
ForEach ($objItem in $colItems)
{
$obj = New-Object -TypeName PSobject
Add-Member -InputObject $obj -MemberType NoteProperty -Name ComputerName -Value $ComputerName
Add-Member -InputObject $obj -MemberType NoteProperty -Name MacAddress -Value $objItem.MacAddress
Add-Member -InputObject $obj -MemberType NoteProperty -Name IPAddress -Value $objitem.IpAddress -PassThru
}
或者,您可以使用-Property
参数简化流程:
Get-WmiObject Win32_NetworkAdapterConfiguration -ComputerName $ComputerName -Filter "IpEnabled=TRUE" | Foreach-Object {
New-Object -TypeName PSobject -Property @{
ComputerName=$ComputerName
MacAddress=$_.MacAddress
IPAddress=$_.IpAddress
}
}
或使用:
正如Enrico、Shay和Christian所指出的,您应该通过将对象管道化到
Add Member
或在InputObject
参数上明确指定对象来指定Add Member
操作的对象。当使用Add Member
添加多个成员时,我通常会添加PassThru代码>切换以避免重复InputObject并提供视觉提示
ForEach ($objItem in $colItems) {
$obj = New-Object PSobject
$obj | Add-Member -MemberType NoteProperty -Name ComputerName -Value $ComputerName -PassThru `
| Add-Member -MemberType NoteProperty -Name MacAddress -Value $objItem.MacAddress -PassThru `
| Add-Member -MemberType NoteProperty -Name IPAdress -Value $objitem.IpAddress -PassThru
}
将的结果指定给变量,而不是将其添加到$obj
中的属性集合
而不是
$obj = Add-Member -MemberType NoteProperty -Name ComputerName -Value $ComputerName
试试这个:
Add-Member -MemberType NoteProperty -Name ComputerName -Value $ComputerName -inputObject $obj
在“$Objule= @()”中,“@”符号使用了这个脚本,它处理得很好。这个脚本与其他脚本相比更适合我的理解。一个问题,为什么“$Obji”而不是“$Obj=”?将成员类型添加到对象中,你需要管而不是分配。读这里。如果你认为这个答案好,就接受它。谢谢。
$obj = Add-Member -MemberType NoteProperty -Name ComputerName -Value $ComputerName
Add-Member -MemberType NoteProperty -Name ComputerName -Value $ComputerName -inputObject $obj