Como se conectar a um provedor de SMS no Configuration Manager usando o WMI
Antes de se conectar ao Provedor de SMS para um servidor de site de Configuration Manager local ou remoto, primeiro você precisa localizar o Provedor de SMS para o servidor do site. O Provedor de SMS pode ser local ou remoto para o servidor de site Configuration Manager que você está usando. A classe SMS_ProviderLocation
WMI (Instrumentação de Gerenciamento do Windows) está presente em todos os servidores de site Configuration Manager e uma instância conterá o local do Configuration Manager servidor de site que você está usando.
Você pode se conectar ao Provedor de SMS em um servidor de site Configuration Manager usando o objeto WMI SWbemLocator ou usando o método Host GetObject
de Script do Windows. Ambas as abordagens funcionam igualmente bem em conexões locais ou remotas, com as seguintes limitações:
Você deve usar
SWbemLocator
se precisar passar credenciais de usuário para um computador remoto.Você não pode usar
SWbemLocator
para passar explicitamente as credenciais do usuário para um computador local.Há várias sintaxes diferentes que você pode usar para fazer a conexão, dependendo se a conexão é local ou remota. Depois de estar conectado ao Provedor de SMS, você terá um objeto SWbemServices que você usará para acessar Configuration Manager objetos.
Observação
Se você precisar adicionar qualificadores de contexto para a conexão, consulte Como adicionar um qualificador de contexto de Configuration Manager usando o WMI.
Para se conectar a um provedor de SMS
Obtenha um objeto WbemScripting.SWbemLocator .
Defina o nível de autenticação como privacidade de pacotes.
Configure uma conexão com o Provedor de SMS usando o método ConnectServer do objeto SWbemLocator. Forneça credenciais somente se for um computador remoto.
Usando o objeto SMS_ProviderLocation propriedade ProviderForLocalSite , conecte-se ao Provedor de SMS para o computador local e receba um objeto SWbemServices.
Use o objeto SWbemServices para acessar objetos do provedor. Para obter mais informações, consulte Visão geral de objetos.
Exemplos
O exemplo a seguir se conecta ao servidor. Em seguida, ele tenta se conectar ao Provedor de SMS para esse servidor. Normalmente, este será o mesmo computador. Se não for, SMS_ProviderLocation fornecerá o nome correto do computador.
Para obter informações sobre como chamar o código de exemplo, consulte Chamando Configuration Manager Snippets de Código.
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
O exemplo a seguir se conecta ao servidor remoto usando o powerShell e tenta uma conexão 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)
Compilando o código
Este exemplo de C# requer:
Comments
O método de exemplo tem os seguintes parâmetros:
Parâmetro | Tipo | Descrição |
---|---|---|
connection |
-Gerenciado: WqlConnectionManager - VBScript: SWbemServices |
|
Uma conexão válida com o provedor de SMS. | ||
taskSequence |
-Gerenciado: IResultObject -Vbscript: SWbemObject |
Uma sequência de tarefas válida (SMS_TaskSequence). |
taskSequenceXML |
-Gerenciado: String -Vbscript: String |
Uma XML de sequência de tarefas válida. |
Programação robusta
Para obter mais informações sobre o tratamento de erros, consulte Sobre erros de Configuration Manager.
Segurança do .NET Framework
Usar script para passar o nome de usuário e a senha é um risco de segurança e deve ser evitado sempre que possível.
O exemplo anterior define a autenticação como privacidade de pacotes. Esse é o mesmo provedor de SMS gerenciado.
Para obter mais informações sobre como proteger aplicativos Configuration Manager, consulte Configuration Manager administração baseada em função.
Confira também
Fundamentos do Provedor de SMS
Como adicionar um qualificador de contexto de Configuration Manager usando o WMI
Instrumentação de gerenciamento do Windows