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.

NVLAN - Consultoria