密码通知脚本引发"类型不匹配"剩余天数的错误

时间:2016-07-15 19:17:36

标签: vbscript passwords hta

我可以让每个人自己工作,但我不能让他们一起工作,登录脚本使用strArg =来调用HTA文件,HTA文件生成一个密码窗口。当登录脚本运行时,第31和106行的HTA文件出错。

我知道问题出在strArg内,我无法弄明白。它应该在到期标志前的13天通知最终用户。任何帮助都会很棒。目前,由于脚本现在,我收到HTA文件部分的错误:

  

线:31和106
  错误:输入不匹配' strARG'
  代码:0

我确实在下面的链接中打开了这个问题,但这些建议没有解决问题。

vbscript statement mismatch sring failing

Dim oDomain
Dim oUser
Dim maxPwdAge
Dim numDays
Dim warningDays

warningDays = 13

Set LoginInfo = CreateObject("ADSystemInfo")  
Set objUser = GetObject("LDAP://" & LoginInfo.UserName & "")  
strDomainDN = UCase(LoginInfo.DomainDNSName) 
strUserDN = LoginInfo.UserName

Const ADS_UF_DONT_EXPIRE_PASSWD = &h10000
intUserAccountControl = objUser.Get("userAccountControl")
If intUserAccountControl And ADS_UF_DONT_EXPIRE_PASSWD Then
  'WScript.Echo "The password does not expire."
Else
  Set oDomain = GetObject("LDAP://" & strDomainDN)
  Set maxPwdAge = oDomain.Get("maxPwdAge")

  ' Calculate the number of days that are held in this value.
  numDays = CCur((maxPwdAge.HighPart * 2 ^ 32) + _
                  maxPwdAge.LowPart) / CCur(-864000000000)
  'WScript.Echo "Maximum Password Age: " & numDays

  Set oUser = GetObject("LDAP://" & strUserDN)

  whenPasswordExpires = DateAdd("d", numDays, oUser.PasswordLastChanged)
  fromDate = Date
  daysLeft = DateDiff("d", fromDate, whenPasswordExpires)

  'WScript.Echo "Password Last Changed: " & oUser.PasswordLastChanged

  If (daysLeft < warningDays) And (daysLeft > -1) Then
    strCMD =  "\\domain\netlogon\PwExpChk\PWReminder.hta" & " -" & intDaysRemaining 
    Set wshShell = CreateObject("WScript.Shell")
    RC = WshShell.Run(strCMD , 0, False)
  End If
End If

Set oUser = Nothing
Set maxPwdAge = Nothing
Set oDomain = Nothing
Set wshShell = Nothing 

HTA档案:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Password Reminder</title>
<hta:application
  border="thin
  borderstyle="normal"
  caption="Password Reminder"
  contextmenu="yes"
  maximizebutton="Yes"
  minimizebutton="no"
  navigable="yes"
  scroll="no"
  selection="yes"
  showintaskbar="yes"
  singleinstance="yes"
  sysmenu="Yes"
  WINDOWSTATE="normal"
  id="objPasswordHTA">

<script language="vbscript">
Sub Window_onLoad
  strArg = 13

  arrCommands = Split(objPasswordHTA.commandLine, "-")
  If UBound(arrCommands) > 0 Then
    strArg = arrCommands(UBound(arrCommands))
  End If

  'setup the window size depending on how many days remain
  strArg = strArg * 1
  If strArg <= 5 Then
    self.MoveTo 200,50
    window.ResizeTo 1000,850

    Set wshShell = CreateObject("WScript.Shell")
    wshShell.AppActivate "Password Reminder"
    wshShell.SendKeys "% x"  ' ALT+SPACE+X = windows maximize, must be enabled on hta
                             ' ALT+SPACE+N = windows minimize, must be enabled on hta
                             ' ALT+SPACE+R = windows restore
  ElseIf strArg <= 10 Then
    self.MoveTo 200,50
    window.ResizeTo 900,750
  Else
    self.MoveTo 200,50
    window.ResizeTo 750, 575
  End If
End Sub
</script>
</head>

<body>
<table cellspacing="0" cellpadding="0" width="100%" bgcolor=Silver>
  <tbody>
    <tr>
      <td valign="top" width="80%">
        <p style="PADDING-TOP: 8px; PADDING-LEFT: 8px; margin-top: 0px">
        <font face="Verdana" color="White" style="font-size: 11pt"><strong>Company name</strong></font><br />
        <font face="Verdana" color="Black" size="5"><strong>Password Reset Reminder</strong></font>
        <p>
      </td>
      <td valign="bottom" width="50%">
        <img src='\\domain\netlogon\PwExpChk\logo.jpg' width='451' height='170' style="vertical-align:bottom;">
      </td>
    </tr>
  </tbody>
</table>

<span id=DataArea></span>

<script language="vbscript">
Set wshNetwork    = reateObject("WScript.Network")
Set wshShell      = CreateObject("Wscript.Shell")

'TableMsgs:
strDaysLeftMsg1  = "We have detected that your password will expire in"
strDaysLeftMsg2  = "day(s) or less."
strPWCriteriaMsg = "<BR>Password criteria:" & _
                   "<BR> - 8 characters or longer" & _
                   "<BR> - At least one alpha, one numeric, and one special character" & _
                   "<BR> - Cannot be an old password" & _
                   "<BR> - Passwords ARE CaSe SeNsItIvE!!!" & _
                   "<BR>"

