My problem is with this code:
function Get-SCCMCollectionContainerNode {
[CmdletBinding()]
Param(
[Parameter(ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true,Mandatory=$true)][string]$ContainerNodeID,
[Parameter(ValueFromPipeline=$false,ValueFromPipelineByPropertyName=$false,Mandatory=$true)][string]$SiteCode,
[Parameter(ValueFromPipeline=$false,ValueFromPipelineByPropertyName=$false,Mandatory=$true)][string]$SiteServer
)
BEGIN {
}
PROCESS {
Write-Debug -Message "ContainerNodeID: $ContainerNodeID"
$WMIQuery = "SELECT * FROM SMS_ObjectContainerNode WHERE ContainerNodeID = '$ContainerNodeID'"
Write-Debug -Message "WMIQuery: $WMIQuery"
Get-WmiObject -Namespace "root\sms\Site_$SiteCode" -Query $WMIQuery -ComputerName "$SiteServer"
}
END {
}
}
If I call the function by explicitly assigning all 3 params, everything works fine.
PS > Get-SCCMCollectionContainerNode -SiteCode CM1 -SiteServer Server1 -ContainerNodeID 16777220
DEBUG: 16777220
DEBUG: SELECT * FROM SMS_ObjectContainerNode WHERE ContainerNodeID = '16777220'
__GENUS : 2
__CLASS : SMS_ObjectContainerNode
__SUPERCLASS : SMS_BaseClass
__DYNASTY : SMS_BaseClass
__RELPATH : SMS_ObjectContainerNode.ContainerNodeID=16777220
__PROPERTY_COUNT : 11
__DERIVATION : {SMS_BaseClass}
__SERVER : Server1
__NAMESPACE : root\sms\Site_CM1
__PATH : \\Server1\root\sms\Site_CM1:SMS_ObjectContainerNode.ContainerNodeID=16777220
ContainerNodeID : 16777220
FolderFlags : 0
FolderGuid : 795E005E-3290-4223-AA94-E2669EE81999
IsEmpty : False
Name : Net Test
ObjectType : 5000
ObjectTypeName : SMS_Collection_Device
ParentContainerNodeID : 0
SearchFolder : False
SearchString :
SourceSite : CM1
PSComputerName : Server1
If I call using the complementary function and only passing the ContainerNodeID attribute into the pipeline, everything works.
PS > (Get-SCCMCollectionContainerItem -SiteCode CM1 -SiteServer Server1 -CollectionID CM1000C8).ContainerNodeID | Get-SCCMCollectionContainerNode -SiteCode CM1 -SiteServer Server1
DEBUG: SELECT * FROM SMS_ObjectContainerItem WHERE InstanceKey = 'CM1000C8'
DEBUG: 16777220
DEBUG: SELECT * FROM SMS_ObjectContainerNode WHERE ContainerNodeID = '16777220'
__GENUS : 2
__CLASS : SMS_ObjectContainerNode
__SUPERCLASS : SMS_BaseClass
__DYNASTY : SMS_BaseClass
__RELPATH : SMS_ObjectContainerNode.ContainerNodeID=16777220
__PROPERTY_COUNT : 11
__DERIVATION : {SMS_BaseClass}
__SERVER : Server1
__NAMESPACE : root\sms\Site_CM1
__PATH : \\Server1\root\sms\Site_CM1:SMS_ObjectContainerNode.ContainerNodeID=16777220
ContainerNodeID : 16777220
FolderFlags : 0
FolderGuid : 795E005E-3290-4223-AA94-E2669EE81999
IsEmpty : False
Name : Net Test
ObjectType : 5000
ObjectTypeName : SMS_Collection_Device
ParentContainerNodeID : 0
SearchFolder : False
SearchString :
SourceSite : CM1
PSComputerName : Server1
Get-SCCMCollectionContainerItem function:
function Get-SCCMCollectionContainerItem {
[CmdletBinding()]
Param(
[Parameter(ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true,Mandatory=$true)][string]$CollectionID,
[Parameter(ValueFromPipeline=$false,ValueFromPipelineByPropertyName=$false,Mandatory=$true)][string]$SiteCode,
[Parameter(ValueFromPipeline=$false,ValueFromPipelineByPropertyName=$false,Mandatory=$true)][string]$SiteServer
)
BEGIN {
}
PROCESS {
$WMIQuery = "SELECT * FROM SMS_ObjectContainerItem WHERE InstanceKey = '$collectionID'"
Write-Debug -Message $WMIQuery
Get-WmiObject -Namespace "root\sms\Site_$SiteCode" -Query $WMIQuery -ComputerName "$SiteServer"
}
END {
}
}
But, if I just call it using the complementary function without explicitly passing the ContainerNodeID attribute, I get the value of the attribute before ContainerNodeID, (“__PATH”).
PS > Get-SCCMCollectionContainerItem -SiteCode CM1 -SiteServer Server1 -CollectionID CM1000C8
DEBUG: SELECT * FROM SMS_ObjectContainerItem WHERE InstanceKey = 'CM1000C8'
__GENUS : 2
__CLASS : SMS_ObjectContainerItem
__SUPERCLASS : SMS_BaseClass
__DYNASTY : SMS_BaseClass
__RELPATH : SMS_ObjectContainerItem.MemberID=16777449
__PROPERTY_COUNT : 7
__DERIVATION : {SMS_BaseClass}
__SERVER : Server1
__NAMESPACE : root\sms\Site_CM1
__PATH : \\Server1\root\sms\Site_CM1:SMS_ObjectContainerItem.MemberID=16777449
ContainerNodeID : 16777220
InstanceKey : CM1000C8
MemberGuid : 83919C0B-92B3-42A5-8668-4851163C4AB9
MemberID : 16777449
ObjectType : 5000
ObjectTypeName : SMS_Collection_Device
SourceSite :
PSComputerName : Server1
PS > Get-SCCMCollectionContainerItem -SiteCode CM1 -SiteServer Server1 -CollectionID CM1000C8
| Get-SCCMCollectionContainerNode -SiteCode CM1 -SiteServer Server1
DEBUG: SELECT * FROM SMS_ObjectContainerItem WHERE InstanceKey = 'CM1000C8'
DEBUG: \\Server1\root\sms\Site_CM1:SMS_ObjectContainerItem.MemberID=16777449
DEBUG: SELECT * FROM SMS_ObjectContainerNode WHERE ContainerNodeID =
'\\Server1\root\sms\Site_CM1:SMS_ObjectContainerItem.MemberID=16777449'
Get-WmiObject : Generic failure
At F:\Storage\Scripts\Windows\Modules\SCCMToolbox\SCCMToolbox.psm1:72 char:3
+ Get-WmiObject -Namespace "root\sms\Site_$SiteCode" -Query $WMIQuery -ComputerN ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [Get-WmiObject], ManagementException
+ FullyQualifiedErrorId : GetWMIManagementException,Microsoft.PowerShell.Commands.GetWmiObjectCommand
Any thoughts?