2016-10-10 1 views
0

je ci-dessous le codeSCCM Powershell SCRIPT pour obtenir l'emplacement de l'objet de la hiérarchie des dossiers

Function Get-SCCMObjectLocation { 

    param(
     [Parameter(Mandatory=$true, 
       ValueFromPipeline=$true, 
       ValueFromPipelineByPropertyName=$true, 
       Position=0)][string]$SMSId, 
     [string]$SiteCode = (Get-CMSite).SiteCode, 
     [string]$SiteServerName = (Get-CMSite).ServerName) 

    #Find the container directly containing the item 
    $ContainerItem = Get-WmiObject -Namespace root/SMS/site_$($SiteCode) -ComputerName $SiteServerName -Query "select * from SMS_ObjectContainerItem where InstanceKey = '$($SMSId)'" 
    If (!$ContainerItem) { 
     $ObjectName = Get-WmiObject -Namespace root/SMS/site_$($SiteCode) -ComputerName $SiteServerName -Query "select * from SMS_ObjectName where ObjectKey = '$($SMSId)'" 
     If (!$ObjectName) { 
      Write-Warning "No object or containers found for $SMSId" 
      break; 
     } 
     Else 
     { 
      Return "root\$(($ObjectName).Name)" 
      break; 
     } 
    } 

    If ($ContainerItem -is [array]) { 
     Write-Warning "Multiple objects with ID: $SMSId" 
     Foreach ($Item In $ContainerItem) { 
      $tempOutputString = Get-SCCMContainerHierarchy -ContainerNodeId $Item.ContainerNodeID -ObjectType $Item.ObjectType -ObjectTypename $Item.ObjectTypeName -SiteCode $SiteCode -SiteServerName $SiteServerName 
      $OutputString = "$OutputString`nroot\$tempOutputString" 
     } 
     Return "$OutputString" 
    } 
    Else { 
     #One object found 
     $OutputString = Get-SCCMContainerHierarchy -ContainerNodeId ($ContainerItem).ContainerNodeID -SiteCode $SiteCode -SiteServerName $SiteServerName 
     Return "root\$OutputString" 
    } 


} 

Function Get-SCCMContainerHierarchy { 
    param(
     [Parameter(Mandatory=$true, 
       Position=0)][string]$ContainerNodeId, 
     [Parameter(Mandatory=$true, 
       Position=1)][string]$SiteCode = (Get-CMSite).SiteCode, 
     [Parameter(Mandatory=$true, 
       Position=2)][string]$SiteServerName = (Get-CMSite).ServerName, 
     [Parameter(Mandatory=$false)]$ObjectType = ($ContainerItem).ObjectType, 
     [Parameter(Mandatory=$false)]$ObjectTypeName = ($ContainerItem).ObjectTypeName) 

    Switch ($ObjectType) { 
     2  {$ObjectTypeText = $ObjectTypeName; $ObjectName = (Get-CMPackage -ID $SMSId).Name} # Package 
     14  {$ObjectTypeText = $ObjectTypeName; $ObjectName = (Get-CMOperatingSystemInstaller -ID $SMSId).Name} # OS Install Package 
     18  {$ObjectTypeText = $ObjectTypeName; $ObjectName = (Get-CMOperatingSystemImage -ID $SMSId).Name} # OS Image 
     20  {$ObjectTypeText = $ObjectTypeName; $ObjectName = (Get-CMTaskSequence -ID $SMSId).Name} # Task Sequence 
     23  {$ObjectTypeText = $ObjectTypeName; $ObjectName = (Get-CMDriverPackage -ID $SMSId).Name} # Driver Package 
     19  {$ObjectTypeText = $ObjectTypeName; $ObjectName = (Get-CMBootImage -ID $SMSId).Name} # Boot Image 
     5000 {$ObjectTypeText = $ObjectTypeName; $ObjectName = (Get-CMDeviceCollection -Id $SMSId).Name} # Device Collection 
     5001 {$ObjectTypeText = $ObjectTypeName; $ObjectName = (Get-CMUserCollection -Id $SMSId).Name} # User Collection 
     default {$ObjectTypeText = "unknown object type: '$($ObjectTypeName)' = $($ObjectType)"; $ObjectName = "unknown object name ($SMSId)"} 
    } 

    $OutputString = "$ObjectName `t[$ObjectTypeText]" 
    #ContainerNodeID of 0 is the root 
    While ($ContainerNodeId -ne 0) { 
     #Find details of that container 
     $ContainerNode = Get-WmiObject -Namespace root/SMS/site_$($SiteCode) -ComputerName $SiteServerName -Query "select * from SMS_ObjectContainerNode where ContainerNodeID = '$($ContainerNodeId)'" 
     $ContainerName = ($ContainerNode).Name 
     $ContainerNodeId = ($ContainerNode).ParentContainerNodeID 
     $OutputString = "$ContainerName\$OutputString" 
    } 
    Return $OutputString 
} 
Get-SCCMObjectLocation -SMSId "PS1022EB" -SiteCode PS1 -SiteServerName xxyyzz.com 

mais obtenu l'erreur ci-dessous - ne suis-je fournirai mauvais paramètre

enter image description here

Répondre

1

En général, le réglage du pare-feu peut provoque cette erreur (0x800706BA). Si le pare-feu est activé sur les ordinateurs de destination, vous pouvez vérifier les règles de pare-feu du groupe "WMI (Windows Management Instrumentation)" (l'action de pare-feu est "Autoriser").

Si elle est désactivée, vous pouvez les activer manuellement ou exécuter la commande suivante:

netsh advfirewall firewall set rule group="Windows Management Instrumentation (WMI)" new enable=yes 

En outre, cette erreur implique l'erreur est venue avec la commande « Get-WmiObject ».

Get-WmiObject -Namespace root/SMS/site_$($SiteCode) -ComputerName $SiteServerName -Query "select * from SMS_ObjectContainerItem" 
: Pour le réduire, vous pouvez exécuter la commande ci-dessous séparément (Il suffit de changer quelques variables telles que $ (SiteCode $), $ SiteServerName à la valeur réelle de SiteCode et SiteServerName dans votre environnement)