Открыть сервисСервис

Scripting.FileSystemObject

Scripting.FileSystemObject — это компонент (объект) модели COM (Component Object Model), предоставляемый библиотекой сценариев Microsoft Windows (scrrun.dll). Он предназначен для выполнения операций с файловой системой из скриптовых сред, таких как VBScript и JScript, а также из других языков программирования, поддерживающих COM-технологию. Объект обеспечивает доступ к дискам, папкам и файлам, позволяя создавать, удалять, перемещать, копировать, переименовывать их, а также читать и записывать данные в текстовые файлы.

История и назначение

Объект Scripting.FileSystemObject (сокращённо FSO) был впервые представлен в составе Windows Script Host (WSH) — компонента операционных систем Microsoft Windows, начиная с версий Windows 95 и Windows NT 4.0. WSH предоставлял среду для выполнения скриптов на VBScript и JScript, и FSO стал стандартным инструментом для автоматизации задач, связанных с файловой системой.

До появления FSO разработчики скриптов были вынуждены использовать системные команды (например, через объект WScript.Shell и метод Run) или обращаться к API Win32 через сложные механизмы. FSO упростил эту задачу, предоставив интуитивно понятную объектную модель, где каждый элемент файловой системы (диск, папка, файл) представлен отдельным объектом со своими свойствами и методами.

Основное назначение FSO — автоматизация рутинных операций: создание резервных копий, обработка логов, массовое переименование файлов, сбор информации о дисковом пространстве и т.д. Он широко использовался в корпоративной среде для написания сценариев администрирования.

Технические аспекты

Архитектура COM

Scripting.FileSystemObject реализован как COM-сервер внутри библиотеки scrrun.dll. Для его использования в скрипте необходимо создать экземпляр объекта через функцию CreateObject:

``vbscript Set fso = CreateObject("Scripting.FileSystemObject") ``

После создания объекта становятся доступны его методы и свойства. Объектная модель FSO включает три основных иерархических уровня: Drives (коллекция дисков), Folders (коллекция папок) и Files (коллекция файлов). Каждый из этих элементов имеет собственные свойства (имя, размер, дата создания, атрибуты и т.д.) и методы (создание, удаление, копирование, перемещение).

Основные методы и свойства

  • Работа с дисками:
  • GetDrive(путь) — возвращает объект Drive для указанного пути.
  • Drives — коллекция всех доступных дисков.
  • Свойства объекта Drive: DriveLetter (буква диска), DriveType (тип: фиксированный, съёмный, сетевой и т.д.), TotalSize (общий размер), FreeSpace (свободное место), FileSystem (файловая система — NTFS, FAT32 и т.д.).
  • Работа с папками:
  • GetFolder(путь) — возвращает объект Folder.
  • CreateFolder(путь) — создаёт новую папку.
  • DeleteFolder(путь) — удаляет папку (с возможностью рекурсивного удаления).
  • CopyFolder(источник, назначение) — копирует папку.
  • MoveFolder(источник, назначение) — перемещает папку.
  • FolderExists(путь) — проверяет существование папки.
  • Свойства объекта Folder: Name, Path, Size, DateCreated, DateLastModified, SubFolders (коллекция вложенных папок), Files (коллекция файлов в папке).
  • Работа с файлами:
  • GetFile(путь) — возвращает объект File.
  • CreateTextFile(путь) — создаёт текстовый файл и возвращает объект TextStream для записи.
  • OpenTextFile(путь, режим) — открывает существующий текстовый файл (режимы: чтение, запись, добавление).
  • DeleteFile(путь) — удаляет файл.
  • CopyFile(источник, назначение) — копирует файл.
  • MoveFile(источник, назначение) — перемещает файл.
  • FileExists(путь) — проверяет существование файла.
  • Свойства объекта File: Name, Path, Size, Type, DateCreated, DateLastModified, Attributes (атрибуты: только чтение, скрытый, системный и т.д.).
  • Работа с текстовыми файлами (объект TextStream):
  • Read(количество_символов) — читает указанное количество символов.
  • ReadLine — читает одну строку.
  • ReadAll — читает весь файл целиком.
  • Write(строка) — записывает строку.
  • WriteLine(строка) — записывает строку и добавляет символ новой строки.
  • Close — закрывает файл.

Пути и синтаксис

FSO использует стандартные пути Windows (например, C:\Users\Имя\Documents\file.txt). Для сетевых путей используется UNC-формат (\\server\share\path). При работе с относительными путями FSO опирается на текущий рабочий каталог процесса, из которого запущен скрипт.

