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.