VBS zum automatischen umziehen der lokalen Druckerverbindungen

Problem :

Der Name des Printservers hat sich geändert , jetzt kann man zu Fuß an alle Clients gehen und die Drucker umstellen oder man nimmt dieses Skript ins Loginskript auf und das erledigt einem diese Aufgabe ....

Skript :

Option Explicit

Dim ObjWsh 		: Set ObjWsh = CreateObject("WScript.Shell")
Dim ObjNet   	: Set ObjNet = CreateObject("WScript.Network")
Dim ObjFso   	: Set ObjFso = CreateObject("Scripting.FileSystemObject")
Dim objEnv   	: Set objEnv = ObjWsh.Environment("Process")
Dim Logfile  	: Logfile = objEnv("USERPROFILE") & "\PrtUmzug.txt"
Dim objNetPr,NPR,DUMMY,ToDo,Zeile,Inhalt,Entry,Printer_New,OLDSERVER,NEWSERVER

OLDSERVER = "SERVERALT"   ' ----------------------------> Hier den Namen des alten Printservers eintragen
NEWSERVER = "SERVERNEU"   ' ----------------------------> Hier den Namen des neuen Printservers eintragen

' ------------------ routine
WScript.Echo ""
WScript.Echo "-----------------------------------------------------"
If Not ObjFso.FileExists(Logfile) then
WScript.Echo "|-> Ihre Druckerverbindungen werden überprüft & korrigiert"
Inhalt = GetPrinterNames()
WriteLog Logfile,Inhalt
ReadLog Logfile
Else
WScript.Echo "|-> Druckerverbindungen wurden bereits überprüft"
End If
WScript.Echo "-----------------------------------------------------"
WScript.Quit (1)
' ------------------ funktionen
Function GetPrinterNames() 				'--- liest die verbundenen Netzwerkdrucker aus
  Set objNetPr = ObjNet.EnumPrinterConnections
  For NPR = 0 to objNetPr.Count - 1 Step 2
    If Left(objNetPr.Item(NPR + 1),2) = "\\" then
      If DUMMY = "" then
        DUMMY = "NPR|" & objNetPr.Item(NPR) & "|" & objNetPr.Item(NPR + 1)
      Else
        DUMMY = DUMMY & vbCrLf & "NPR|" & objNetPr.Item(NPR) & "|" & objNetPr.Item(NPR + 1)
      End If
    End If
  Next 
  GetPrinterNames = DUMMY
  DUMMY = ""
  Set objNetPr = nothing
End Function
Function SetPrinterNames(Line) 			'--- verbindet einen Netzwerkdrucker
	On Error Resume Next
	Entry = split(Line,"|")
	If UBound(Entry) = 2 Then
		Printer_New = Replace(lcase(Entry(2)),OLDSERVER,NEWSERVER)
		ObjNet.RemovePrinterConnection Entry(2)
		ObjNet.AddWindowsPrinterConnection Printer_New
	End If
End Function
Function ReadLog(File) 					'--- überprüft ob Logfile existiert wenn ja liet Datei aus und spielt gesicherte Einträge zurück
	If ObjFso.FileExists(File) Then
		Set Dummy = ObjFso.OpenTextFile(File)
			Do Until Dummy.AtEndOfStream
				Zeile = trim(Dummy.Readline)
				SetPrinterNames(Zeile)
			Loop
	End If
End Function
Function WriteLog(File,Content) 		'--- löscht die Datei wenn vorhanden und erstellt eine aktualisierte
  If ObjFso.FileExists(File) Then
    ObjFso.DeleteFile(File)
  End If
  Dim ObjLogFile : Set ObjLogFile = ObjFso.OpenTextFile(File,8,true)
  ObjLogFile.WriteLine (Content)
  Set ObjLogFile = Nothing
End Function

VBS zum Löschen von Dateien mit bestimmter Extension nach x Tagen

