A Configuration Manager helyvezérlő fájljának olvasása és írása a WMI használatával
A Configuration Managerben a helyvezérlő fájlba ír a Windows Management Instrumentation (WMI) használatával az SMS_SiteControlFile
osztály metódusainak használatával.
Amikor WMI használatával ír a helyvezérlő fájlba, egy munkamenet-leíróval azonosítja az alkalmazást. Ez a fájl egyidejű frissítéseinek kezelésére szolgál.
Ha befejezte a webhelyvezérlő fájlba való írást, véglegesítenie kell a módosításokat.
SMS_SiteControlFile a következő módszerekkel kezelheti a helyvezérlő fájl módosításait.
Módszer | Leírás |
---|---|
CommitSCF |
Alkalmazza a módosításokat a Configuration Manager-adatbázisra. |
RefreshSCF |
Frissíti a helyvezérlő fájl memóriabeli másolatát a Configuration Manager-adatbázis legutóbbi módosításaival. |
GetSessionHandle |
Lekéri a helyvezérlő fájl memóriában tárolt példányát és egy munkamenet-leírót. A munkamenet-leírót az IWbemContext összes IWbemServices metódusnak átadott objektumba helyezi. |
ReleaseSessionHandle |
Felszabadítja a helyvezérlő fájl memóriában tárolt példányát és a munkamenet-leíróhoz társított erőforrásokat. |
Figyelem!
Mielőtt az SMS Provider osztályokkal módosítaná a hely konfigurációját, tapasztaltnak kell lennie a hely konfigurációjának kezelésében. Néhány konfigurálható elem módosításával nagy kárt okozhat a webhelyeknek. Rendkívül körültekintően járjon el, vagy kerülje a és SMS_SCI_SiteDefinition
az SMS_SCI_FileDefinition
osztály használatát. Ezek az osztályok kezelik magát a helyvezérlő fájlt. Ha nem óvatos, a webhelyet használhatatlanná teheti.
Írás a webhelyvezérlő fájlba
Állítson be egy kapcsolatot az SMS-szolgáltatóval. További információ: Az SMS-szolgáltató alapjai.
Hozzon létre egy
SWbemNameValue
értékkészletet a környezeti adatok tárolásához.Munkamenet-leíró lekérése a osztályból
SMS_SiteControlFile
GetSessionHandle
.Adja hozzá a munkamenet-leírót a környezeti adatokhoz.
Hívja meg az
SMS_SiteControlFile
objektumotRefreshSCF
a helyvezérlő fájl legújabb példányának lekéréséhez. Használja a hívás környezeti adatait.Kérdezze le a frissíteni kívánt helyvezérlőfájl-erőforrást a környezeti adatokkal.
Frissítse az erőforrást a környezeti adatokkal.
Véglegesítse a módosításokat a helyvezérlő fájlban az
SMS_SiteControlFile
objektummetódusCommitSCF
használatával.Hívja meg az
SMS_SiteControlFile
objektummetódustReleaseSessionHandle
a munkamenet-leíró felszabadításához.
Példa
Az alábbi VBScript-példa hozzáfér a helyvezérlő fájl ügyfélügynök összetevőéhez, és létrehoz egy üres tulajdonságot, tulajdonságlistát és többsztringes listát. Ezután eltávolítja a végrehajtott frissítéseket. A példa bemutatja, hogyan állíthatja be a munkamenet-leírót, hogyan szerezheti be a helyvezérlő fájlt, kérdezheti le a helyvezérlő fájlt, végezhet frissítéseket és véglegesíthet módosításokat a helyvezérlő fájlban.
A példában a LocaleID
tulajdonság angol (USA) kódolású. Ha nem egyesült államokbeli területi beállításra van szüksége telepítéseket, a SMS_Identification kiszolgálói WMI-osztályLocaleID
tulajdonságból szerezheti be.
A mintakód meghívásával kapcsolatos információkért lásd: A Configuration Manager kódrészleteinek meghívása.
Sub ReadWriteScf(connection, siteCode)
Dim context
Dim query
Dim resource
Dim resources
Dim inParams
Set context = CreateObject("WbemScripting.SWbemNamedValueSet")
' Add the standard SMS context qualifiers to the context object.
context.Add "LocaleID", "MS\1033"
context.Add "MachineName", "MyMachine"
context.Add "ApplicationName", "MyApp"
' Add the session handle.
context.Add "SessionHandle", _
connection.ExecMethod("SMS_SiteControlFile", "GetSessionHandle").SessionHandle
' Load site control file.
Set inParams = connection.Get("SMS_SiteControlFile").Methods_("RefreshSCF").InParameters.SpawnInstance_
InParams.SiteCode = siteCode
connection.ExecMethod "SMS_SiteControlFile", "RefreshSCF", inParams, , context
' Query for the client agent component.
query = "SELECT * FROM SMS_SCI_ClientComp " & _
"WHERE ClientComponentName = 'Client Agent' " & _
"AND SiteCode = '" & siteCode & "'"
Set resources = connection.ExecQuery(query, , , context)
For each resource in resources
' Embedded property.
WScript.Echo "Embedded property"
Wscript.Echo "-----------------"
Dim value
Dim value1
Dim value2
Call WriteScfEmbeddedProperty(connection,context,resource,"Test2",20,"Hello","World")
If GetScfEmbeddedProperty(resource,"Test2",value,value1,value2) = True Then
Wscript.Echo "Value: " + CStr(value)
WScript.Echo "Value1: " + value1
WScript.Echo "Value2: " + value2
End If
WScript.Echo
dim n,l
dim updatedProps
Dim scfProp
n = 0
' Remove the property.
For l = 0 To UBound (resource.Props)
' Copy each element except the one to delete.
If resource.Props(l).PropertyName <> "Test2" Then
Dim embeddedProperty
Set embeddedProperty = connection.Get("SMS_EmbeddedProperty").Spawninstance_()
If l = 0 Then
' Create an array to copy to.
updatedProps = array(embeddedProperty)
Redim updatedProps(Ubound(resource.Props)-1)
End If
' Copy the element.
embeddedProperty.PropertyName = resource.Props(l).PropertyName
embeddedProperty.Value = resource.Props(l).value
embeddedProperty.Value1 = resource.Props(l).value1
embeddedProperty.Value2 = resource.Props(l).value2
Set updatedProps(n) = embeddedProperty
n = n + 1
End If
Next
' Update
resource.Props = updatedProps
resource.Put_, context
WScript.Echo
' Check that the property has been deleted.
If GetScfEmbeddedProperty(resource,"Test2",value,value1,value2) = True Then
WScript.Echo "Property found"
Else
WScript.Echo "Property not found"
End If
WScript.Echo
' Embedded property list.
WScript.Echo "Embedded property list"
WScript.Echo "----------------------"
Dim values
values = Array("Tiger","Wolf")
Call WriteScfEmbeddedPropertyList(connection,context,resource,"Animals",values)
Dim retrievedValues
If GetScfEmbeddedPropertyList(resource,"Animals",retrievedValues) = True Then
Dim i,c
Dim updatedValues
c = 0
' Display the list and remove the property Tiger.
updatedValues = Array(UBound(retrievedValues)-1)
For i = 0 To UBound (retrievedValues)
Wscript.Echo retrievedValues(i)
If retrievedValues(i) <> "Tiger" Then
updatedValues(c) = retrievedValues(i)
c = c + 1
End If
Next
WScript.Echo
' Update the property list.
Call WriteScfEmbeddedPropertyList(connection,context,resource,"Animals",updatedValues)
' Get the property list and display.
Call GetScfEmbeddedPropertyList(resource,"Animals",retrievedValues)
For i = 0 To UBound (retrievedValues)
Wscript.Echo retrievedValues(i)
Next
Else
WScript.Echo "Not found"
End If
WScript.Echo
' RegMultiString list.
WScript.Echo "Embedded RegMultiString list"
WScript.Echo "----------------------------"
Dim valueStrings
valueStrings= Array("Lisa","Julie")
' Write the RegMultiString list.
Call WriteScfRegMultiStringList(connection,context,resource,"Names2",valueStrings)
Dim retrievedValueStrings
' Get the RegMultiString list.
If GetScfRegMultiStringList(resource,"Names2",retrievedValueStrings) = True Then
Dim updatedValueStrings
c = 0
updatedValueStrings = Array(Ubound(retrievedValueStrings)-1)
For i = 0 To UBound (retrievedValueStrings)
Wscript.Echo retrievedValueStrings(i)
if retrievedValueStrings(i) <> "Lisa" Then
updatedValueStrings(c) = retrievedValueStrings(i)
End If
Next
Call WriteScfRegMultiStringList(connection,context,resource,"Names",updatedValueStrings)
WScript.Echo
Call GetScfRegMultiStringList(resource,"Names",retrievedValueStrings)
For i = 0 To UBound (retrievedValueStrings)
Wscript.Echo retrievedValueStrings(i)
Next
Else
WScript.Echo "Not found"
End If
Next
' Commit the changes.
Set inParams = connection.Get("SMS_SiteControlFile").Methods_("CommitSCF").InParameters.SpawnInstance_
inParams.SiteCode = siteCode
connection.ExecMethod "SMS_SiteControlFile", "CommitSCF", inParams, , context
' Release the session handle.
Set inParams = connection.Get("SMS_SiteControlFile").Methods_("ReleaseSessionHandle").InParameters.SpawnInstance_
inParams.SessionHandle = context.Item("SessionHandle")
connection.ExecMethod "SMS_SiteControlFile", "ReleaseSessionHandle", inParams
End Sub
A példametódus a következő paraméterekkel rendelkezik:
Paraméter | Típus | Leírás |
---|---|---|
connection |
- SWbemServices | Érvényes kapcsolat az SMS-szolgáltatóval. |
siteCode |
- String |
A Configuration Manager-hely helykódja. |
A kód fordítása
Ehhez a C#-példához a következőre van szükség:
Névterek
Rendszer
System.Collections.Generic
System.Collections
System.Text
Microsoft.ConfigurationManagement.ManagementProvider
Microsoft.ConfigurationManagement.ManagementProvider.WqlQueryEngine
Összeszerelés
microsoft.configurationmanagement.managementprovider
adminui.wqlqueryengine
Robusztus programozás
További információ a hibakezelésről: Tudnivalók a Configuration Manager hibáiról.
.NET-keretrendszer biztonsága
További információ a Configuration Manager-alkalmazások biztonságossá tételéről: Configuration Manager szerepköralapú felügyelet.
Lásd még
Windows Management Instrumentation
Tudnivalók a Configuration Manager helyvezérlő fájljáról
A Configuration Manager helyvezérlő fájljának beágyazott tulajdonságlistájának olvasása