无法使用VBS Txt文件变量

时间:2016-06-22 12:53:24

标签: vbscript

嘿我想在我的VBS脚本中使用txt文件的日期,我到目前为止是:

Do while not f.AtEndOfLine
Zeile = f.readLine
Feld = split(Zeile,",")
Benutzer = Feld(0)
Gruppe = Feld(1)
Nachname = Feld(2)
Passwort = Feld(3)
ScriptP = Feld(4)
Projekt = Feld(5)
Datum = Feld(6)
Call BenuntzerAnlegen(Benutzer,Gruppe,Nachname,Passwort,ScriptP)
Loop

并且它的功能如此之大但日期并没有像这样写:DD / MM / YYYY在txt示例中:AJWKW24Sr1fe,Polo,Rsafa,AMam140981,AJWTN_Logon.cmd,23.06.2016,AJW

我想用它:

Sub BenuntzerAnlegen (Benutzer,Gruppe,Nachname,Passwort,ScriptP)
Dim ouo, b
Set ouo = GetObject("LDAP://OU=Gruppinsr,DC=ipcenter,DC=local")
Set b = ouo.Create("user", "CN=" & Gruppe & " " & Nachname)
Dim WshShell, ret
Set WshShell = WScript.CreateObject("WScript.Shell")
set objUser = GetObject("LDAP://OU=Gruppinsr,DC=ipcenter,DC=local")


b.Put "sAMAccountName", Benutzer
b.Put "userPrincipalName", Benutzer & "@ipcenter.local"
b.Put "scriptPath", ScriptP
b.SetInfo
b.SetPassword Passwort
b.AccountDisabled = False
b.AccountExpirationDate = Datum
b.SetInfo

但它不起作用它继续告诉我缺少字符串或"类型不匹配"

2 个答案:

答案 0 :(得分:1)

VBScript日期函数(CDate(x到日期),FormatDateTime(日期到字符串),...)取决于区域设置和区域设置。此

Option Explicit

Dim aD : aD = Split("01.02.2016 2/1/2016")
Dim aL : aL = Split("en-us de_de")
Dim sd, sl, dd, fd, b
For Each sd In aD
    For Each sl in aL
           SetLocale sl
        On Error Resume Next
           dd = CDate(sd)
           If Err.Number Then
              dd = "ERROR " & Err.Number
              fd = dd
              b  = False
           Else
              fd = FormatDateTime(dd)
              b  = (#2/1/2016# = dd)
           End If
        On Error GoTo 0
           WScript.Echo Join(Array(sl, GetLocale, sd, dd, fd, CStr(b)), vbTab)
    Next
Next

输出:

cscript 37968649.vbs
en-us   1033    01.02.2016      ERROR 13        ERROR 13        False
de_de   1031    01.02.2016      01.02.2016      01.02.2016      True
en-us   1033    2/1/2016        2/1/2016        2/1/2016        True
de_de   1031    2/1/2016        02.01.2016      02.01.2016      False

如果输入字符串的格式与当前语言环境不匹配,则证明CDate失败(通常是静默)。所以打电话

dtDatum = CDate(Feld(6))

当de_de(de-de?)处于活动状态时,应该为德语格式的字符串提供正确的日期。

<强> P.S:

该行

b.AccountExpirationDate = Datum

'works',因为Datum是一个全局变量;所以通过参数传递它是一种更好的做法,但不能解决“类型不匹配”问题。

更新评论:

如果您的语言环境是非德语,并且您将日期字符串“23.06.2016”提供给VBScript的日期函数,则会出现错误:

>> WScript.Echo GetLocale()
>> d = CDate("23.06.2016")
>>
1033
Error Number:       13
Error Description:  Type mismatch

因此,使用德语语言环境解析输入文件。

或者,您可以在文件中使用amarican格式。

答案 1 :(得分:0)

如果我清楚地了解您的要求,您希望日期为 23/06/2016 ,而不是 23.06.2016 。如果是这样,只需更改以下行:

Datum = Feld(6)

到此:

Datum = Replace(Feld(6), ".", "/")

然后您需要将 Datum 传递给您正在调用的子组,如下所示:

Call BenuntzerAnlegen(Benutzer,Gruppe,Nachname,Passwort,ScriptP,Datum)

你的Sub应该是这样的:

Sub BenuntzerAnlegen (Benutzer,Gruppe,Nachname,Passwort,ScriptP,Datum)  

另外,根据您的示例数据:

AJWKW24Sr1fe,Polo,Rsafa,AMam140981,AJWTN_Logon.cmd,23.06.2016,AJW

基准将 Feld(5) ,而不是 Feld(6) 。所以改变它。