strArg = 13
arrCommands = Split(objPasswordHTA.commandLine, "-")
If UBound(arrCommands) > 0 Then
  strArg = arrCommands(UBound(arrCommands))
  strArg = strArg * 1
End If
intDaysLeftonPW = strArg

'Generate the HTML for the table
strTableHTML = "<TABLE align=center width=75%>"

If intDaysLeftonPW <= 5 Then
  strTableHTML = strTableHTML & "<font size=5>"
  strTableHTML = strTableHTML & "<TR bgcolor=Red><TD>&nbsp;</TD></TR>"
  strTableHTML = strTableHTML & "<TR><TD><font size=5>" & strDaysLeftMsg1 & "<font color=Red><b> " & intDaysLeftonPW & _
                 "</b></font> " & strDaysLeftMsg2 & "</font>" & _
                 "<BR>" & _
                 "<BR>Please reset your password now to avoid getting locked out or expiring. " & _
                 "The only way to unlock an expired password is to contact Help Desk. " & _
                 "A typical expired password request takes 15-20 minutes.</TD></TR>"
  strTableHTML = strTableHTML & "<TR bgcolor=Red><TD>&nbsp;</TD></TR>"
  strTableHTML = strTableHTML & "<TR><TD>" & strPWCriteriaMsg & "</TD></TR>"
  strTableHTML = strTableHTML & _
                 "<TR><TD><BR><font color=red>To reset password:</font>" & _
                 "<BR>1. Press CTRL+ALT+DELETE" & _
                 "<BR>2. Select " & Chr(34) & "Change a Password..." & Chr(34) & _
                 "<BR>3. Complete the password reset wizard." & _
                 "<BR>" & _
                 "<BR>Caution: There are no grace logons. Expired passwords will not be allowed onto " & _
                 "the network.</TD></TR>"
  strTableHTML = strTableHTML & "</font>"
ElseIf intDaysLeftonPW <= 10 Then
  strTableHTML = strTableHTML & "<TR bgcolor=yellow><TD>&nbsp;</TD></TR>"
  sTRTableHTML = strTableHTML & _
                 "<TR><TD>" & strDaysLeftMsg1 & "<font color=Red><b> " & intDaysLeftonPW & _
                 "</b></font> " & strDaysLeftMsg2 & "</TD></TR>"
  strTableHTML = strTableHTML & "<TR bgcolor=Yellow><TD>&nbsp;</TD></TR>"
  strTableHTML = strTableHTML & "<TR><TD>" & strPWCriteriaMsg & "</TD></TR>"
  strTableHTML = strTableHTML & _
                 "<TR><TD><BR>To reset password:" & _
                 "<BR>1. Press CTRL+ALT+DELETE" & _
                 "<BR>2. Select " & Chr(34) & "Change a Password..." & Chr(34) & _
                 "<BR>3. Complete the password reset wizard." & _
                 "<BR>" & _
                 "<BR>Tip: Try to avoid resetting passwords on Friday and reset early in " & _
                 "the week. This will give you more opportunities to sign in and get used to the new password " & _
                 "so you do not forget over the weekend.</TD></TR>"
Else
  strTableHTML = strTableHTML & "<TR bgcolor=Green><TD>&nbsp;</TD></TR>"
  strTableHTML = strTableHTML & _
                 "<TR><TD>" & strDaysLeftMsg1 & "<font color=Red><b> " & intDaysLeftonPW & _
                 "</b></font> " & strDaysLeftMsg2 & "</TD></TR>"
  strTableHTML = strTableHTML & "<TR bgcolor=Green><TD>&nbsp;</TD></TR>"
  strTableHTML = strTableHTML & "<TR><TD>" & strPWCriteriaMsg & "</TD></TR>"
  strTableHTML = strTableHTML & _
                 "<TR><TD><BR>Please press CTRL+ALT+DELETE and select Change a Password..." & _
                 "</TD></TR>"
End If

'Add the dynamic HTML to the table/HTA
strTableHTML = strTableHTML & "</TABLE>"
DataArea.InnerHTML = strTableHTML
</script>
</body>
</html>

1 个答案:

答案 0 :(得分:0)

有你的罪魁祸首:

strCMD =  "\\domain\netlogon\PwExpChk\PWReminder.hta" & " -" & intDaysRemaining
'                                                              ~~~~~~~~~~~~~~~~

您永远不会在代码中的任何位置定义intDaysRemaining,因此变量为空,这意味着您的命令行如下所示:

\\domain\netlogon\PwExpChk\PWReminder.hta -

-拆分此命令行会在最后一个字段中为您提供一个空字符串数组,这会引发您在尝试将空字符串与1相乘时观察到的错误。

演示:

>>> cmdline = "\\domain\netlogon\PwExpChk\PWReminder.hta -"
>>> a = Split(cmdline, "-")
>>> v = a(UBound(a))
>>> WScript.Echo "_" & v & "_"
__
>>> i = v * 1
Type mismatch (0xD)

如果您将Option Explicit添加到VBScript中,或者至少在调试(MsgBox objPasswordHTA.commandLine)时在HTA中回应命令行,那么您会立即发现这一点。