Conexión a un proveedor de SMS en Configuration Manager mediante WMI
Antes de conectarse al proveedor de SMS para un servidor de sitio de Configuration Manager local o remoto, primero debe buscar el proveedor de SMS para el servidor de sitio. El proveedor de SMS puede ser local o remoto para el servidor de sitio Configuration Manager que usa. La clase SMS_ProviderLocation
Instrumental de administración de Windows (WMI) está presente en todos los servidores de sitio Configuration Manager y una instancia contendrá la ubicación del servidor de sitio Configuration Manager que está usando.
Puede conectarse al proveedor de SMS en un servidor de sitio Configuration Manager mediante el objeto SWbemLocator de WMI o mediante el método Host GetObject
de script de Windows. Ambos enfoques funcionan igualmente bien en conexiones locales o remotas, con las siguientes limitaciones:
Debe usar
SWbemLocator
si necesita pasar las credenciales de usuario a un equipo remoto.No se puede usar
SWbemLocator
para pasar explícitamente las credenciales de usuario a un equipo local.Hay varias sintaxis diferentes que puede usar para realizar la conexión, en función de si la conexión es local o remota. Después de conectarse al proveedor de SMS, tendrá un objeto SWbemServices que se usará para acceder a Configuration Manager objetos.
Nota:
Si necesita agregar calificadores de contexto para la conexión, vea Cómo agregar un calificador de contexto de Configuration Manager mediante WMI.
Para conectarse a un proveedor de SMS
Obtenga un objeto WbemScripting.SWbemLocator .
Establezca el nivel de autenticación en privacidad de paquetes.
Configure una conexión con el proveedor de SMS mediante el método ConnectServer del objeto SWbemLocator. Proporcione credenciales solo si es un equipo remoto.
Con la propiedad ProviderForLocalSite del objeto SMS_ProviderLocation, conéctese al proveedor de SMS para el equipo local y reciba un objeto SWbemServices.
Use el objeto SWbemServices para acceder a los objetos del proveedor. Para obtener más información, vea Introducción a los objetos.
Ejemplos
En el ejemplo siguiente se conecta al servidor. A continuación, intenta conectarse al proveedor de SMS para ese servidor. Normalmente, este será el mismo equipo. Si no es así, SMS_ProviderLocation proporciona el nombre de equipo correcto.
Para obtener información sobre cómo llamar al código de ejemplo, vea Llamar a fragmentos de código de Configuration Manager.
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
El ejemplo siguiente se conecta al servidor remoto mediante PowerShell e intenta una conexión SMS.
$siteCode = ''
$siteServer = 'server.domain'
$credentials = Get-Credential
$username = $credentials.UserName
# The connector does not understand a PSCredential. The following command will pull your PSCredential password into a string.
$password = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto([System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($credentials.Password))
$NameSpace = "root\sms\site_$siteCode"
$SWbemLocator = New-Object -ComObject "WbemScripting.SWbemLocator"
$SWbemLocator.Security_.AuthenticationLevel = 6
$connection = $SWbemLocator.ConnectServer($siteServer,$Namespace,$username,$password)
Compilar el código
Este ejemplo de C# requiere:
Comentarios
El método de ejemplo tiene los parámetros siguientes:
Parámetro | Tipo | Descripción |
---|---|---|
connection |
-Administrado: WqlConnectionManager - VBScript: SWbemServices |
|
Una conexión válida al proveedor de SMS. | ||
taskSequence |
-Administrado: IResultObject -Vbscript: SWbemObject |
Secuencia de tareas válida (SMS_TaskSequence). |
taskSequenceXML |
-Administrado: String -Vbscript: String |
Xml de secuencia de tareas válido. |
Programación sólida
Para obtener más información sobre el control de errores, consulte Acerca de los errores de Configuration Manager.
Seguridad de .NET Framework
El uso de script para pasar el nombre de usuario y la contraseña supone un riesgo de seguridad y se debe evitar siempre que sea posible.
En el ejemplo anterior se establece la autenticación en privacidad de paquetes. Este es el mismo proveedor de SMS administrado.
Para obtener más información sobre la protección de aplicaciones Configuration Manager, consulte Configuration Manager administración basada en roles.
Consulta también
Aspectos básicos del proveedor de SMS
Cómo agregar un calificador de contexto de Configuration Manager mediante WMI
Instrumental de administración de Windows