Dr-manMedlem sedan juli 2002732 inlägg 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
Dr-manMedlem sedan juli 2002732 inlägg Nu jag byggt lite vidare på koden
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
Är det nån som kan hjälpa med detta?
Engine^Medlem sedan dec. 20003 887 inlägg 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 ;)
Dr-manMedlem sedan juli 2002732 inlägg Hur kan man lagra informationen till en MySQL-databasen?
mrblondeMedlem sedan aug. 20012 349 inlägg Du får skapa en databas och en tabell att spara datat i och sen får du göre en INSERT till den tabellen för varje loop du går igenom.
Dr-manMedlem sedan juli 2002732 inlägg 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?
Engine^Medlem sedan dec. 20003 887 inlägg strNamn = objUser.FullName
strNamn = Left(strnamn, 2) & Right(strNamn, 3)
a.Write(strNamn)
Så ungefär?
Dr-manMedlem sedan juli 2002732 inlägg Just i den stilen!
Men istället de tre första tecknen i förnamnet och fyra första namnen i efternamnet, går det att göra detta?
@ndersMedlem sedan juni 200032 969 inlägg 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().
Mvh
Engine^Medlem sedan dec. 20003 887 inlägg Dim astrNamn(), strNamn
astrNamn = Split(objUser.FullName, " ")
strNamn = Left(astrNamn(0), 3) & Left(astrNamn(1), 4)
eller
strNamn = Left(Split(objUser.FullName, " ")(0), 3) & Left(Split(objUser.FullName, " ")(1), 4)
Dr-manMedlem sedan juli 2002732 inlägg 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
Vad kan man göra åt detta?
@ndersMedlem sedan juni 200032 969 inlägg
Dr-man skrev:
Vad kan man göra åt detta?
Man kan slänga in en if-sats som kontrollerar det först.
Engine^Medlem sedan dec. 20003 887 inlägg astrNamn = Split(objUser.FullName, " ")
strNamn = Left(astrNamn(0), 3)
If Ubound(astrNamn) > 0 Then strNamn = strNamn & Left(astrNamn(1), 4)
Dr-manMedlem sedan juli 2002732 inlägg 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'
@ndersMedlem sedan juni 200032 969 inlägg [b]astrn[/b] = split(objUser.FullName, " ")
If Ubound([b]astrNamn[/b]) > 0 Then
Finn ett fel. :)
red: Läs också här. ;)
Dr-manMedlem sedan juli 2002732 inlägg Den rätta koden är:
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
strn = Left(astrn(0), 3) & Left(astrn(1), 4)
End If
a.WriteLine(nr & " | " & objUser.FullName & " | " & objUser.Name & " | " & strn)
else
nr2 = nr2 + 1
astrn = Split(objUser.FullName, " ")
If Ubound(astrn) > 0 Then
strn = 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"
Lite förbättringar, går det göra så att scriptet hoppar över eventuella bindestreck och tar följande tecken istället?
En liten bugg ifall förnamnet är tre tecken, så tar endast scriptet de tre första tecknen av efternamnet istället för fyra tecken!
Nån, som kan hjälpa till?
Engine^Medlem sedan dec. 20003 887 inlägg 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
Dr-manMedlem sedan juli 2002732 inlägg 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?
Dr-manMedlem sedan juli 2002732 inlägg Ingen, som kan se ifall det är nå fel med kodsnutten?
Dr-manMedlem sedan juli 2002732 inlägg En annan fråga!
Kan man få denna information automatiskt öppnat i Excel?