VBScript a ASP
Zjištění atributů souboru
Skriptík vypíše atributy souboru. Popis je ve skriptu. Využít lze například při porovnávání souborů u zálohování a podobně.
option explicit
dim text, fso, valueFile, objFile
valueFile="C:\!\Staty.CSV"
' kontrola, zda existuje uvedený soubor
Set fso = CreateObject("Scripting.FileSystemObject")
If Not (fso.FileExists(ValueFile)) Then
'wscript.quit 3
wscript.echo ("Nenalzen: " + ValueFile)
Wscript.Quit
End If
' vypis atributu
Set objFile = fso.GetFile(ValueFile)
text = "ATTRIBUTES file: " & valueFile & VbCrLf
text = text & "Velikost: " & CSTR(objFile.size) & VbCrLf
text = text & "Vytvořeno: " & objFile.DateCreated & VbCrLf
text = text & "Datum - 1: " & DATE()-1 & VbCrLf
text = text & "Poslední přístup: " & objFile.DateLastAccessed & VbCrLf
text = text & "Poslední změna: " & objFile.DateLastModified & VbCrLf
text = text & "Atributy: " & objFile.Attributes & VbCrLf
text = text & "Drive: " & objFile.Drive & VbCrLf
text = text & "Name: " & objFile.Name & VbCrLf
text = text & "Path: " & objFile.Path & VbCrLf
text = text & "Parent folder: " & objFile.ParentFolder & VbCrLf
text = text & "ShortPath: " & objFile.ShortPath & VbCrLf
text = text & "ShortName: " & objFile.ShortName & VbCrLf
text = text & "Type: " & objFile.Type & VbCrLf
wscript.echo text
Set objFile = nothing

Dotaz do active directory
Kontrola uživatele dotazem do databáze uživatelů Active directory.
strContainerDN = "ou=Praha,ou=rrr,ou=PP,ou=Pol,dc=prac,dc=cz"
dim objDomain
set objDomain=getObject("LDAP://DC=prac,DC=cz")
response.write "Domena: <br>"
response.write "ADsPath: " & objDomain.ADsPath & "<br>"
response.write "Schema: " & objDomain.Schema & "<br>"
response.write "Parent: " & objDomain.Parent & "<br>"
response.write "Name: " & objDomain.Name & "<br>"
objDomain.Filter = Array("User")
for each objUser in objDomain
response.write "Jmeno: " & objUser.Name & "<br>"
response.write "Common name: " & objUser.cn & "<br>"
response.write "Prihlas. jmeno: " & objUser.sAMAccountName & "<br>"
next

Zálohování se zápisem do logu
Zálohování kopírováním
Pro každodenní zálohování používám tento skript. Komentáře je přímo v textu skriptu, takže není nutné vysvětlovat. Vytvářený logsoubor je kontrolován na velikost 500kB a v případě "přetečení" vytváří skript nový logsoubor.
@echo off

REM <<<<<<<<< DENNI ZALOHA ODL >>>>>>>>>

