2016-07-15 3 views
0

私はそれぞれ単独で動作させることができますが、一緒に動作させることはできません。ログオンスクリプトはstrArg =を使用してHTAファイルを呼び出します。 HTAファイルはパスワードウィンドウを生成します。ログオンスクリプトが実行されると、31行目と106行目にHTAファイルのエラーが出力されます。残りの日数の「タイプミスマッチ」エラーを発生させるパスワード通知スクリプト

問題はstrArgにあると私は理解できません。有効期限が切れる前の13日にエンドユーザに通知する必要があります。どんな助けも素晴らしいだろう。スクリプトは、今あるとして、現在、私は、HTAファイルの一部でエラーが発生します。

Line: 31 and 106
Error: Type Mismatch 'strARG'
code: 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> 
+0

[vbscriptステートメントの不一致が失敗しました]の複製があります。(http://stackoverflow.com/questions/38386289/vbscript-statement-mismatch-sring-failing) – dbmitch

+0

私は過去3日間12時間を費やしました。 VBscriptが不一致タイプの文字列エラーであるようになりました。 strArg = 13 arrCommands = Split(objPasswordHTA.commandLine、 " - ") UBound(arrCommands)> 0の場合、 strArg = arrCommands(Ubound(arrCommands)) 終了場合 –

+0

つまり、引数を正しく記述できません。 –

答えて

0

あなたの犯人があります:

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

あなたはどこでもあなたのコード内のintDaysRemainingを定義することはありませんので、変数が空です、あなたのコマンドラインは次のようになります:

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

-で分割このコマンドラインはあなたの順番であなたは1

デモンストレーションで空の文字列をmultiplicateしようとすると、観測エラーを発生させ、最後のフィールド、空の文字列の配列を与えます:

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

あなたはすぐにこの発見いるだろうあなたのVBScriptにOption Explicitを追加、または(MsgBox objPasswordHTA.commandLine)をデバッグするときに、少なくともあなたのHTAでコマンドラインをエコーするために気にしていました。

関連する問題