'DEL_X_DAYS_EXT_FILES.VBS
'
'Skript zum löschen von Dateien mit der Extension sExt im Pfad sDirectoryPath,
'die älter als iDaysOld Tage sind
'
'
'sDirectoryPath = Pfad zum Verzeichnis, in dem die zu löschenden Dateien liegen (ohne abschließnden Backslash)
'sExt = Extension, der Dateien, die gelöscht werden können/sollen
'iDaysOld = Angabe des Dateialters in ganzen Tagen

Option Explicit 
On Error Resume Next 
Dim oFSO, oFolder, sDirectoryPath 
Dim oFileCollection, oFile, sDir 
Dim iDaysOld, sExt


'Variablen definieren

sDirectoryPath = "D:\BACKUP"
sExt = "bak"
iDaysOld = 1


'Zugriff auf Ordner und Dateien

Set oFSO = CreateObject("Scripting.FileSystemObject") 
Set oFolder = oFSO.GetFolder(sDirectoryPath) 
Set oFileCollection = oFolder.Files 

'Durchsuchen des Zielordners nach allen Dateien mit der Endung sExt
For each oFile in oFileCollection
	
	If LCase(Right(Cstr(oFile.Name), 3)) = sExt Then
 	
 		If oFile.DateLastModified < (Date() - iDaysOld) Then 'lösche Datei, wenn diese älter als iDaysOld Tage ist
 		'oFile.Delete(True) '----> Zeile ist nicht aktiv, bitte noch Dokemtarzeiehn davor herausnhemen!!!
		msgbox oFile.Name '----> Es wird nur der Name der zu löschenden Datei angezeigt!!
 		End If 
 
	End If   

Next 


'Variablen zurücksetzen

Set oFSO = Nothing 
Set oFolder = Nothing 
Set oFileCollection = Nothing 
Set oFile = Nothing 

VBS zum Ermitteln der neuesten Datei an einem Verzeichnis abhängig von der Extension

'Ermittlung der neuesten Datei mit Extension sExt im Pfad sPfath
'
'
'Das Skript durchsucht den gewünschten Pfad "sPath" nach Dateien mit der Extension "sExt"
'und gibt dann den kompletten Pfad mit Dateinamen von der neuesten Dateu aus sNewestFile

'Variablen für Pfad und Extension
'sPfad ohne abschließenden Backslash angeben
'sExt ohne Punkt davor angeben

sPath = "C:\Windows\System32"
sExt = "dll"


'Filesystemobject genereieren
Set oFSO = CreateObject("Scripting.FileSystemObject")


'Funtkion GetNewestFile ausführen
sNewestFile = GetNewestFile(sPath)


'Ausgabe der neuesten Datei
'Wenn keine Datei ermittelt werden konnte, dann auch melden

If sNewestFile <> "" Then
	WScript.Echo "Die neuste Datei mit der Extension " & sExt & " ist " & sNewestFile
Else
   	WScript.Echo "Verzeichnis ist leer"
End If


'Funktion NewestFile

Function GetNewestFile(ByVal sPath)

   sNewestFile = Null   ' initialisiere Wert

   Set oFSO = CreateObject("Scripting.FileSystemObject")
   Set oFolder = oFSO.GetFolder(sPath)
   Set oFiles = oFolder.Files

 ' Finde die neueste Datei unter allen anderen Dateien
For Each oFile In oFiles

	if lcase(oFSO.GetExtensionName(ofile)) = sExt then 'selektiere Dateien mit der gewünschten Endung aus
	On Error Resume Next

     		If IsNull(sNewestFile) Then
       			sNewestFile = oFile.Path
       			dPrevDate = oFile.DateLastModified
     			Elseif dPrevDate < oFile.DateLastModified Then
       			sNewestFile = oFile.Path
     		End If

	end if

     On Error Goto 0
   Next

   If IsNull(sNewestFile) Then sNewestFile = ""

   GetNewestFile = sNewestFile
End Function


PHP Funktion um Strings zu zerlegen

Beschreibung :

Funktion findet ein bestimmtes Vorkommen eines vorgegebenen Suchstring in einem anderen String

Beispiel :

$Text = "Ihre Artikelnummer ist 1212121212 der Bestellwert ..."
$TXT = FindInformationInString($Text,'ist ','der '); 

