嘿我想在我的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
但它不起作用它继续告诉我缺少字符串或"类型不匹配"
答案 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)
。所以改变它。