Revision: 55294
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at February 1, 2012 19:40 by crackiron
Initial Code
Imports System.IO Imports System.Text.RegularExpressions Module Module1 Sub Main() 'Ficheros necesarios para realizar la consulta Dim tsmFiles() As String = {"dscenu.txt", "dsmc.exe", "dsmntapi.dll", "dsmw2k.dll", "tsmapi.dll", "tsmutil1.dll", "uncpaths.lst", "dsm.opt"} 'Función que detecta si los ficheros del Array existen fileExists(tsmFiles) 'Definimos variables Dim uncPaths() As String Dim folderSizes() As Long Dim i As Integer = 0 'Console.WriteLine("TSM Directory Query Backup v0.8b, jrLambea") 'Console.WriteLine("--------------------------------") 'Console.WriteLine("Recuerda que el fichero que contiene las rutas UNC a consultar es el uncpaths.lst.") 'Console.WriteLine("+ delante para subdirectorios.") 'Console.WriteLine() 'Recorremos el fichero de entrada con todas las rutas, las metemos en el array uncPaths = getPaths("uncpaths.lst") Try 'Por cada ruta del array ... For Each var As String In uncPaths '... revisamos si es una ruta UNC ("\\") absoluta ("$"). If Left(var, 2) = "\\" And InStr(var, "$", CompareMethod.Text) Then 'Ampliamos el array según recorremos los elementos ReDim Preserve folderSizes(i) 'Actualitzem el fitxer dsm.opt updateOpt(Split(var, "\")(2)) 'Ejecutamos la consulta folderSizes(i) = getSize(var) 'Sacamos la información por stdout Console.WriteLine(var & ";" & folderSizes(i)) '+1! :D i += 1 '... revisamos si es una ruta UNC ("\\") absoluta ("$") pero teniendo encuenta subdirectorios ("+"). ElseIf Left(var, 3) = "+\\" And InStr(var, "$", CompareMethod.Text) Then 'Dimensionamos el array que contendrá los subdirectorios Dim subFolders() As String 'Informamos el directorio subfolder con los subdirectorios subFolders = Directory.GetDirectories(Replace(var, "+", "")) 'Recorremos los subdirectorios ubicados en el array anterior For Each dir As String In subFolders 'Ampliamos el array según recorremos los elementos ReDim Preserve folderSizes(i) 'Ejecutamos la consulta folderSizes(i) = getSize(dir) 'Sacamos la información por stdout Console.WriteLine(dir & ";" & folderSizes(i)) '+1! :3 i += 1 Next Else 'Si no cumple con las reglas anteriores el directorio es invalido. Console.WriteLine("Directorio " & var & " invalido.") End If Next 'En caso de error ... Catch ex As Exception ' ... muestra el error MsgBox(ex.Message) End Try End Sub Sub fileExists(ByVal sfile() As String) 'Por cada fichero del array sfile... For Each var As String In sfile ' ... si no existe ... If Not File.Exists(var) Then ' ... muestra el error de que no existe el fichero. Console.WriteLine("Falta el fichero " & var & " para el correcto funcionamiento del programa.") End End If Next End Sub Private Function getPaths(ByVal file As String) As String() 'Dimensionamos variables Dim sr As New System.IO.StreamReader(file, System.Text.Encoding.Default) Dim paths() As String = {""} Dim i As String = 0 'Recorremos el fichero While Not sr.EndOfStream 'Redimensionamos el array paths por cada ruta del array ReDim Preserve paths(i) 'Añadimos lÃnea paths(i) = sr.ReadLine '+1 ò_Ó i += 1 End While 'Cierra el fichero sr.Close() 'Retorna un array con rutas Return paths End Function Private Function getSize(ByVal path As String) As Long 'Dimensionamos las variables Dim tempFile As String = Environment.GetEnvironmentVariable("temp") & "\" & Now.ToFileTime Dim procStartInfo As New Process procStartInfo.StartInfo.FileName = "dsmc.exe" procStartInfo.StartInfo.Arguments = " query backup """ & path & "\*.*"" -subdir=yes " procStartInfo.StartInfo.RedirectStandardOutput = True procStartInfo.StartInfo.UseShellExecute = False Dim sw As New StreamWriter(tempFile, False, System.Text.Encoding.Default) Dim cadena, line As String Dim blank_line As Integer Dim bytes As Long = 0 procStartInfo.StartInfo.WindowStyle = ProcessWindowStyle.Minimized procStartInfo.Start() While blank_line < 5 line = procStartInfo.StandardOutput.ReadLine If line = vbNullString Then blank_line += 1 sw.WriteLine(procStartInfo.StandardOutput.ReadLine) End While sw.WriteLine(procStartInfo.StandardOutput.ReadLine) procStartInfo.WaitForExit() sw.Close() 'Esperamos un segundo System.Threading.Thread.Sleep(1000) 'Abrimos el fichero de salida del TSM Dim sr As New StreamReader(tempFile) 'Recorremos el fichero While Not sr.EndOfStream 'Informamos la variable con la lÃnea actual. cadena = sr.ReadLine 'Revisem si a la lÃnea apareix algún tipus d'espai en bytes If Regex.IsMatch(cadena, "[0-9] B", RegexOptions.None) Then 'Reemplacem tots els dobles espais per espais simples While Regex.IsMatch(cadena, " ", RegexOptions.None) cadena = Replace(cadena, " ", " ") End While 'Eliminem espais sobrants a inici i final de lÃnea cadena = Trim(Replace(cadena, ",", "")) 'Informem la variable bytes amb els bytes de la lÃnea. bytes = bytes + Split(cadena, " ", -1, CompareMethod.Text)(0) End If End While 'Cerramos el fichero sr.Close() 'Eliminamos el fichero Kill(tempFile) 'Devolvemos el número de bytes Return bytes End Function Private Sub updateOpt(ByVal server As String) 'Dimensionamos las variables Dim sw As New StreamWriter("dsm.opt", False, System.Text.Encoding.Default) sw.WriteLine("NODENAME " & server) sw.WriteLine("PASSWORDACCESS GENERATE") sw.WriteLine("TCPSERVERADDRESS XX.XX.XX.XX") sw.WriteLine("ENCRYPTIONTYPE DES56") sw.Close() End Sub End Module
Initial URL
http://www.eneseblog.com
Initial Description
Change XX.XX.XX.XX with your TSM Server IP
Initial Title
Know space occupied from a folder with a tsmquery
Initial Tags
Initial Language
VB.NET