Jak odczytywać i zapisywać w pliku kontroli lokacji Configuration Manager przy użyciu usługi WMI
W 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 Configuration Manager. |
RefreshSCF |
Odświeża kopię pliku kontroli lokacji w pamięci przy użyciu wszelkich ostatnich zmian z bazy danych 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 kontrolki 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 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 dla witryny Configuration Manager. |
Kompilowanie kodu
Ten przykład języka C# wymaga:
Obszary nazw
System
System.collections.generic
System.collections
System.text
Microsoft. ConfigurationManagement.ManagementProvider
Microsoft. ConfigurationManagement.ManagementProvider.WqlQueryEngine
Zestawu
microsoft.configurationmanagement.managementprovider
adminui.wqlqueryengine
Niezawodne programowanie
Aby uzyskać więcej informacji na temat obsługi błędów, zobacz Informacje o błędach Configuration Manager.
zabezpieczenia .NET Framework
Aby uzyskać więcej informacji na temat zabezpieczania aplikacji Configuration Manager, zobacz Configuration Manager administracja oparta na rolach.
Zobacz też
Instrumentacja zarządzania systemem Windows
Informacje o pliku kontrolki lokacji Configuration Manager
Jak odczytać listę właściwości osadzonych plików kontrolek lokacji Configuration Manager
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla