間もなくすべてのユーザーアカウントを新しいドメインに移動します。その一環として、ユーザーアカウントはSCCMで新しいSMS ResourceIDを取得します。
私がする必要があるのは、ユーザーがメンバーになっているすべてのコレクションに対してSCCMをクエリすることです。これにより、新しいユーザーアカウントのコレクションを複製できるようになります。直接メンバーシップ(クエリメンバーシップではなく)は私が興味を持っていること。ユーザーへのすべての広告を見つけるのはかなり簡単なようですが、彼らのコレクションを見つけることはできません。
理想的には、スクリプトを介してこれを取得できるようにし、2番目のスクリプトを使用して、新しいユーザーアカウントを関連するコレクションに追加できるようにします(スクリプトを介してコレクションに追加できます)。
現在実行中SCCM 2007R2。
さて、MSDNを何度も読んだ後、これが(厄介な)VBScriptであり、SCCMから関連するものを引き出すためにまとめることができました。
option explicit
DIM strSCCMServer, objSCCM
DIM strUserName, strDomain
DIM strSMSUserID
'Central Site Server
strSCCMServer = "SCCMSERVER01"
'Active Directory domain name
strDomain = "DOMAIN_NAME"
strUserName = InputBox ("Enter User Name")
'Find Site Code
DIM objLoc, Results, Loc
Set objLoc = CreateObject("WbemScripting.SWbemLocator")
Set objSCCM = objLoc.ConnectServer(strSCCMServer, "root\sms")
Set Results = objSCCM.ExecQuery ("SELECT * From SMS_ProviderLocation WHERE ProviderForLocalSite = true")
For each Loc in Results
If Loc.ProviderForLocalSite = True Then
Set objSCCM = objLoc.ConnectServer(Loc.Machine, "root\sms\site_" & Loc.SiteCode)
End If
Next
'Find domain user accounts for strUserName
strSMSUserID = GetUserResourceID(strUserName, strDomain)
If (strSMSUserID = "") Then
wscript.echo "Error: no account found in " & strDomain & " for userID " & strUserName
wscript.quit
Else
wscript.echo strDomain & "\" & strUserName & " = " & strSMSUserID
End If
'Find all direct collection memberships of this account
DIM colCollIDs, objCollResID
Set colCollIDs = objSCCM.ExecQuery ("select * from SMS_CollectionMember_a where ResourceID='" & strSMSUserID & "'")
for each objCollResID in colCollIDs
DIM instColl
Set instColl = objSCCM.Get ("SMS_Collection.CollectionID=""" & objCollResID.CollectionID &"""")
wscript.echo objCollResID.CollectionID & " = " & instColl.Name
next
'Obtain the SMS resource ID for a user account in a domain
Function GetUserResourceID(strUser, strDomain)
DIM objResID, colResourceIDs
Set colResourceIDs = objSCCM.ExecQuery ("select ResourceID from SMS_R_User where UserName = '" & strUser &"' AND WindowsNTDomain = '"& strDomain &"'")
for each objResID in colResourceIDs
GetUserResourceID = objResID.ResourceID
next
End Function