Tanto WMI e ADSI fornecem uma maneira para que você possa executar um script com credenciais de segurança alternativo, ou seja, ambos permitem que você especifique um nome de usuário e uma senha em que o script será executado. Além disso, essas duas tecnologias oferecem uma maneira de garantir que este nome de usuário e senha são criptografadas, e são
não passou em toda a rede usando o texto claro.
Mais provável que você realmente quer saber é
como executar um script com credenciais de segurança alternativo. Vamos começar dando uma olhada em um script WMI que se conecta a um computador remoto (
atl-ws-01 ) e recupera o nome do sistema operacional instalado no computador. Além disso, ele faz isso através da execução sob o
Administrador da conta, que neste exemplo tem uma senha de
4rTGh2 # 1 :
Const WbemAuthenticationLevelPktPrivacy strComputer = 6 = "atl-ws-01" strNamespace = "root \ cimv2" strUser = "Administrador" strPassword = "4rTGh2 # 1" Set objWbemLocator = CreateObject ("WbemScripting.SWbemLocator") Set objWMIService objwbemLocator.ConnectServer = _ (strComputer, strNamespace, strUser, strPassword) objWMIService.Security_.authenticationLevel = WbemAuthenticationLevelPktPrivacy Set colItems objWMIService.ExecQuery = _ ("Select * From Win32_OperatingSystem") para cada objItem em ColItems strComputer Wscript.Echo & ":" & objItem.Caption Próxima
Como você pode ver, começamos criando uma constante chamada WbemAuthenticationLevelPktPrivacy e atribuindo-lhe o valor 6; este valor será usado para criptografar a comunicação entre nosso computador eo computador remoto. Nós, então, definir quatro variáveis - strComputer, strNamespace, strUser e strPassword – que detêm o nome de nosso computador remoto, o namespace WMI que deseja se conectar, a conta de usuário que deseja executar o script abaixo; ea senha para esse usuário conta.
Neste ponto estamos prontos para conectar ao computador remoto usando essas credenciais alternativas. Isso é o que estas linhas de código faz:
Definir objWbemLocator = CreateObject ("WbemScripting.SWbemLocator") Set objWMIService = objwbemLocator.ConnectServer _ (strComputer, strNamespace, strUser, strPassword) objWMIService.Security_.authenticationLevel = WbemAuthenticationLevelPktPrivacy
Começamos criando uma instância do objeto SWbemLocator, e depois chamar o método ConnectServer. ConnectServer é passado quatro parâmetros, o que só acontecerá a correspondem às quatro variáveis que criamos há pouco. Em seguida, definir oSecurity_authenticationLevel propriedade para WbemAuthenticationLevelPktPrivacy, dando-nos uma ligação mais segura entre os dois computadores.
Daquele ponto em diante, o resto do código é o mesmo código WMI anos você conhece e adora.
Uma observação importante: essa abordagem, em que você executar um script com credenciais alternativas, funciona apenas em máquinas remotas. Por alguma razão, WMI não vai deixar você executar um script com credenciais alternativas no seu próprio computador. Vai entender.
Agora vamos dar uma olhada na versão ADSI deste script. Este script de exemplo liga-se à conta de usuário Ken Myer no Active Directory e nos diz se esta conta está desativada. O script se conecta ao Active Directory usando o fabrikam \ Administrador , que tem uma senha de 4rTGh2 # 1 :
Const ADS_SECURE_AUTHENTICATION = 1 = 2 Const ADS_USE_ENCRYPTION strPath = "LDAP: / / cn = kenmyer, ou = Finance, dc = fabrikam, dc = com" strUser = "fabrikam \ Administrator" strPassword = "4rTGh2 # 1" Set objDSO = GetObject ( "LDAP:") Set objUser = objDSO.OpenDSObject Wscript.Echo _ (strPath, strUser, strPassword, _ ADS_USE_ENCRYPTION OU ADS_SECURE_AUTHENTICATION) objUser.AccountDisabled
Neste script, criamos duas constantes (ADS_SECURE_AUTHENTICATION e ADS_USE_ENCRYPTION) para garantir que as informações transmitidas entre o nosso computador eo domínio é criptografada. Em seguida, criamos três variáveis - strPath, strUser e strPassword – que sediar o ADsPath para o objeto que deseja vincular a no Active Directory (neste caso, a conta de usuário Ken Myer); o nome da conta que deseja usar ao ligar a Active Directory; ea senha para essa conta.
Em seguida, ligar para o provedor LDAP; começamos aqui porque o provedor LDAP aceita ligações anônimas. Tendo conectado ao objeto LDAP, podemos então chamar o método OpenDSObject para vincular a conta do usuário Ken Myer. Note-se que devemos passar OpenDSObject quatro parâmetros: a ADsPath ao objeto do Active Directory, o nome do usuário que deseja usar ao conectar ao Active Directory; a senha para essa conta, e as duas constantes que definimos anteriormente. Tal como acontece com WMI, assim que fazer a conexão, o resto do script é o mesmo que qualquer script ADSI outros.
By the way, OpenDSObject também funciona com contas de usuário local; a principal diferença é que você ligar para o provedor WinNT em vez do provedor LDAP (e, claro, o ADsPath será diferente). Aqui estão as linhas relevantes do código de um script que se conecta a um computador local:
strComputer = "WinNT: / / atl-ws-01" strUser = "Administrador" strPassword = "4rTGh2 # 1" Set objDSO = GetObject ("WinNT:") Set objComputer objDSO.OpenDSObject = _ (strComputer, strUser, strPassword, _ ADS_SECURE_AUTHENTICATION OU ADS_USE_ENCRYPTION)
Uma coisa que devemos acrescentar é que nós não recomendamos que você codificar senhas (passwords especialmente Administrator) em seus scripts. Em vez disso, você deve fazer concessões para digitar a senha como um argumento de linha de comando ou através de uma caixa de entrada ou o que funciona melhor para você.