Überprüfen ob Prozess läuft mit VBS/WSH

Hier eine kleine Funktion die überprüft ob ein Prozess läuft oder nicht , sie baut auf VBS / WSH und WMI auf und liefert TRUE oder FALSE zurück.

Funktion :
Function CheckProcess(name)
'------------------ check for running process
	Dim ObjProcess
	Set ObjProcess = OBJWMI.ExecQuery("select * from win32_process where name='" & name & "' ")
	If ObjProcess.Count <> 0 Then
		CheckProcess = True
	Else
		CheckProcess = False
	End If
	Set ObjProcess = Nothing
End Function



diese Funktion kann z.B. so eingebunden werden

Beispiel :

Do
     BoolCkProc = CheckProcess("notepad.exe")
     WScript.Sleep 5000
Loop Until BoolCkProc = False



Benötigt wird natürlich das WMI interface

Dim StrComputer : StrComputer = "." '-- lokaler Rechner
Dim OBJWMI : Set OBJWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & StrComputer & "\root\cimv2")

VBS Logfile schreiben | Funktion

Funktion um ein Logfile in VBS zu schreiben , der neue Eintrag wird immer angehängt.

Benötigt einen Verweis auf
Dim ObjFso		:	Set ObjFso = CreateObject("Scripting.FileSystemObject")



Und die Variable FIL_LOG muss deklariert sein !

Dim FIL_LOG		:	FIL_LOG = "C:\" & Replace(WScript.ScriptName,".vbs",".log") 



Funktion :

Function WriteLog(Inhalt)
'------------------ Schreibt ein Logfile
	Dim FileOut
		Set FileOut = ObjFso.OpenTextFile(FIL_LOG,8,true)
		FileOut.WriteLine (Inhalt)
		FileOut.Close
		Set FileOut = Nothing
	End Function

vsFTP OpenSuse - neuen Benutzer anlegen mit Skript

Problem :
Ich betreibe einen kleinen FTP Server der unter vsFTP arbeitet , öfter kommen neue Benutzer hinzu , um mir die Tipparbeit zu sparen hab ich ein kleines Bashscript geschrieben das das für mich übernimmt. Es ist nicht so kompliziert nimmt einem aber viel Arbeit ab ;-)

Lösung :


# !/bin/bash
echo -n "Bitte Benutzernamen angeben : "
read username
echo "-- Erstelle Home Verzeichnis für $username"
mkdir /home/$username
echo "-- Erstelle Benutzer $username"
useradd $username -d /home/$username -g ftpgroup -s /bin/false
chown nobody:ftpgroup /home/$username
chmod 1770 /home/$username
echo "Bitte geben Sie das Password für den Benutzer $username an"
passwd $username
echo $username >> /etc/vsftpd.user_list
echo "Benutzer $username wurde angelegt"

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

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)
“Das einzig sichere System müsste ausgeschaltet, in einem versiegelten und von Stahlbeton ummantelten Raum und von bewaffneten Schutztruppen umstellt sein.”
Gene Spafford (Sicherheitsexperte)