Jak odczytywać i zapisywać w pliku kontroli lokacji programu Configuration Manager przy użyciu usługi WMI
W programie Configuration Manager zapisujesz w pliku kontroli lokacji przy użyciu instrumentacji zarządzania windows (WMI) przy użyciu SMS_SiteControlFile
metod klasy.
Podczas zapisywania w pliku kontroli lokacji przy użyciu usługi WMI można użyć dojścia sesji do identyfikowania aplikacji. Służy do zarządzania równoczesne aktualizacje pliku.
Po zakończeniu zapisywania w pliku kontroli lokacji należy zatwierdzić zmiany.
SMS_SiteControlFile ma następujące metody zarządzania zmianami w pliku kontroli lokacji.
Metoda | Opis |
---|---|
CommitSCF |
Stosuje zmiany do bazy danych programu Configuration Manager. |
RefreshSCF |
Odświeża kopię pliku kontroli lokacji w pamięci przy użyciu wszelkich ostatnich zmian z bazy danych programu Configuration Manager. |
GetSessionHandle |
Pobiera kopię w pamięci pliku kontrolki lokacji i dojścia sesji. Uchwyt sesji należy umieścić w obiekcie IWbemContext , który jest przekazywany do wszystkich IWbemServices metod. |
ReleaseSessionHandle |
Zwalnia kopię pliku kontroli lokacji w pamięci i wszystkie zasoby skojarzone z dojściem sesji. |
Uwaga
Należy mieć doświadczenie w zarządzaniu konfiguracją lokacji przed użyciem klas dostawcy programu SMS w celu zmodyfikowania konfiguracji lokacji. Witryna może wyrządzić ogromne szkody, zmieniając niektóre konfigurowalne elementy. Należy zachować szczególną ostrożność lub całkowicie unikać używania SMS_SCI_FileDefinition
klas i SMS_SCI_SiteDefinition
. Te klasy zarządzają samym plikiem kontroli lokacji. Jeśli nie uważasz, możesz uczynić witrynę bezużyteczną.
Aby zapisać w pliku kontroli lokacji
Skonfiguruj połączenie z dostawcą programu SMS. Aby uzyskać więcej informacji, zobacz Podstawy dostawcy programu SMS.
SWbemNameValue
Utwórz zestaw wartości do przechowywania danych kontekstowych.Pobieranie dojścia sesji z
SMS_SiteControlFile
klasyGetSessionHandle
.Dodaj dojście sesji do danych kontekstu.
Wywołaj obiekt
RefreshSCF
,SMS_SiteControlFile
aby uzyskać najnowszą kopię pliku kontroli lokacji. Użyj danych kontekstu w wywołaniu.Zapytanie dotyczące zasobu pliku kontroli lokacji, który chcesz zaktualizować przy użyciu danych kontekstowych.
Zaktualizuj zasób przy użyciu danych kontekstowych.
Zatwierdź zmiany w pliku kontroli lokacji przy użyciu metody obiektu
SMS_SiteControlFile
CommitSCF
.Wywołaj metodę obiektu
ReleaseSessionHandle
,SMS_SiteControlFile
aby zwolnić dojście sesji.
Przykład
Poniższy przykład VBScript uzyskuje dostęp do składnika agenta klienta pliku kontroli lokacji i tworzy fikcyjną właściwość, listę właściwości i listę wielu ciągów. Następnie usuwa wprowadzone aktualizacje. W przykładzie pokazano, jak skonfigurować dojście sesji, pobrać plik kontroli lokacji, wykonać zapytanie dotyczące pliku kontroli lokacji, wprowadzić aktualizacje i zatwierdzić zmiany w pliku kontroli lokacji.
W tym przykładzie właściwość LocaleID
jest zapisana na stałe w języku angielskim (USA). Jeśli potrzebujesz ustawień regionalnych dla użytkowników spoza STANÓW Zjednoczonych można pobrać z właściwości klasy WMILocaleID
serwera SMS_Identification.
Aby uzyskać informacje na temat wywoływania przykładowego kodu, zobacz Wywoływanie fragmentów kodu programu Configuration Manager.
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
Przykładowa metoda ma następujące parametry:
Parametr | Wpisać | Opis |
---|---|---|
connection |
- SWbemServices | Prawidłowe połączenie z dostawcą programu SMS. |
siteCode |
- String |
Kod witryny programu Configuration Manager. |
Kompilowanie kodu
Ten przykład języka C# wymaga:
Przestrzenie nazw
System
System.Collections.Generic
System.Collections
System.Text
Microsoft.ConfigurationManagement.ManagementProvider
Microsoft.ConfigurationManagement.ManagementProvider.WqlQueryEngine
Montaż
microsoft.configurationmanagement.managementprovider
adminui.wqlqueryengine
Niezawodne programowanie
Aby uzyskać więcej informacji na temat obsługi błędów, zobacz About Configuration Manager Errors (Informacje o błędach programu Configuration Manager).
Zabezpieczenia programu .NET Framework
Aby uzyskać więcej informacji na temat zabezpieczania aplikacji programu Configuration Manager, zobacz Administracja oparta na rolach programu Configuration Manager.
Zobacz też
Instrumentacja zarządzania systemem Windows
Informacje o pliku kontroli lokacji programu Configuration Manager
Jak odczytać listę właściwości osadzonych plików kontrolek lokacji programu Configuration Manager