Примеры использования

Пример 1: Получение информации о дисках

``vbscript Set fso = CreateObject("Scripting.FileSystemObject") For Each drive In fso.Drives WScript.Echo "Диск: " & drive.DriveLetter WScript.Echo " Тип: " & drive.DriveType WScript.Echo " Свободно: " & drive.FreeSpace & " байт" WScript.Echo " Всего: " & drive.TotalSize & " байт" Next ``

Пример 2: Создание и запись в текстовый файл

``vbscript Set fso = CreateObject("Scripting.FileSystemObject") Set file = fso.CreateTextFile("C:\temp\log.txt", True) ' True — перезаписать существующий file.WriteLine "Запись лога: " & Now file.Close ``

Пример 3: Рекурсивный обход папок

```vbscript Sub ListFiles(folderPath) Set fso = CreateObject("Scripting.FileSystemObject") Set folder = fso.GetFolder(folderPath) For Each file In folder.Files WScript.Echo file.Path Next For Each subfolder In folder.SubFolders ListFiles(subfolder.Path) Next End Sub

ListFiles("C:\MyFolder") ```

Ограничения и безопасность

Ограничения

  • FSO не поддерживает работу с двоичными файлами (бинарными данными) напрямую. Для чтения и записи бинарных данных требуется использовать другие методы (например, ADODB.Stream).
  • Объект не предоставляет прямого доступа к атрибутам безопасности (разрешения NTFS) или к сжатию/шифрованию файлов.
  • FSO не поддерживает работу с файлами размером более 2 ГБ в некоторых старых версиях (до Windows XP SP2).
  • Не поддерживается работа с файловыми потоками (Alternate Data Streams) в NTFS.

Безопасность

  • Права доступа: FSO работает в контексте безопасности пользователя, запустившего скрипт. Это означает, что он может выполнять только те операции, на которые у пользователя есть права. Попытка доступа к защищённым системным папкам (например, C:\Windows\System32) может привести к ошибке.
  • Вредоносное использование: Из-за своей способности манипулировать файлами и папками FSO часто использовался вредоносными программами. Скрипты, использующие FSO, могут удалять, изменять или копировать файлы без ведома пользователя. В связи с этим во многих корпоративных средах выполнение скриптов WSH (и, соответственно, FSO) может быть заблокировано политиками безопасности.
  • Современные политики: В современных версиях Windows (начиная с Windows 10) по умолчанию отключено выполнение VBScript-скриптов для повышения безопасности. Это ограничивает использование FSO в классических сценариях WSH, хотя сам объект остаётся доступным через другие COM-совместимые языки (например, PowerShell, который, однако, имеет собственные, более мощные средства для работы с файловой системой).

Альтернативы

В современных средах разработки и администрирования FSO постепенно вытесняется более современными и безопасными инструментами:

  • PowerShell: Предоставляет командлеты Get-ChildItem, New-Item, Remove-Item, Copy-Item, Move-Item и другие, которые работают с объектами .NET (System.IO). PowerShell также поддерживает работу с двоичными файлами, потоками и разрешениями.
  • .NET Framework: Классы пространства имён System.IO (например, File, Directory, FileInfo, DirectoryInfo) предоставляют аналогичную функциональность с более широкими возможностями и лучшей производительностью.
  • Языки программирования высокого уровня: Python (модуль os и shutil), Perl, Ruby и другие имеют встроенные средства для работы с файловой системой, которые зачастую удобнее и безопаснее FSO.

Интересные факты

  • Несмотря на название, FSO не является частью файловой системы Windows. Это надстройка над API Win32, предоставляющая упрощённый интерфейс.
  • Объект TextStream, возвращаемый методами CreateTextFile и OpenTextFile, использует буферизацию, что может привести к задержкам при записи данных, если не вызвать метод Close.
  • FSO чувствителен к регистру в именах файлов и папок только в том случае, если файловая система (например, NTFS) настроена на учёт регистра, что в Windows по умолчанию не так.

Источники

  • Документация Microsoft по объекту Scripting.FileSystemObject (MSDN Library).
  • Книга «Windows Script Host. Справочник программиста» (автор: Д. К. Смит).
  • Материалы TechNet по автоматизации задач с помощью WSH.
  • Статья «FileSystemObject (FSO)» в английской версии Википедии.
Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru