Jag skulle vilja spara informationen som denna kod ger till
en textfil. Men vet inte hur? Kan nån hjälpa mig?!
Set objDomain = GetObject("WinNT://VNS" & strDomain)
objDomain.Filter = Array("user")
For each objUser in objDomain
objUser.GetInfo
WScript.echo objUser.Name & ", " & objUser.LoginScript
Next
Set objDomain = GetObject("WinNT://VNS" & strDomain)
objDomain.Filter = Array("user")
For each objUser in objDomain
objUser.GetInfo
WScript.echo objUser.Name & ", " & objUser.LoginScript
Set fs = CreateObject("Scripting.FileSystemObject")
Set a = fs.CreateTextFile("f:\testfile.txt", True)
a.Write(objUser.Name)
a.Write(" ")
a.WriteLine(objUser.LoginScript)
a.Close
Next
Det fungerar någorlunda. Två fel, som jag har med den är:
Slippa att trycka på OK varje gång loopen körs.
Den sparas endast den sista körda loopens info i textfilen
Iochmed att du använder WScript.Echo kommer du inte undan att trycka på Ok, eftersom den genererar en Message box. Koden kanske du kan möblera om lite och få en liten förbättring
Set objDomain = GetObject("WinNT://VNS" & strDomain)
objDomain.Filter = Array("user")
Set fs = CreateObject("Scripting.FileSystemObject")
Set a = fs.CreateTextFile("f:\testfile.txt", True)
For each objUser in objDomain
objUser.GetInfo
[blue]'WScript.echo objUser.Name & ", " & objUser.LoginScript [/blue]
a.Write(objUser.Name)
a.Write(" ")
a.WriteLine(objUser.LoginScript)
Next
a.Close
Nu kommer koden inte att skriva över filen du skapar varje gång loopen körs, eftersom i det här fallet skapas filen endast en gång ;)
Med objUser.FullName kan det listas bl.a namnen
Ville Person
Kalle Berg
Pelle Kanin
Lisa Holm
Hur skall man göra så att i samma textfil skriver namnen pånytt
men istället för att skriva ut det fullständiga namnet, så skrivs de två första tecknen av förnamnen och tre sista tecknen av efternamnen?
Jo, det går att göra på ett par olika sätt om man använder de strängfunktioner som finns i vbscript. Ett förslag är att använda Split() tillsammans med Left().
Nu fungerar det nästan utmärkt, men ett litet problem ännu!
Problemet är att vissa namn med objUser.FullName har endast ett förnamn och när ett sådant namn körs med Split fås följande
felmeddelande:
Script: U:\Scripts\vns4.vbs
Line: 24
Char: 6
Error: Subscript out of range: '[number: 1]'
Code:800A0009
Source: Microsoft VBScript runtime error
Dim nr, nr2, strn, astrn
WScript.echo "Tryck OK för att starta!"
Set fs = CreateObject("Scripting.FileSystemObject")
Set a = fs.CreateTextFile("f:\testen.txt", True)
Set gs = CreateObject("Scripting.FileSystemObject")
Set b = gs.CreateTextFile("f:\testen2.txt", True)
nr = 0
nr2 = 0
Set objDomain = GetObject("WinNT://VNS" & strDomain)
objDomain.Filter = Array("user")
For each objUser in objDomain
objUser.GetInfo
if objUser.LoginScript = "" then
nr = nr + 1
astrn = Split(objUser.FullName, " ")
If Ubound(astrNamn) > 0 Then
strNamnstrn = Left(astrn(0), 3) & Left(astrn(1), 4)
End If
a.WriteLine(nr & " | " & objUser.FullName & " | " & objUser.Name)
else
nr2 = nr2 + 1
astrn = Split(objUser.FullName, " ")
If Ubound(astrNamn) > 0 Then
strNamnstrn = Left(astrn(0), 3) & Left(astrn(1), 4)
End If
b.WriteLine(nr2 & " | " & objUser.FullName & " | " & objUser.Name & " | " & objUser.LoginScript & " | " & strn)
end if
Next
a.Close
b.Close
WScript.echo "Proceduren är slutförd"
Här är hela koden för vb-scriptet.
Den klagar ännu på detta:
Error: Type mismatch: 'Ubound'
If Ubound(astrn) > 0 Then
If Len(astrn(0)) <= 3 Then
strn = Left(astrn(0), Len(astrn(0)))
Else
strn = Left(astrn(0), 3)
End If
If Len(astrn(1)) <= 4 Then
strn = strn & Left(astrn(1), Len(astrn(1)))
Else
strn = strn & Left(astrn(1), 4)
End If
Else [blue]'Denna else-sats kanske är helt onödig, men den får vara med[/blue] ;)
If Len(astrn(0)) <= 3 Then
strn = Left(astrn(0), Len(astrn(0)))
Else
strn = Left(astrn(0), 3)
End If
Dim nr, nr2, strn, astrn
WScript.echo "Tryck OK för att starta!"
Set fs = CreateObject("Scripting.FileSystemObject")
Set a = fs.CreateTextFile("f:\testen.txt", True)
Set gs = CreateObject("Scripting.FileSystemObject")
Set b = gs.CreateTextFile("f:\testen2.txt", True)
nr = 0
nr2 = 0
Set objDomain = GetObject("WinNT://VNS" & strDomain)
objDomain.Filter = Array("user")
For each objUser in objDomain
objUser.GetInfo
if objUser.LoginScript = "" then
nr = nr + 1
astrn = Split(objUser.FullName, " ")
If Ubound(astrn) > 0 Then
If Len(astrn(0)) <= 3 Then
strn = Left(astrn(0), Len(astrn(0)))
Else
strn = Left(astrn(0), 3)
End If
If Len(astrn(1)) <= 4 Then
strn = strn & Left(astrn(1), Len(astrn(1)))
Else
strn = strn & Left(astrn(1), 4)
End If
'Else
If Len(astrn(0)) <= 3 Then
strn = Left(astrn(0), Len(astrn(0)))
Else
strn = Left(astrn(0), 3)
End If'
End If
a.WriteLine(nr & " | " & objUser.FullName & " | " & objUser.Name & " | " & strn)
else
nr2 = nr2 + 1
astrn = Split(objUser.FullName, " ")
If Ubound(astrn) > 0 Then
If Len(astrn(0)) <= 3 Then
strn = Left(astrn(0), Len(astrn(0)))
Else
strn = Left(astrn(0), 3)
End If
If Len(astrn(1)) <= 4 Then
strn = strn & Left(astrn(1), Len(astrn(1)))
Else
strn = strn & Left(astrn(1), 4)
End If
'Else
If Len(astrn(0)) <= 3 Then
strn = Left(astrn(0), Len(astrn(0)))
Else
strn = Left(astrn(0), 3)
End If'
End If
b.WriteLine(nr2 & " | " & objUser.FullName & " | " & objUser.Name & " | " & objUser.LoginScript & " | " & strn)
end if
Next
a.Close
b.Close
WScript.echo "Proceduren är slutförd"
Men denna kodsnutt, så ger den bara de tre första tecknen i efternamnet och inget annat! Är det nåt fel i kodsnutten?