Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Skript zum setzen von mehr als 8 LoginWorkstations

Frage Entwicklung VB for Applications

Mitglied: hawaiixxx

hawaiixxx (Level 1) - Jetzt verbinden

31.01.2008, aktualisiert 23:38 Uhr, 3381 Aufrufe, 1 Kommentar

Server 2000: Mit dem Befehl "NET USER ... /WORKSTATIONS:..." kann man maximal 8 Workstation setzen, auf denen sich ein Benutzer anmelden kann. Mit diesem VBS-Skript sind es beliebig viele!

01.
set args=WScript.Arguments 
02.
dim usr 
03.
dim Benutzer 
04.
if args.Count=1 then 
05.
	Benutzer=args(0) 
06.
	Set usr = GetObject("WinNT://[Domain-Name]/"&Benutzer&",user") 
07.
	usr.Put "LoginWorkstations", "pc01,pc02,pc03,pc04,pc05,pc06,pc07,pc08,pc09,pc10" 
08.
	usr.SetInfo 
09.
end if 
10.
'Msgbox "OK:"&usr.PasswordExpired 
11.
'if args.Count=1 then Msgbox "OK:"&args(0) 
12.
'if args.Count>1 then Msgbox "Zu viele Parameter!"
Mitglied: bastla
31.01.2008 um 23:37 Uhr
Hallo hawaiixxx!

Etwas flexibler wäre es so:
01.
'SetLoginWS.vbs 
02.
 
03.
'Const strDomain = "domain.local" 
04.
 
05.
Const U = "U" 
06.
Const C = "C" 
07.
Const UC = "UC" 
08.
 
09.
Const ForReading = 1 
10.
 
11.
If strDomain = "" Then 'Konstante nicht gesetzt, daher Domäne ermitteln 
12.
	Set objRootDSE = GetObject("LDAP://RootDSE") 
13.
	strDNSDomain = objRootDSE.Get("DefaultNamingContext") 
14.
	strDomain = Mid(Replace(strDNSDomain, ",DC=", "."), 4) 
15.
End If 
16.
 
17.
Set objFSO = CreateObject("Scripting.FileSystemObject") 
18.
 
19.
Set argsNamed = WScript.Arguments.Named 
20.
Set argsUnnamed = WScript.Arguments.Unnamed 
21.
 
22.
If argsNamed.Exists(UC) Then 'Variante Users & Clients in Liste 
23.
	UCL = argsNamed.Item(UC) 
24.
	If objFSO.FileExists(UCL) Then 'Listendatei vorhanden 
25.
		arrUsersClients = Split(objFSO.OpenTextFile(UCL, ForReading).ReadAll, vbCrLF) 
26.
		For Each strUserClient In arrUsersClients  
27.
			arrUC = Split(strUserClient, ";") 'jede Zeile enthält "User;Clientliste" - daher aufteilen ... 
28.
			SetWS arrUC(0), arrUC(1) ' ... und eintragen 
29.
		Next 
30.
	Else 'Listendatei nicht vorhanden 
31.
		WScript.Echo Chr(34) & UL & Chr(34) & " konnte nicht gefunden werden." 
32.
		WScript.Quit(2) 
33.
	End If 
34.
Else 'getrennte Angabe von Users und Clients 
35.
	intArgPosC = 0 'für "User als Parameter angegeben" 
36.
	If argsNamed.Exists(U) Then 'Datei mit Userliste angegeben 
37.
		UL = argsNamed.Item(U) 
38.
		If objFSO.FileExists(UL) Then 
39.
			arrUsers = Split(objFSO.OpenTextFile(UL, ForReading).ReadAll, vbCrLF) 
40.
		Else 
41.
			WScript.Echo Chr(34) & UL & Chr(34) & " konnte nicht gefunden werden." 
42.
			WScript.Quit(2) 
43.
		End If 
44.
	Else 
45.
		If argsUnnamed.Count > 0 Then 'User(liste) als Argument übergeben 
46.
			arrUsers = Split(argsUnnamed(0), ",") 
47.
			intArgPosC = 1 
48.
		Else 
49.
			Usage 
50.
			WScript.Quit(1) 
51.
		End If 
52.
	End If 
53.
 
54.
	If argsNamed.Exists(C) Then 'Datei mit Clientliste angegeben 
55.
		CL = argsNamed.Item(C) 
56.
		If CL <> "" Then 
57.
			If objFSO.FileExists(CL) Then 
58.
				arrClients = Split(objFSO.OpenTextFile(CL, ForReading).ReadAll, vbCrLF) 
59.
				strClients = Join(arrClients, ",") 
60.
			Else 
61.
				WScript.Echo Chr(34) & CL & Chr(34) & " konnte nicht gefunden werden." 
62.
				WScript.Quit(2) 