REM -------------------------------------------------------------------------------------
REM | Script provede zalohu DBF SQL serveru na dálku !!! Dávkový soubor .bat !!! |
REM | soubory RARuje a posléze COPY do vzdáleného PC |
REM | @ simi 01.10.2008 |
REM --------------------------------------------------------------------------------------
REM od kud byl spusten soubor BAT
SET BatchPath=%~dp0
REM nazev souboru ".log" <<<<<<<<<<<< PROMENA >>>>>>>>>>>>>
SET souborlog=denZalOdl.log
REM Je-li soubor logů vetsi nez 50kb, prejmenuje jej a tim vytvori dalsi soubor. <<<<<<<<<<<< PROMENA >>>>>>>>>>>>>
cscript C:\bat\NewToSize.vbs /VFile:C:\bat\denZalOdl.log /SFile:50000
IF %ERRORLEVEL% EQU 0 ECHO NewToSize = OK >> %BatchPath%%souborlog%
IF %ERRORLEVEL% EQU 1 ECHO NewToSize = Neni zadan VFile >> %BatchPath%%souborlog%
IF %ERRORLEVEL% EQU 3 ECHO NewToSize = Kontrola VFile = FALSE >> %BatchPath%%souborlog%
ECHO . >> %BatchPath%%souborlog%
ECHO *********************************************************************************************** >> %BatchPath%%souborlog%
ECHO * * >> %BatchPath%%souborlog%
ECHO *(( ====== %date% ================ START SCRIPT ================= %Time% ===== ))* (%souborlog%) >> %BatchPath%%souborlog%
ECHO * * >> %BatchPath%%souborlog%
ECHO *********************************************************************************************** >> %BatchPath%%souborlog%
ECHO . >> %BatchPath%%souborlog%
REM <---------------------------------------- SQL --------------------------------------->
ECHO ( ------ Datum:%date% - Cas:%Time% -- In procedure SQL ------- ) >> %BatchPath%%souborlog%
REM Samotny prikaz pro osql (celou cestu mam z duvodu, ze je na tomto PC dalsi SQL a to
REM SQL 2005 pro LSML, kdyz to tam nedam, tak se predhaneji, kdo OSQL prednostne obslouzi)
REM Celou cestu kam jsem uvedl, jelikoz se mi nepovedlo dat do tothoto prikazu promene.
REM <<<<<<<<<<<< PROMENA >>>>>>>>>>>>>
osql /S 10.108.35.110 /U backup /P ZalohaZde /e -r -n /d master /i C:\bat\JobZalJp.sql >> %BatchPath%%souborlog%
ECHO ------- Datum:%date% - Cas:%Time% -- Out procedure SQL ------- >> %BatchPath%%souborlog%
PAUSE
EXIT
REM <---------------------------------------- RAR --------------------------------------->
ECHO (------ Datum:%date% - Cas:%Time% -- In procedutre Rar ------) >> %BatchPath%%souborlog%
@echo off
REM Script veme vsechny soubory i podadresare v adresari odkud
REM nasledovne je zaRARuje do soubor.exe nazev souboru je datum do adresare cil
REM veme zararovany soubor a zkopiruje jej do adresare cil
REM POZOR script pouziva stejne promene v rar procedure a xcopy procedure (cil, odkud)
REM cesta k zalloh. data u RAR <<<<<<<<<<<< PROMENA >>>>>>>>>>>>>
SET odkud=\\10.108.35.110\C$\MSSQL7\backup\*.bcp
REM cilovy adresar zalohy u RAR <<<<<<<<<<<< PROMENA >>>>>>>>>>>>>
SET cil=D:\Zalohy\ven\JpOdl\
REM samotný příkaz RAR
REM a = komprimovat kam - co
REM -sfx = do exe souboru, -ag = datum zalohy v názvu souboru
REM -idp = bez procent v příkazovém rádku, -y = vše ano
REM -ep1 = cesta jen k prvému adresári - né cela <<<<<<<<<<<< PROMENA >>>>>>>>>>>>>
rar a -sfx -ep1 -idp -ag{JpDok}yyyymmdd %cil% %odkud% >> %BatchPath%%souborlog%
ECHO -------- Datum:%date% - Cas:%Time% -- Out procedutre Rar -------- >> %BatchPath%%souborlog%
REM ---------------------------------------- DELETE ------------------------------------>
ECHO (-------- In delete: %odkud% - Datum:%date% - Cas:%Time% ------) >> %BatchPath%%souborlog%
ERASE /F /Q %odkud% >> %BatchPath%%souborlog%
ECHO ----- Out delete: %odkud% - Datum:%date% - Cas:%Time% >> %BatchPath%%souborlog%
ECHO . >> %BatchPath%%souborlog%
ECHO *(( ====== %date% ================ EXIT SCRIPT ================= %Time% ===== )) >> %BatchPath%%souborlog%
ECHO . >> %BatchPath%%souborlog%
ECHO . >> %BatchPath%%souborlog%
REM KONEC
EXIT
Kontrola velikosti souboru
Kontrola velkosti souboru je vytvořena ve VBScriptu. Je zřejmé, že celý skript je možné napsat v jednom skriptu. Rozdělení do dvou souborů bylo podmíněno systémem v kterém to využívám.
' --------------------------------------------------------------------------------------------------------
' NEW TO SIZE wscript simi @05.10.2008

' Zjisti, zda je soubor vetsi nez avizivane cislo. Neni-li cislo, automaticky
' porovnava s hodnotou 500 000 b. Je-li vetsi tak jej premenuje do formatu
' soubor - rok - mesic - den "archiv.log"

' Format dotazu: " NewToSize.vbs /VFile:C:\cesta\soubor.log /SFile:5000
' VFile = soubor, který porovnávám i s uplnou cestou
' SFile = velikost, kterou porovnavame avizovany soubor

' Kontrolni vystup:
' 0 = vse OK (Bud prejmenuje, nebo neprejmenuje)
' 1 = nemam nazev souboru
' 2 =
' 3 = kontrola souboru je FALSE
' --------------------------------------------------------------------------------------------------------

' Deklarace a jeji povinnost
OPTION EXPLICIT
Dim ValueFile ' argument 1 (název souboru i s cestou, který je kontrolován na velikost )
Dim SizeFile ' argument 2 (kontrolovaná velikost souboru, jinak 500kb)
Dim fso, objFile ' FileSystemObjects
Dim NewFileName ' novy nazev souboru
Dim den, mesic, DateName ' promene na skladani textu aktualniho datumu pro novy nazev archivu