echo $TXT; // liefert "1212121212" zurück



Funktion :

function FindInformationInString($String,$Start,$Ende) {
    // $String = Der String in dem eine Zeichenkette gesucht werden soll
    // $Start = Nach welchem String soll gesucht werden 
    // $Ende = Mit welchen Zeichen hört der gesuchte String auf
    $FI_STR = stripos($String,$Start);
    If ($FI_STR > 0){
        $FI_END = stripos($String,$Ende,$FI_STR);
        $FI_Len = $FI_END - $FI_STR;
        $FI_STRING = substr($String,$FI_STR,$FI_Len);
        $FI_STRING = Str_replace($Start,'',$FI_STRING);     // Start String aus Ergebnis entfernen
        $FI_STRING = trim(strip_tags($FI_STRING));            // entfernen der HTML Tags
        If (empty($FI_STRING)) {
            return 'n/a';
            } else {
            return $FI_STRING;
            }
        }else{
        return 'n/a';
        }
}



Verwendete PHP Funktionen : strip_tags | substr | stripos | trim | str_replace


Konvertierung VBE zu VBS

Problem
Wer kennt das nicht. Da hat sich ein gutes VB-Skript ausgedacht und um das ganze abzusichern, hat man das in eine VBE umgewandelt um das Ganze zu verschlüsseln. Irgendwie ist einem dann die originale Datei abhanden gekommen und man hat nur noch die kryptische VBE-Datei...wie jetzt an die Daten herankommen?

Lösung
Es gibt tatsächlich ein Skript, dass eine VBE-Datei wieder in eine VBS-Datei umwandelt. Das Originalskript gibt den unverschlüsselten Inhalt als MsgBox zurück. Ich habe mir erlaubt das Ganze etwas zu erweitern und lasse die entschlüsselte Datei als xxx_encrypted.txt im gleichen Verzeichnis wie die VBE-Datei abspeichern, wobei xxx für den originalen Dateinamen steht (z.B. test.vbe -> test.vbe_decrypted.txt). Hier nun das Skript...dieses einfach als decrypt_vbs.vbs speichern und die gewünschte VBE-Datei entweder per Drag&Drop fallen lassen oder per integrierter Browse-Funktion suchen.

option explicit
Dim oArgs, NomFichier
'Optional argument : the encoded filename
NomFichier=""
Set oArgs = WScript.Arguments
Select Case oArgs.Count
Case 0 'No Arg, popup a dialog box to choose the file
	NomFichier=BrowseForFolder("Choose an encoded file", &H4031, &H0011)
Case 1
	If Instr(oArgs(0),"?")=0 Then '-? ou /? => aide
		NomFichier=oArgs(0)
	End If
Case Else
	WScript.Echo "Too many parameters"
End Select
Set oArgs = Nothing

If NomFichier<>"" Then
	Dim fso
	Set fso=WScript.CreateObject("Scripting.FileSystemObject")
	If fso.FileExists(NomFichier) Then
		Dim fic,contenu,ofile
		Set fic = fso.OpenTextFile(NomFichier, 1)
		Contenu=fic.readAll
		fic.close
		Set fic=Nothing

		Const TagInit="#@~^" '#@~^awQAAA==
		Const TagFin="==^#~@" '& chr(0)
		Dim DebutCode, FinCode
		Do
			FinCode=0
			DebutCode=Instr(Contenu,TagInit)
			If DebutCode>0 Then
				If (Instr(DebutCode,Contenu,"==")-DebutCode)=10 Then 'If "==" follows the tag
					FinCode=Instr(DebutCode,Contenu,TagFin)
					If FinCode>0 Then
						Contenu=Left(Contenu,DebutCode-1) & _
						Decode(Mid(Contenu,DebutCode+12,FinCode-DebutCode-12-6)) & _
						Mid(Contenu,FinCode+6)
					End If
				End If
			End If
		Loop Until FinCode=0
		WScript.Echo contenu
		Set oFile = fso.OpenTextFile(NomFichier & "_decrypted.txt",2,True)
		oFile.WriteLine contenu
		oFile.close
	Else
		WScript.Echo Nomfichier & " not found"
	End If
	Set fso=Nothing
