VBScript/HTA Help! run command line on click

Hello,

I'm trying to make an hta that will unlock a users account using joeware's unlock tool. It's an EXE that you run in cmd and give it an attribute. "Unlock.exe unlock . username"

I have been able to get it to open a command window, but now put in the unlock.exe unlock . username with the following code

Sub cmdSubmit
    Const NORMAL_WINDOW = 1
    Set objShell = CreateObject("Shell.Application")
    objShell.ShellExecute "cmd.exe", "%userprofile%\appdata\local\microsoft\windows sidebar\gadgets\teepe.gadget\EXE\Unlock.exe unlock . name", , , NORMAL_WINDOW
End Sub

Any help would be greatly appreciated. Below is my whole code.


<html>
 
<head>
   <title>Woot</title>
 
    <style>
        body
        {
            width: 129;
            height: 203;
            padding: 0;
            margin: 0;
            background-image: url(../IMG/background.png);
            background-repeat: no-repeat;
        }
    .style1 {
	color: #FFFFFF;
	font-family: Calibri;
	font-weight: bold;
	font-size: 11px;
}
    .style2 {
	color: #FFFFFF;
	font-family: Calibri;
	font-weight: bold;
	font-size: 14px;
}
    .style3 {
	color: #FFFFFF;
	font-family: Calibri;
	font-weight: bold;
	font-size: 5px;
}
    </style>
</head>
<body>
<table width='116' border='0' cellspacing='0' cellpadding='0' style='padding-left:10px'>
<tr>
<td>
<div align='center' class='style2'>
  <p><b> Locked Accounts</b></p>
</div></td>
</tr>
<tr>
<td>
<span class="style3"><br></span>
<span class='style1'>
 
 
<script Language="VBScript">
Sub cmdSubmit
    Const NORMAL_WINDOW = 1
    Set objShell = CreateObject("Shell.Application")
    objShell.ShellExecute "cmd.exe", "%userprofile%\appdata\local\microsoft\windows sidebar\gadgets\teepe.gadget\EXE\Unlock.exe unlock . document.test.name.value", , , NORMAL_WINDOW
End Sub
 
	   On Error Resume Next 
 
	   Const ADS_SCOPE_SUBTREE = 2 
 
	   Set objConnection = CreateObject("ADODB.Connection") 
	   Set objCommand =   CreateObject("ADODB.Command") 
 
	   objConnection.Provider = "ADsDSOObject" 
	   objConnection.Open "Active Directory Provider" 
 
	   Set objCommand.ActiveConnection = objConnection 
 
	   objCommand.Properties("Page Size") = 1000 
	   objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE 
	   objCommand.CommandText = _ 
	      "SELECT distinguishedName FROM 'LDAP://dc=,dc=,dc=,dc=com' WHERE objectCategory='user'" 
 
	   Set objRecordSet = objCommand.Execute 
	   objRecordSet.MoveFirst 
 
	   Do Until objRecordSet.EOF 
	   strDN = objRecordset.Fields("distinguishedName").Value 
	   Set objUser = GetObject ("LDAP://" & strDN) 
	   strislocked = objuser.isAccountlocked 
	   straccount = objuser.displayName
	   straccount2 = objuser.samAccountName
  	     If strislocked = True Then 
            document.write "<FORM style='margin: 0;' name='test'><input style='margin: 0;' name='name' type='hidden' id='name' value='"+straccount2+"'>"+ straccount +" <a style='margin: 0;' href='#' onclick='cmdSubmit()'>Out</a></form>"
			objRecordSet.MoveNext
 	     Else 
	        objrecordset.MoveNext 
		End If
	   Set objuser = Nothing 
	   Loop 
</script>
</span>
</td>
</tr>
</table>
</body>
</html>

Open in new window

teepesAsked:
Who is Participating?
 
RobSampsonConnect With a Mentor Commented:
Hi, you could have also changed this:
    objShell.ShellExecute "cmd.exe", "%userprofile%\appdata\local\microsoft\windows sidebar\gadgets\teepe.gadget\EXE\Unlock.exe unlock . document.test.name.value", , , NORMAL_WINDOW

to this
    objShell.Run "cmd.exe /c ""%userprofile%\appdata\local\microsoft\windows sidebar\gadgets\teepe.gadget\EXE\Unlock.exe"" unlock " & document.test.name.value, 1, True

as long as document.test.name.value returned the username.

Regards,

Rob.
0
 
sj_hicksCommented:
A couple options:
1)  Run unlock.exe directly, rather than using CMD.exe
2)  Use the /C (runs unlock then closes cmd): cmd /c unlock.exe....
3)  Use the /K (runs unlock then leaves cmd open): cmd /c unlock.exe....
4)  If this doesn't work, use WScript.Shell.Run:
oShell = CreateObject("WScript.Shell")
oShell.Run <command line>, 1, true

0
 
teepesAuthor Commented:
i figured it out. I just made a batch file that i point to, and carry the variable over using the %1.
0
Cloud Class® Course: SQL Server Core 2016

This course will introduce you to SQL Server Core 2016, as well as teach you about SSMS, data tools, installation, server configuration, using Management Studio, and writing and executing queries.

 
teepesAuthor Commented:
well i got everything working the only problem is that when i have it in my sidebar and click unlock, it unlocks the person but also opens another application window. Any idea on how to make it stop?
0
 
teepesAuthor Commented:
almost forgot here is the code

<html>
<head>
<hta:application
id="Locked Users"
applicationname="Locked Users"
border="dialog"
SCROLL="no"
caption="yes"
showintaskbar="yes"
singleinstance="yes"
sysmenu="yes"
>
   <title>Woot</title>
   <style>
        body
        {
            width: 129;
            height: 203;
            padding: 0;
            margin: 0;
            background-image: url(../IMG/background.png);
            background-repeat: no-repeat;
        }
    .style1 {
	color: #FFFFFF;
	font-family: Calibri;
	font-weight: bold;
	font-size: 11px;
}
    .style2 {
	color: #FFFFFF;
	font-family: Calibri;
	font-weight: bold;
	font-size: 14px;
}
    .style3 {
	color: #FFFFFF;
	font-family: Calibri;
	font-weight: bold;
	font-size: 5px;
}
    </style>
</head>
<script Language="VBScript">
Sub Window_OnLoad
		RefreshList
        iTimerID = window.setInterval("RefreshList", 10000)
    End Sub
 
Sub cmdSubmit(strtest)
        Set objShell = CreateObject("Wscript.Shell")
        objShell.Run """%userprofile%\appdata\local\microsoft\windows sidebar\gadgets\teepe.gadget\HTML\unlock.bat""" & strtest
End Sub
Sub RefreshList
	   On Error Resume Next 
 
 		ProcessList.InnerHTML = ""
 	
	   Const ADS_SCOPE_SUBTREE = 2 
 
	   Set objConnection = CreateObject("ADODB.Connection") 
	   Set objCommand =   CreateObject("ADODB.Command") 
 
	   objConnection.Provider = "ADsDSOObject" 
	   objConnection.Open "Active Directory Provider" 
 
	   Set objCommand.ActiveConnection = objConnection 
 
	   objCommand.Properties("Page Size") = 1000 
	   objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE 
	   objCommand.CommandText = _ 
	      "SELECT distinguishedName FROM 'LDAP://dc=,dc=,dc=,dc=com' WHERE objectCategory='user'" 
 
	   Set objRecordSet = objCommand.Execute 
	   objRecordSet.MoveFirst 
 
 		ProcessList.InnerHTML = "<FORM style='margin: 0;' name='test'>"
	   Do Until objRecordSet.EOF 
	   strDN = objRecordset.Fields("distinguishedName").Value 
	   Set objUser = GetObject ("LDAP://" & strDN) 
	   strislocked = objuser.isAccountlocked 
	   straccount = objuser.displayName
	   straccount2 = objuser.samAccountName
  	     If strislocked = True Then 
            ProcessList.InnerHTML = ProcessList.InnerHTML & straccount & " " & " <a style='color:#CCCCCC; margin: 0;' href='#' onclick='vbscript:cmdSubmit(""" & straccount2 & """)'>(Unlock)</a> <br>"
			objRecordSet.MoveNext
 	     Else 
	        objrecordset.MoveNext 
		End If
	   Set objuser = Nothing 
	   Loop
	   ProcessList.InnerHTML = ProcessList.InnerHTML
End Sub
 
</script>
 
<body>
<table width='116' border='0' cellspacing='0' cellpadding='0' style='padding-left:10px'>
<tr>
<td>
<div align='center' class='style2'>
  <p><b> Locked Accounts</b></p>
</div></td>
</tr>
<tr>
<td>
<span class="style3"><br></span>
<span class='style1'>
 
<span id = "ProcessList"></span>
 
</span>
</td>
</tr>
</table>
</body>
</html>

Open in new window

0
 
teepesAuthor Commented:
i got it. I had to take the href out of my onclick. But i have noticed that .hta is not the best thing for vista gadgets. It's a little buggy.
0
 
RobSampsonCommented:
Good work.  They can be a bit buggy, particular with screen refreshes, but they get the job done...

Rob.
0
 
teepesAuthor Commented:
LOL i totally revamped it to use HTML,VBSCRIPT, JAVASCRIPT, and my EXE's.No .hta. Thanks for all your help it's running great now! Thanks
0
 
teepesAuthor Commented:
Thanks i used your code :)
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.