Compartilhe que você está se especializando

Aqui falaremos sobre como evoluir scripts, que necessitam de interação, para criar uma interface mais amigável usando um arquivo HTA. Esse tipo de solução é tão útil que a própria Microsoft utiliza arquivos HTA para diversos fins (como, por exemplo, na instalação de seus produtos como o SCCM), tentaremos apenas abordar um exemplo para demonstrar algumas das possibilidades.

Para se ter uma idéia do que é possível fazer, criamos um hta de exemplo. Crie um arquivo .HTA em seu desktop (se possível, utilize o Notepad++ para manter as quebras das linhas) com o seguinte conteúdo (altere a parte em cinza pelo distinguished name do seu domínio, se não souber como obter o distinguished name consulte aqui ou nas referências, abaixo):

<head><title>List Users</title>
<HTA:APPLICATION APPLICATIONNAME="List Users" SCROLL="no" SINGLEINSTANCE="yes" > </head>
<body background = "http://portaldobibliotecario.com/wp-content/uploads/2017/02/portal-do-bibliotecario-seguranca-da-informacao.jpg">
   <P style="color:Black">Selecione a Unidade: <select size="0" TABINDEX="3" width='40' TABINDEX="2" name="OUList" onChange="ImportObjects()"></select><br><br>   
   </P>
   <P style="color:Black">Lista dos usuarios: <Select size="0" TABINDEX="4" width='40' TABINDEX="2" class='input' name="PCList"></select><br><br></P>
   <span id="MachineTotal">
      <P style="color:Black">Outras (possiveis) opcoes de INPUT:</P>
      <select size="3" name="MultiListbox" multiple>
         <option value="1">Option 1</option> 
         <option value="2">Option 2</option> 
         <option value="3">Option 3</option> 
      </select> 
      <P></P> 
      <input type="checkbox" name="Checkbox1"> Checkbox 1 
      <input type="checkbox" name="Checkbox2"> Checkbox 2 
      <P></P> 
      <BR><input type="radio" name="RadioOption" value="1">Option 1 
      <BR><input type="radio" name="RadioOption" value="2">Option 2 
      <BR><input type="radio" name="RadioOption" value="3">Option 3 
      <P> 
</body> 
<script language='vbs'> 
Sub Window_onLoad 
   window.resizeTo 800,600 
End Sub 
Sub EnumOUs(objParent, strOffset) 
   on error resume next 
   objParent.Filter = Array("organizationalUnit") 
   If Not objParent.OU="" Then 
      Set objOption = Document.createElement("Option") 
      objOption.Text = strOffSet & objParent.OU 
      objOption.Value = objParent.Distinguishedname 
   End If 
   For Each objChild In objParent 
      objChild.Filter = Array("organizationalUnit") 
      If Not objChild.OU="" Then 
         Set objOption = Document.createElement("Option") 
         objOption.Text = strOffSet & objChild.OU 
         objOption.Value = objChild.Distinguishedname 
         OUList.Add objOption 
      End If 
   Next 
End Sub 
Sub ImportObjects 
   Call ClearPCList 
   On Error Resume Next 
   Set objConnection = CreateObject("ADODB.Connection") 
   Set objCommand = CreateObject("ADODB.Command") 
   objConnection.Provider = "ADsDSOObject" 
   objConnection.Open "Active Directory Provider" 
   objConnection.Cursorlocation=3 
   Set objCommand.ActiveConnection = objConnection 
   objCommand.Properties("Page Size") = 1000 
   OUtoImport=OUList.Value 
   objCommand.CommandText = "<LDAP://" & OUtoImport & ">;(objectClass=user);AdsPath, Description, name;subtree" 
   Set objRecordSet = objCommand.Execute 
   If objRecordSet.RecordCount = 0 Then 
      MsgBox "no found",64 
      MachineTotal.InnerHTML="user objects: 0" 
      PCList.Disabled=True 
   Exit Sub 
   Else 
      PCList.Style.Visibility="Visible" 
   End If 
   objRecordSet.MoveFirst 
   objRecordSet.Sort="Name" 
   Do Until objRecordSet.EOF 
      strDescription = "" 
      If isnull(objRecordSet.Fields("Description")) Then 
      Else 
         For Each strLine In objRecordSet.Fields("description").Value 
            strDescription = strDescription & strLine 
         Next 
         strDescription = "(" & strDescription & ")" 
      End If 
      on error goto 0 
      Set objOption = Document.createElement("Option") 
      objOption.Text = objRecordSet.Fields("Name") & " " & strDescription 
      objOption.Value = objRecordSet.Fields("Name") 
      PCList.Add objOption 
      objRecordSet.MoveNext 
   Loop 
   MachineTotal.InnerHTML = PCList.Length - 1 & " Usuário(s)" 
   PCList.Disabled=False 
End Sub 
Sub ClearPCList 
   For Each objOption in PCList.Options 
      objOption.RemoveNode 
   Next 
   Set objOption = Document.createElement("Option") 
   objOption.Text = "Usuarios Encontrados" 
   objOption.Value = "Usuarios Encontrados" 
   PCList.Add objOption 
End Sub 
Set objOption = Document.createElement("OPTION") 
objOption.Text = "Selecione a OU" 
objOption.Value ="Selecione a OU" 
OUList.Add(objOption) 
PCList.Disabled=True 
Set objOption = Document.createElement("OPTION") 
objOption.Text = "Usuarios Encontrados" 
objOption.Value ="Usuarios Encontrados" 
PCList.Add(objOption) 
Call EnumOUs(GetObject("LDAP://DC=SEUDOMINIO,DC=COM,DC=BR"), "") 
</script>

Depois de salvar, execute o arquivo hta e verifique um simples exemplo do que é possível ser feito.

Fontes/Referências

NVLAN – Como obter o Distinguished Name (DN) no Active Directory

Mais Informações

Esperamos ter te ajudado e estaremos sempre a disposição para mais informações.

Se você tem interesse em algum assunto específico, tem alguma dúvida, precisa de ajuda, ou quer sugerir um post, entre em contato conosco pelo e-mail equipe@nvlan.com.br.

NVLAN - Consultoria