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)» в английской версии Википедии.