' -------------- Nastaveni a kontrola argumentu
' priklad vstupu: NewToSize.vbs /VFile:"Treba takto to bude. " /SFile:1000000
If Not wscript.arguments.named.exists("VFile") Then
wscript.quit 1
End if
ValueFile=wscript.arguments.named("VFile")
If wscript.arguments.named.exists("SFile") Then
SizeFile=wscript.arguments.named("SFile")
ELSE
SizeFile=500000
End if

' kontrola, zda existuje uvedený soubor

Set fso = CreateObject("Scripting.FileSystemObject")
If Not (fso.FileExists(ValueFile)) Then
wscript.quit 3
End If

' -------------- Kontroly a porovnani velikosti -------------------------------

' kontrola velikosti
Set objFile = fso.GetFile(ValueFile)

IF CLng(SizeFile) > CLng(objFile.size) Then
wscript.quit 0
' wscript.echo "Jsem uprostřed IF"
END IF

' -------------- Sestaveni aktualniho dne, tvorba noveho jmena a prejmenovani -------------------

' Soubor je větší a proto budu přepisovat název
' Aktualni datum do textu!!!
' Datum na 8 znaku a ve formatu rrrrmmdd
IF day(date()) < 10 THEN
den="0" + CStr(day(date()))
ELSE
den=CStr(day(date()))
END IF
IF month(date()) < 10 THEN
mesic="0" + CStr(month(date()))
ELSE
mesic=CStr(month(date()))
END IF
DateName=CStr(year(date())) + mesic + den

' poskládání nového názvu souboru logu
NewFileName=fso.BuildPath(objFile.ParentFolder, fso.GetBaseName(ValueFile) & DateName & "archiv.log")

' Prejmenovani souboru!!!
fso.MoveFile ValueFile, NewFileName

' zavre objekty
SET objFile=Nothing
SET fso=Nothing

' zavre wscript a posle "0"
wscript.quit 0


Převod logsouboru do textové podoby s výběrem dat
Komentováno přímo ve skriptu.
' VBScript.
OPTION EXPLICIT

' promene
DIM FileName, objFso, objLogFile, datumCas
DIM WshNetwork
Const ForWriting = 2

' Datum na 12 znaku a ve formatu rrrrmmdd a k tomu cas ve formatu hhmmss
datumCas = Cifra(CStr(year(date))) & Cifra(CStr(month(date()))) & Cifra(CStr(day(date())))
datumCas = datumCas & Cifra(CStr(hour(time()))) & Cifra(CStr(minute(time()))) & Cifra(CStr(second(time())))

Dim oLogQuery
Dim oIISW3CInputFormat
Dim strQuery
Dim oRecordSet
Dim oRecord
Dim strClientIp
Dim text
text = ""

' Vycuc EventLogu
Set oLogQuery = CreateObject("MSUtil.LogQuery")
' Create Input Format object
Set oIISW3CInputFormat = CreateObject("MSUtil.LogQuery.EventLogInputFormat")

' Create query text
strQuery = "SELECT TOP 2 TimeWritten, ComputerName, EventID, Strings FROM Security WHERE EventID = 540 ORDER BY TimeWritten DESC"

' Execute query and receive a LogRecordSet
Set oRecordSet = oLogQuery.Execute ( strQuery, oIISW3CInputFormat )

' Visit all records
DO WHILE NOT oRecordSet.atEnd
' Get a record
Set oRecord = oRecordSet.getRecord

' Print field value
text=text & oRecord.getValue ( 0 ) & ","
text=text & oRecord.getValue ( 1 ) & ","
text=text & oRecord.getValue ( 2 ) & ","
text=text & oRecord.getValue ( 3 )
text=text & vbCrLf

' Advance LogRecordSet to next record
oRecordSet.moveNext
LOOP

' Close RecordSet
oRecordSet.close

' Nacteni systemovych promenych
Set WshNetwork = WScript.CreateObject("WScript.Network")

' konstrukce nazvu souboru
FileName=WshNetwork.ComputerName & "_" & datumCas & ".imi"

' zapis do souboru
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objLogFile = objFSO.CreateTextFile(FileName, _
ForWriting, True)

objLogFile.Write "FileName = " & FileName
objLogFile.Writeline
objLogFile.Write "UserName = " & WshNetwork.UserName
objLogFile.Writeline
objLogFile.Write "ComputerName = " & WshNetwork.ComputerName
objLogFile.Writeline
objLogFile.Write "EventLog: "
objLogFile.Writeline
objLogFile.Write text
objLogFile.Writeline
objLogFile.Close

Function Cifra(n)
if len(n)=1 then Cifra="0"
Cifra=Cifra & n
end function

WScript.Quit