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