MR2オーナー吉田貴幸のブログ

MR2(SW20)オーナー吉田貴幸のブログ。仕事はITインフラエンジニア。愛車の記事とIT関連の情報を発信しています

【SCCM】[VBScript] [WMI] デバイスコレクションのメンバーを取得する | Microsoft System Center Configuration Manager(SCCM)

f:id:takayuki-yoshida:20190421222641p:plain

 

はじめに 

Microsoft System Center Configuration Manager(SCCM) は、WMI(Windows Management Instrumentation)から操作ができます。特にデバイスコレクションでダイレクト規則のメンバーを、PowerShell、VBScriptから一括登録・削除できると作業を省力化できますし、大規模環境でのSCCM管理者は必要になると思います。

また、ワークフローシステムと組み合わせて、アプリケーション配信を自動化するなどで運用自動化にも応用できると思います。

ここではVBScriptから操作する方法を記載します。

 

SCCMサーバーへ接続する

ここではSCCMサーバーへ接続するためのFunctionプロシージャのみです。実際の操作時にプロシージャをコールして使用します。

Function Connect(server, userName, userPassword) 
On Error Resume Next
Dim net Dim localConnection Dim swbemLocator Dim swbemServices Dim providerLoc Dim location
Set swbemLocator = CreateObject("WbemScripting.SWbemLocator") swbemLocator.Security_.AuthenticationLevel = 6 'Packet Privacy. ' If the server is local, do not supply credentials. Set net = CreateObject("WScript.NetWork") If UCase(net.ComputerName) = UCase(server) Then  localConnection = true userName = "" userPassword = "" server = "." End If
' Connect to the server. Set swbemServices= swbemLocator.ConnectServer _ (server, "root\sms",userName,userPassword) If Err.Number<>0 Then Wscript.Echo "Couldn't connect: " + Err.Description Connect = null Exit Function End If
' Determine where the provider is and connect. Set providerLoc = swbemServices.InstancesOf("SMS_ProviderLocation") For Each location In providerLoc If location.ProviderForLocalSite = True Then Set swbemServices = swbemLocator.ConnectServer _ (location.Machine, "root\sms\site_" + _ location.SiteCode,userName,userPassword) If Err.Number<>0 Then Wscript.Echo "Couldn't connect:" + Err.Description Connect = Null Exit Function End If Set Connect = swbemServices Exit Function End If Next Set Connect = null ' Failed to connect. End Function

参考)

 

デバイスコレクションのメンバーを取得する

デバイスコレクションのメンバーを取得するサンプルスクリプトです。MSページでは3種類のクエリ方法が記載されていますが、このサンプルでは1番目のみ記載しています。(基本的には1番目で動作します)

SCCMでは、デバイスが「ResourceID」で管理されていますので、ResoueceIDとデバイス名を出力するようにしています。

なお、コレクションIDは事前にSCCM管理コンソールから調べておいてください。

  • 実行方法

VBScript内で前述の接続Functionプロシジャーを含めてください。

set connection = Connect("サーバー名","ユーザー名"."パスワード")
call EnumerateCollectionMembers(connection,"コレクションID(例)SMS00001")

 

Sub EnumerateCollectionMembers(connection,strCollectionID)
Const wbemFlagReturnImmediately = 16
Const wbemFlagForwardOnly = 32 ' Set required variables. ' Note: Values must be manually added to the queries below. Dim Query1
Dim ListOfResources1
Dim Resource1
' The following example shows how to enumerate the members of the All Systems collection. Query1 = "SELECT ResourceID FROM SMS_FullCollectionMembership WHERE CollectionID = '" & strCollectionID &"'" ' Run query. Set ListOfResources1 = connection.ExecQuery(Query1, , wbemFlagForwardOnly Or wbemFlagReturnImmediately) ' The query returns a collection that needs to be enumerated. Wscript.Echo " " Wscript.Echo "Query: " & Query1 For Each Resource1 In ListOfResources1 'ResourceID,name
Wscript.Echo Resource1.ResourceID & "," & Resource1.name Next End Sub

 参考)