Академия Специальных Курсов по Компьютерным Технологиям
    Главная страница Послать письмо
 
AskIt.ru  
   
   
   
   
   
   
 
 
  Главная / Заказные курсы / Программирование для администраторов
 
 

Получить учебные материалы по этому курсу


<-- Назад Читать дальше -->

8. Работа с объектами файловой системы

Работа с объектами файловой системы из скрипта VBScript, объектная библиотека ScriptingRuntime, объекты FileSystemObject, Drive, Folder, File, TextStream, просмотр всех каталогов на диске, запись/чтение информации из текстового файла

Основные возможности работы с объектами файловой системы через WSH реализованы при помощи класса FileSystemObject, который физически находится в библиотеке Scrrun.dll. Как правило, работа начинается с создания объекта FSO:

Dim fso1

Set fso1 = WScript.CreateObject("Scripting.FileSystemObject")

Далее используем созданный объект для выполнения различных операций.

Наиболее часто используемые возможности:

1) просмотреть/запротоколировать информацию о всех дисках на компьютере (используется свойство Drives, возвращающее набор дисков, и свойства объекта Drive):

Set oDrives = fso1.Drives

For Each i In oDrives

            MsgBox ("Буква диска: " & i.DriveLetter & " Тип диска: " & i.DriveType  & "Метка диска: " & i.VolumeName & " Готовность к работе: " & i.IsReady)

Next

Подробнее про объект Drive - ниже.

2) получить список всех подкаталогов данного каталога (используется свойство GetFolder и далее возможности объекта Folder):

Set oFolders = fso1.GetFolder("C:\")

Set oSubfolders = oFolders.SubFolders

For Each oFolder In oSubFolders

            strListFolders = strListFolders & oFolder.Name & vbCrLf

Next   

MsgBox strListFolders

3) получить информацию о физическом размере диска (свойство объекта Drive TotalSize):

Set oDrive1 = fso1.GetDrive("C")

nSize = FormatNumber (oDrive1.TotalSize,0)

MsgBox nSize

4) получить информацию о размере свободного пространства (свойства объекта Drive FreeSpace и AvailableSpace; FreeSpace выводит информацию об физическом свободном пространстве, AvailableSpace - информацию о свободном пространстве, доступном текущему пользователю - с учетом дисковой квоты)

Set oDrive1 = fso1.GetDrive("C")

nSize = FormatNumber (oDrive1.TotalSize,0)

MsgBox nSize

5) скопировать каталог со всем содержимым (используется метод CopyFolder, true означает - перезаписывать содержимое, используется по умолчанию, поэтому можно не указывать)

fso1.CopyFolder "C:\Diagnostics", "d:\Diagnostics", true

Аналогично производится перемещение и удаление папок.

6) удалить все файлы с определенным именем (например, борьба с вирусами или компьютерными игрушками). Само удаление произвести несложно: для этого используется метод DeleteFile:

fso1.DeleteFile "C:\scandisk.log", True       'true означает, что удаляем в том числе и read-only файлы

Однако обычно нужно решить еще две задачи:

o       обеспечить отсутствие run-time error, если проблемы с удаление файла (файл открыт и т.п.)

o       подключиться к нужному каталогу

o       пройти по всем каталогам и подкаталогам, удаляя данный файл.

Каждую из этих задача удобнее решать при помощи отдельных подпроцедур. Первая решается так:

Sub FileDelete(sFile)

            On Error Resume Next

            Fso1.DeleteFile (sFile)

                        If Err.Number <> 0 Then

                                   WScript.Echo "Error deleting file: " & sFile

End If

End Sub

Для простоты мы выводим сообщение пользователю, однако в реальной работе лучше в случае возникновения ошибки писать протокол в текстовый файл для администратора (об этом позже).

Чтобы подключиться к нужному подкаталогу:

Function GetFolder (sFolder)

            On Error Resume Next

            Set GetFolder = Fso1.GetFolder (sFolder)

            If Err.Number <> 0 Then

                        WScript.Echo "Error connecting to folder: " & sFolder

            WScript.Quit Err.Number

End If

End Function

Чтобы пройтись по всем подкаталогам:

Sub RunSubFolders (objFolder)

            If objFolder <> "\System Volume Information" Then

            MainSub objFolder

                        For Each iFolder in objFolder.SubFolders

                         RunSubFolders iFolder

                        Next

            End If

End Sub

Проверка на System Volume Information - потому что при обращении к нему возникает ошибка.

Теперь решаем нашу задачу:

sDir = "C:"

sFile = "lines.exe"

Set objDir = GetFolder (sDir)

RunSubFolders (objDir)

