Powershell

通過 PowerShell 檢索 SCCM 集合成員資格

  • December 9, 2016

我想找到一個 PowerShell 腳本來檢索給定電腦或使用者的 SCCM 集合。我知道這可以通過 SCCM 查詢來實現,但我想使用 PowerShell 函式來實現。

該腳本應適用於 SCCM 2007 和 SCCM 2012。

這是執行此操作的 PowerShell 函式:

$Server = "sccm-01"
$site = "S01"

Function Get-Collections 
{
   <# 
           .SYNOPSIS 
               Determine the SCCM collection membership    
           .DESCRIPTION
               This function allows you to determine the SCCM collection membership of a given user/computer
           .PARAMETER  Type 
               Specify the type of member you are querying. Possible values : 'User' or 'Computer'
           .PARAMETER  ResourceName 
               Specify the name of your member : username or computername
           .EXAMPLE 
               Get-Collections -Type computer -ResourceName PC001
               Get-Collections -Type user -ResourceName User01
           .Notes 
               Author : Antoine DELRUE 
               WebSite: http://obilan.be 
   #> 

   param(
   [Parameter(Mandatory=$true,Position=1)]
   [ValidateSet("User", "Computer")]
   [string]$type,

   [Parameter(Mandatory=$true,Position=2)]
   [string]$resourceName
   ) #end param

   Switch ($type)
       {
           User {
               Try {
                   $ErrorActionPreference = 'Stop'
                   $resource = Get-WmiObject -ComputerName $server -Namespace "root\sms\site_$site" -Class "SMS_R_User" | ? {$_.Name -ilike "*$resourceName*"}                            
               }
               catch {
                   Write-Warning ('Failed to access "{0}" : {1}' -f $server, $_.Exception.Message)
               }

           }

           Computer {
               Try {
                   $ErrorActionPreference = 'Stop'
                   $resource = Get-WmiObject -ComputerName $server -Namespace "root\sms\site_$site" -Class "SMS_R_System" | ? {$_.Name -ilike "$resourceName"}                           
               }
               catch {
                   Write-Warning ('Failed to access "{0}" : {1}' -f $server, $_.Exception.Message)
               }
           }
       }

   $ids = (Get-WmiObject -ComputerName $server -Namespace "root\sms\site_$site" -Class SMS_CollectionMember_a -filter "ResourceID=`"$($Resource.ResourceId)`"").collectionID
   # A little trick to make the function work with SCCM 2012
   if ($ids -eq $null)
   {
           $ids = (Get-WmiObject -ComputerName $server -Namespace "root\sms\site_$site" -Class SMS_FullCollectionMembership -filter "ResourceID=`"$($Resource.ResourceId)`"").collectionID
   }

   $array = @()

   foreach ($id in $ids)
   {
       $Collection = get-WMIObject -ComputerName $server -namespace "root\sms\site_$site" -class sms_collection -Filter "collectionid=`"$($id)`""
       $Object = New-Object PSObject
       $Object | Add-Member -MemberType NoteProperty -Name "Collection Name" -Value $Collection.Name
       $Object | Add-Member -MemberType NoteProperty -Name "Collection ID" -Value $id
       $Object | Add-Member -MemberType NoteProperty -Name "Comment" -Value $Collection.Comment
       $array += $Object
   }

   $array
}

只需調整值 $ Server and $ 根據您的環境的站點變數。

以下是如何使用此功能的範例:

Get-Collections -Type computer -ResourceName PC001
Get-Collections -Type user -ResourceName User01

結果將是一個表格,顯示與電腦或使用者關聯的集合 ID、集合名稱和註釋。

希望這可以幫助!

引用自:https://serverfault.com/questions/696025