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”></div> <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 ajudado da melhor forma possível e estaremos sempre a disposição para mais informações.
Entre em contato conosco pelo e-mail equipe@nvlan.com.br.