63.
			End If 
64.
		End If 
65.
	Else 
66.
		If argsUnnamed.Count > intArgPosC Then 'Clientliste als Argument angegeben; Index abhängig von Art der Userangabe 
67.
			strClients = argsUnnamed(intArgPosC) 
68.
		Else 
69.
			Usage 
70.
			WScript.Quit(1) 
71.
		End If 
72.
	End If 
73.
 
74.
	For Each strUser in arrUsers 'für jeden einzelnen User die Clientliste eintragen 
75.
		SetWS strUSer, strClients 
76.
	Next 
77.
End If 
78.
 
79.
Sub SetWS(strU, strC) 
80.
On Error Resume Next 'Errorhandling einschalten 
81.
Set objUsr = GetObject("WinNT://" & strDomain & "/" & strU & ",user") 
82.
If Err.Number = 0 Then 
83.
	WScript.Echo objUsr.Name & ":" &vbTab & strC 
84.
	objUsr.Put "LoginWorkstations", strC 
85.
	objUsr.SetInfo 
86.
Else 
87.
	WScript.Echo strU & ":" & vbTab & "Workstationliste nicht eingetragen!" 
88.
End If 
89.
On Error Goto 0 'Errorhandling wieder ausschalten 
90.
End Sub 
91.
 
92.
Sub Usage 
93.
WScript.Echo "Usage: " & WScript.ScriptFullName & " /UC:UserAndClientListFile | {{User[,User] | /" & U & ":UserListFile} {Client[,Client] | /" & C & ":ClientListFile}}" 
94.
End Sub
Durch die Verwendung benannter Argumente kannst Du sowohl für die zu bearbeitenden Benutzer und -innen, als auch für die einzutragenden Workstations entweder eine (durch Kommata getrennte) Liste oder eine Datei (mit einem Eintrag je Zeile) übergeben. Daraus ergeben sich exemplarisch folgende Einsatzmöglichkeiten:
01.
cscript //nologo C:\Scripts\SetLoginWS.vbs Benutzerin pc01,pc02,pc03,pc04,pc05,pc06,pc07,pc08,pc09,pc10 
02.
cscript //nologo C:\Scripts\SetLoginWS.vbs Benutzer1,Benutzerin2 pc01 
03.
cscript //nologo C:\Scripts\SetLoginWS.vbs /U:D:\BenutzerInnen.txt pc01,pc02,pc03,pc04,pc05,pc06,pc07,pc08,pc09,pc10 
04.
cscript //nologo C:\Scripts\SetLoginWS.vbs Benutzer /C:D:\Workstations.txt 
05.
cscript //nologo C:\Scripts\SetLoginWS.vbs Benutzerin1,Benutzer2,Benutzerin3 /C:D:\Workstations.txt 
06.
cscript //nologo C:\Scripts\SetLoginWS.vbs /U:D:\BenutzerInnen.txt /C:D:\Workstations.txt 
07.
cscript //nologo C:\Scripts\SetLoginWS.vbs Benutzerin1,Benutzerin2 ""
Eine Workstationangabe "" bedeutet, dass eine Anmeldung an allen Workstations wieder erlaubt wird.

Schließlich soll auch die Variante "individuelle Liste von Workstations je BenutzerIn" nicht vergessen werden:
01.
cscript //nologo C:\Scripts\SetLoginWS.vbs /UC:"D:\B und W.txt"
Hierzu muss die übergebene Datei (im Beispiel "D:\B und W.txt") zeilenweise wie folgt aufgebaut sein:
01.
BenutzerIn;Workstation[,Workstation]
Soferne die Domäne vorgegeben werden soll, kann dies durch die erste "Const"-Zeile erreicht werden (Kommentarzeichen entfernen nicht vergessen ), ansonsten wird in der aktuellen Domäne gesucht.

Noch ein Hinweis: Da mehrere Argumente zu übergeben sind, wird der Aufruf ohnehin über CMD (direkt an der Kommandozeile oder als Batch) erfolgen - insofern bietet es sich an, "cscript" zu verwenden, nicht zuletzt, da sich so die Ausgaben auch leicht in eine Log-Datei umleiten lassen.

Grüße
bastla

P.S.: Die Idee zu dieser "Flexibilisierung" ist mir gekommen, als ich mich fragte, warum Du nur (exakt) ein Argument zulassen wolltest (if args.Count=1 then) - alle weiteren hättest Du ja einfach ignorieren können ...
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Batch & Shell
Powershell CHAT Skript (5)

Frage von xpxy15 zum Thema Batch & Shell ...

Batch & Shell
Variable setzen können während timeout (3)

Frage von DontFlameMeITryMyBest zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Router & Routing
gelöst Ipv4 mieten (22)

Frage von homermg zum Thema Router & Routing ...

Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...