密码通知脚本引发剩余天数"type mismatch"错误



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

我知道问题出在strArg,我无法弄清楚。它应该在到期前 13 天通知最终用户。任何帮助都会很棒。目前,就像现在的脚本一样,HTA 文件部分出现错误:

线路: 31 和 106
错误:类型不匹配"strARG"
代码: 0

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

VBScript 语句不匹配环失败

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 =  "\domainnetlogonPwExpChkPWReminder.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='\domainnetlogonPwExpChklogo.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>

有你的罪魁祸首:

strCMD =  "\domainnetlogonPwExpChkPWReminder.hta" & " -" & intDaysRemaining
'                                                              ~~~~~~~~~~~~~~~~

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

\\
domainetlogon\PwExpChk\PWReminder.hta -

- 处拆分此命令行会给你一个数组,最后一个字段中有一个空字符串,这反过来又会引发你在尝试将空字符串乘以 1 时观察到的错误。

示范:

>>> cmdline = "\\domainetlogon\PwExpChk\PWReminder.hta -">>> a = Split(cmdline, "-")>>> v = a(UBound(a))>>> WScript.Echo "_" & v & "_"__>>> i = v * 1类型不匹配 (0xD)

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

相关内容

最新更新