Else
	WScript.Echo "Please give a filename"
	WScript.Echo "Usage : " & wscript.fullname  & " " & WScript.ScriptFullName & " "
End If

Function Decode(Chaine)
	Dim se,i,c,j,index,ChaineTemp
	Dim tDecode(127)
	Const Combinaison="1231232332321323132311233213233211323231311231321323112331123132"

	Set se=WSCript.CreateObject("Scripting.Encoder")
	For i=9 to 127
		tDecode(i)="JLA"
	Next
	For i=9 to 127
		ChaineTemp=Mid(se.EncodeScriptFile(".vbs",string(3,i),0,""),13,3)
		For j=1 to 3
			c=Asc(Mid(ChaineTemp,j,1))
			tDecode(c)=Left(tDecode(c),j-1) & chr(i) & Mid(tDecode(c),j+1)
		Next
	Next
	'Next line we correct a bug, otherwise a ")" could be decoded to a ">"
	tDecode(42)=Left(tDecode(42),1) & ")" & Right(tDecode(42),1)
	Set se=Nothing

	Chaine=Replace(Replace(Chaine,"@&",chr(10)),"@#",chr(13))
	Chaine=Replace(Replace(Chaine,"@*",">"),"@!","<")
	Chaine=Replace(Chaine,"@$","@")
	index=-1
	For i=1 to Len(Chaine)
		c=asc(Mid(Chaine,i,1))
		If c<128 Then index=index+1
		If (c=9) or ((c>31) and (c<128)) Then
			If (c<>60) and (c<>62) and (c<>64) Then
				Chaine=Left(Chaine,i-1) & Mid(tDecode(c),Mid(Combinaison,(index mod 64)+1,1),1) & Mid(Chaine,i+1)
			End If
		End If
	Next
	Decode=Chaine
End Function

Function BrowseForFolder(ByVal pstrPrompt, ByVal pintBrowseType, ByVal pintLocation)
	Dim ShellObject, pstrTempFolder, x
	Set ShellObject=WScript.CreateObject("Shell.Application")
	On Error Resume Next
	Set pstrTempFolder=ShellObject.BrowseForFolder(&H0,pstrPrompt,pintBrowseType,pintLocation)
	BrowseForFolder=pstrTempFolder.ParentFolder.ParseName(pstrTempFolder.Title).Path
	If Err.Number<>0 Then BrowseForFolder=""
	Set pstrTempFolder=Nothing
	Set ShellObject=Nothing
End Function



Quelle: Decode all files encoded (original version)

VBS / WSH Pseudo Timestamp erstellen

Diese Funktion erstellt einen Pseudotimestamp , ist ganz gut wenn man Logfiles oder ähnliches schreiben möchte

Function PTimestamp()
Dim JAH,MON,SEK,STU,TAG,MIN
JAH = Year(Now)
If Month(Now) < 10 then
	mon = "0" & Month(Now)
Else
	mon = Month(Now)
End If
If Day(Now) < 10 then
	TAG = "0" & Day(Now)
Else
	TAG = Day(Now)
End If
If Hour(Now) < 10 then
	STU = "0" & Hour(Now)
Else
	STU = Hour(Now)
End If
If Minute(now) < 10 then
	MIN = "0" & Minute(now)
Else
	MIN = Minute(now)
End If
If Second(Now) < 10 then
	SEK = "0" & Second(Now)
Else
	SEK = Second(Now)
End If
PTimestamp = TAG & MON & JAH & STU & MIN & SEK 
End Function


Die Funktion kann dann z.B. so aufgerufen werden.


MsgBox "TEST_" & PTimestamp()

“Das einzig sichere System müsste ausgeschaltet, in einem versiegelten und von Stahlbeton ummantelten Raum und von bewaffneten Schutztruppen umstellt sein.”
Gene Spafford (Sicherheitsexperte)