xm-bit
Goto Top

kopieren mit WSH

Hi und guten morgen,

ich habe da mal eine kleine Herausforderung.

Ich möchte in mein vorhandenes Loginscript, eine Aktion einfügen, mit der ich eine Datei von einem Fileserver, an einen bestimmten Ort im Benutzerprofil kopiere.
Die vorhandene Datei soll dann überschrieben werden.

Was schön wäre, wenn das irgendwo in einem Logfile mit aufgeführt wird.

Hier ist erstmal mein Loginscript:

Dim strComputerName  
Dim strUserName  
Dim strDomainName  
Dim strPrintSRV 
Dim strPrintSRV2 

Dim objADSysInfo  
Dim wshNetwork  
Dim WshShell  
Dim WshSysEnv  
Dim oShell  
Dim oShFolder  
Dim objUser  
Dim objOU  
Dim rootDSE  
Dim oPq  
Dim ws 

Set wshNetwork = WScript.CreateObject( "WScript.Network" )    
Set WshShell = WScript.CreateObject("WScript.Shell")    
Set WshProcEnv = WshShell.Environment("Process")    
Set WshUserEnv = WshShell.Environment("USER")    
Set objADSysInfo = CreateObject("ADSystemInfo")    
Set oShell = CreateObject("Shell.application") 				   
Set oShFolder = oShell.Namespace(17)  
Set objUser = GetObject("LDAP://" & objADSysInfo.UserName)    
Set objOU = GetObject(objUser.parent)  
Set objFSO = CreateObject("Scripting.FileSystemObject")    
strPrintSRV = "printsrv"   
Server1 = "DC-Server"    
Server2 = "file-Server"    

'Warten bis der Anmeldename des Users ermittelt wurde    
Do While wshNetwork.username = ""    
   WScript.Sleep 5  
Loop  

strComputerName = wshNetwork.computerName  
strUserName = wshNetwork.userName  
strDomainName = wshNetwork.userDomain  

'##### vorhandene Laufwerke löschen    

On Error Resume Next  

wshNetwork.RemoveNetworkDrive "I:", True, True    
wshNetwork.RemoveNetworkDrive "J:", True, True    
wshNetwork.RemoveNetworkDrive "K:", True, True    
wshNetwork.RemoveNetworkDrive "L:", True, True    
wshNetwork.RemoveNetworkDrive "H:", True, True    
wshNetwork.RemoveNetworkDrive "N:", True, True    
wshNetwork.RemoveNetworkDrive "O:", True, True    
wshNetwork.RemoveNetworkDrive "Z:", True, True    
wshNetwork.RemoveNetworkDrive "P:", True, True    
wshNetwork.RemoveNetworkDrive "Q:", True, True    
wshNetwork.RemoveNetworkDrive "S:", True, True    
wshNetwork.RemoveNetworkDrive "W:", True, True    
wshNetwork.RemoveNetworkDrive "X:", True, True    
wshNetwork.RemoveNetworkDrive "M:", True, True    

'##### für jeden gültige Laufwerke mappen    
'wshNetwork.MapNetworkDrive "I:", "\\"&Server2&"\User\"& strUserName    
'wshNetwork.MapNetworkDrive "L:", "\\"&Server2&"\AUS"    
wshNetwork.MapNetworkDrive "V:", "\\" & Server2 & "\Vorlagen"   
wshNetwork.MapNetworkDrive "X:", "\\" & Server1 & "\Xerox"   

'Drucker mappen   
wshNetwork.AddWindowsPrinterConnection "\\" & strPrintSRV2 & "\BrotherH"   
wshNetwork.AddWindowsPrinterConnection "\\" & strPrintSRV2 & "\KyoceraF"   

'##### Gruppenabhängige Laufwerke mappen    

For Each prop In objUser.groups

'* ACHTUNG! Gruppennamen immer GROSS schreiben    
Select Case UCase(prop.cn)  

Case "MITARBEITER"    
	wshNetwork.MapNetworkDrive "K:", "\\" & Server2 & "\Kanzleiverwaltung"   
	wshNetwork.MapNetworkDrive "M:", "\\" & Server2 & "\Mandantenstamm"   
	wshNetwork.MapNetworkDrive "P:", "\\" & Server2 & "\Software"   

Case "GESCHÄFTSLEITUNG"    
  wshNetwork.MapNetworkDrive "I:", "\\" & Server2 & "\Kanzlei_intern"   

'Case "HR"    
  'wshNetwork.MapNetworkDrive "L:", "\\"&Server2&"Groups$\Profile"    

End Select  
Next  

hier ist der Teil, den ich gerne einfügen würde.
Aber ich bin mir nicht sicher, wie ich das integrieren kann...
Da ich noch nicht so die Erfahrung im Scripting habe...

Option Explicit
'Deklaration der Variablen  

Dim FSO
'Konstanten definieren  
Const DateiNameQuelle = "beispiel.txt"  
Const DateiNameZiel = "bespiel.txt"  
'Objekt erzeugen  
Set FSO = CreateObject("Scripting.FileSystemObject")  
If FSO.FileExists(DateiNameQuelle) Then
	'kopieren mit Copyfile  
	FSO.CopyFile DateiNameQuelle, DateiNameZiel, True
	WScript.Echo DateiNameQuelle & "wurde nach" & _  
	DateiNameZiel & "kopiert"  
	
Else 
	WScript.Echo DateiNameQuelle & " ist nicht vorhanden "  
End If


Bei "beispiel.txt" kann ich dort auch komplette Pfade angeben, ich denke schon oder??

Wenn ihr noch weitere Details benötigt, sag es mir einfach...

mfg
Sascha

Content-ID: 129014

Url: https://administrator.de/contentid/129014

Printed on: November 6, 2024 at 07:11 o'clock

TsukiSan
TsukiSan Nov 11, 2009 at 04:44:13 (UTC)
Goto Top
hallo SasHW2K3,

(2-er Codeschnippsel von dir!)

genau Pfadangabe nötig:
DateiNameQuelle = "C:\Quelle\beispiel.txt"   
Const DateiNameZiel = "C:\Ziel\bespiel.txt"   

Wenn du die Zieldatei gnadenlos überschreiben willst dann kannst du dir
If FSO.FileExists(DateiNameQuelle) Then
sparen!

Zum Mittloggen einfach ab deiner Zeile 09
Set MyLogFile = FSO.CreateTextFile("C:\MyLogFile.txt", TRUE)  
MyLogFile.Close
Set MyLogFile = FSO.OpenTextFile("C:\MyLogFile.txt",8)  
einfügen und in deine freie Zeile 15
MyLogFile.WriteLine (DateiNameQuelle & "wurde nach" & _   
                                       DateiNameZiel & "kopiert")  
nach Zeile 18 dann noch
MyLogFile.Close
eingeben

Wann du was kopieren möchtest (an welcher Stelle deines Scriptes) ist mir nicht ganz schlüssig, aber du kannst das einsetzen, woimmer du möchtest.

Gruss

Tsuki
xm-bit
xm-bit Nov 11, 2009 at 08:09:34 (UTC)
Goto Top
Hallo Tsuki,

danke erstmal für deine Antwort.

Das kopieren ist Unabhängig von den Gruppenmitgliedschaften. Mir ging es darum, nicht einfach irgendwo etwas reinzusetzen, sondern, die Teile dort reinzusetzen, das das Script dann auch nicht zu undurchsichtig wird. Wie schohn gesagt, ich fange erst an, mich mit der Materie Scripting, etwas intensiver zu befassen.

Darum stelle ich halt viele Fragen, auf die ich im ersten Schritt, die Antwort nicht finde.
Ich möchte halt, das das Script sauber aufgebaut, auch nen guten Eindruck macht.

Ich werde es mal testen, und dann das Ergebnis posten.


Ergebnis:

'Option Explicit  

'Deklaration der Variablen  
Dim FSO
Dim MyLogFile

'Konstanten definieren  
Const DateiNameQuelle = "D:\test.txt"  
Const DateiNameZiel = "D:\test\"  
'Objekt erzeugen  
Set FSO = CreateObject("Scripting.FileSystemObject")  
If FSO.FileExists(DateiNameQuelle) Then 
	'kopieren der Datei  
	FSO.CopyFile DateiNameQuelle, DateiNameZiel, True 
	'WScript.Echo DateiNameQuelle & " wurde nach " & _   
	'DateiNameZiel & " kopiert "   
Else 
	WScript.Echo DateiNameQuelle & " ist nicht gefunden worden"  
	
End If

Set MyLogFile = FSO.CreateTextFile("D:\MyLogFile.txt", True)   
'Set MyLogFile = FSO.OpenTextFile("D:\MyLogFile.txt", 8)  
MyLogFile.WriteLine (Date & " " & Time & " " & DateiNameQuelle & " wurde nach " & _  
	DateiNameZiel & " kopiert ")  

MyLogFile.Close

so funktioniert es schon ganz gut, aber wie bekomme ich es nun hin, das im Logfile, für jede Aktion eine neue Zeile angefangen wird.

Momentan wird die erste Zeile überschreiben..

mfg
Sascha
bastla
bastla Nov 11, 2009 at 10:09:42 (UTC)
Goto Top
Hallo SasHW2k3!
wie bekomme ich es nun hin, das im Logfile, für jede Aktion eine neue Zeile angefangen wird.
Indem Du auf die Zeile 22 (ersatzlos streichen) zugunsten der Zeile 23 (Kommentar entfernen) verzichtest. (De facto wird nicht die Zeile, sondern wegen "CreateTextFile" die gesamte Datei überschrieben / neu erstellt).

Zur Sicherheit (für den Fall, dass es das Logfile noch nicht gibt) wäre in der Zeile 23 noch der Parameter "True" einzufügen (siehe unten) ...

Grüße
bastla
bastla
bastla Nov 11, 2009 at 10:12:04 (UTC)
Goto Top
@tsuki
Anmerkung zum Logfile: Mit
Set MyLogFile = FSO.OpenTextFile("C:\MyLogFile.txt",8,True)
wird die Datei bei Bedarf neu erstellt, sodass das "CreateTextFile" davor eigentlich unnötig ist.

Grüße
bastla
TsukiSan
TsukiSan Nov 12, 2009 at 02:22:09 (UTC)
Goto Top
@bastla,

danke für den Hinweis. so hatte ich's auch noch nicht geschrieben. Habe meistens den
CreateTextFile
Befehl genommen, wenn ich eine Datei neu erstellen, bzw. komplett überschreiben wollte.
Zum Anhängen von Daten eignet sich nur Zeile 23 in SasHW2k3-Programm. Das wäre schon klar.

@ SasHW2k3
sorry, dass ich dich nicht gleich 100%ig verstanden hatte. Aber bastla hat's ja zum Glück face-wink


Gruss und Danke!
Tsuki