Sub MainSub (objDir)

            For Each eFile in objDir.Files

            If LCase(eFile.Name) = LCase(sFile) Then

            FileDelete eFile

            End If

            Next

End Sub

Конечно, в реальной работе лучше протоколировать удаление всех файлов.

7) поменять атрибуты файла (например, скрыть важные файлы ил установить для них режим read-only).

Для подключения к существующему файлу лучше всего использовать специальную подпроцедуру GetFile (аналог GetFolder в предыдущем примере):

Function GetFile(sFile)

            On Error Resume Next

            Set GetFile = Fso1.GetFile(sFile)

            If Err.Number <> 0 Then

                        WScript.Echo("Error Connecting to: " & sFile

                        WScript.Quit Err.Number

            End If

End Function

Атрибуты файла определяются как битовая маска - значение свойства Attributes. Просмотреть возможные значения можно через справку по WSH 5.6, Attributes property.

Установить проще всего так (в нашем примере устанавливаем значение Read-Only):

Set gFile = GetFile ("C:\test1.txt")

gFile.Attributes = 1

8) прочесть информацию из текстового файле

Set TxtStream = fso1.OpenTextFile("\\london1\c$\test1.txt")

            Do While Not (TxtStream.atEndOfStream)

            Text = Text & TxtStream.ReadLine & vbCrlf

            Loop

MsgBox Text

Большие файлы настоятельно рекомендуется открывать на чтение в окне Internet Explorer тем же методом Navigate.

9) запись / добавление информации к текстовому файлу. Эта возможность используется очень часто - например, для протоколирования хода выполнения скрипта или фиксирования результатов обследования компьютеров пользователей. В некоторых ситуациях файл можно обрабатывать дальше - например, переслать его по электронной почте средствами CDO (об этом в следующих модулях) или средствами DTS положить на сервер баз данных.

Выглядит это так:

            If Fso1.FileExists ("C:\test1.txt") Then

            Set txtStreamOut = fso1.OpenTextFile("C:\test1.txt",8,True)

            ' "2" означает "открыть на добавление", True - писать в Unicode

                                   txtStreamOut.WriteLine "Строка 1"

                                   txtStreamOut.WriteLine "Строка 1"

            Else

            Set MyFile = fso1.CreateTextFile("C:\test1.txt")

            MyFile.WriteLine "Строка 1"

            MyFile.WriteLine "Строка 2"

            End If

Ограничения WSH при работе с файловой системой:

  • WSH в принципе не умеет работать с двоичными файлами - только текстовыми;
  • при помощи WSH нельзя настроить разрешения и аудит для файлов (это можно сделать средствами WMI).

Многие дополнительные возможности работы в файловой системе можно получить при помощи утилит командной строки из Resource Kit:

  • associate - позволяет создать ассоциацию программы с расширением имени файла;
  • diruse - просмотреть информацию о используемом пространстве, включая файлы и каталоги, превышающие определенный размер;
  • diskmap - в командой стоке просмотреть информацию о размере физического диска и его геометрии;
  • diskuse - показать, сколько места на диске занимают файлы каждого пользователя (по владельцам)
  • dupfinder - найти повторяющиеся файлы на дисках;
  • fcopy и robocopy - утилиты надежного копирования файлов (даже если проблемы с сетью). fcopy использует Message Queuing, robocopy - свою службу
  • freedisk - возвращает объем свободного пространства на диске;
  • mcopy/mtc (эквиваленты copy и xcopy)  - копирование с созданием протокола копирования;
  • qgrep - аналог Unix grep, поиск строки в указанном файле (файлах)
  • perms - выводит разрешения для указанного файла;
  • showacls - тоже выводит разрешения, но уже для файла, каталога или дерева каталогов, в более удобном формате;
  • subinacl - позволяет выводить информацию о разрешениях на файлы (а также ключи реестра и службы) и переносить разрешения с одного пользователя на другого;
  • where - ищет файлы в указанном вами месте;
  • xcacls - позволяет менять разрешения на файлы из командной строки.

Скопировать/перенести файлы с сохранением всех разрешений (например, на новый файл-сервер) позволяет обычный FAR (или стандартная утилита Microsoft XCOPY).

 

   
   
   
   
   
   
   
   
   
   
 
<-- Назад Читать дальше -->

Получить учебные материалы по этому курсу


 

 
© 2004-2016, Академия Специальных Курсов
по Информационным Технологиям
.
Все права защищены.

Разработка NevaStudio
г. Санкт-Петербург, Васильевский остров,
20-я линия, д. 7
Офис 101, 2-й этаж
Телефон: 8(812)922-47-60
E-mail: info@askit.ru