Уровень сложностиСредний
Время на прочтение2 мин
Количество просмотров5.9K
Одной из наверное классических задач системного администратора является организация общей шары (файлопомойки), для оперативного обмена данными между сотрудниками.
Одной из проблем является то что этот «Обменник» превращается в инструмент долговременного хранения файлов, что недопустимо. посему всем сотрудникам сообщаем, что данные будут регулярно удаляться через N дней после их размещения на шаре.
А сами вооружаемся powershell и task scheduler, создаем скрипт со следующим содержимым и в планировщике ставим его на ежедневное исполнение
#Дата с которой сравнивать. В этом случае -15 дней от текущей даты
$date = (Get-Date).AddDays(-15)
#Путь до директории откуда удалять файлы
$path = "d:\data\public"
#Расположение отчетов
$report = "C:\scripts\Result\file_list.txt"
#Работаем с файлами
#Вывод спписка всех файлов без папок (в т.ч. внутри папок) старше чем значение в $date
$filelist = Get-ChildItem -Recurse -Path $path -file | Where-Object -Property CreationTime -lT $date
$filelist | Sort-Object -Property CreationTime | ft CreationTime ,VersionInfo | tee $report
#Удаляем файлы
#$filelist | Remove-Item
#Работаем с каталогами
#вывод списка пустых директорий(где нет ни файлов ни директорий) старше чем дата $date
$folderlist = Get-ChildItem -Recurse -Path $path -Directory | Where-Object -Property LastWriteTime -lT $date | where { $_.psiscontainer -eq $true -and $_.GetFiles().count -eq 0 -and $_.GetDirectories().count -eq 0 }
#вывод списка пустых директорий (где нет файлов, но есть директории) старше чем дата $date
#$folderlist = Get-ChildItem -Recurse -Path $path -Directory | Where-Object -Property LastWriteTime -lT $date | where { $_.psiscontainer -eq $true -and $_.GetFiles().count -eq 0 }
$folderlist | Sort-Object -Property LastWriteTime | ft LastWriteTime ,FullName | tee $report -Append
#Удаляем каталоги
#$folderlist | Remove-Item
P.s чукча не писатель и не великий кодер, пишу как умею
Ссылка на гит https://github.com/fiverok/psscripts/blob/main/Del_old_files.ps1
+2
Комментарии16
copy C:\Windows\WinSxS\amd64_microsoft-windows-cleanmgr.resources_31bf3856ad364e35_6.2.9200.16384_en-us_b6a01752226afbb3\cleanmgr.exe.mui C:\Windows\System32\en-US\
Windows Server 2012 R2 x64
Рассмотренный выше трюк не работает в Windows Server 2012 R2 из-за изменений, внесенных обновлением KB2821895. Дело в том, что после установки данного обновления для хранения бинарных файлов компонентов стала использоваться компрессия. При попытке запустить скопированный cleanmgr.exe появляется ошибка:
В качестве обходного решения можно воспользоваться такой методикой:
В дальнейшем эти два файла можно скопировать и на все другие сервера или интегрировать в шаблоны виртуальных машин с Windows Server 2012 R2.
dism.exe /online /Cleanup-Image /StartComponentCleanup /ResetBase
В Windows Server 2008 R2, чтобы cleanmgr могла удалять устаревшие файлы обновлений нужно установить отдельный патч KB2852386.
Источник
Использование очистки диска на Windows Server Using Disk Cleanup on Windows Server
Применяется к: Windows Server 2019, Windows Server 2016, Windows Server 2016 R2, Windows Server 2012, Windows Server 2012 R2 Applies to: Windows Server 2019, Windows Server 2016, Windows Server 2012 R2, Windows Server 2012, Windows Server 2008 R2
Средство очистки диска удаляет ненужные файлы в среде Windows Server. The Disk Cleanup tool clears unnecessary files in a Windows Server environment. Это средство доступно по умолчанию в Windows Server 2019 и Windows Server 2016, но в более ранних версиях Windows Server могут потребоваться дополнительные действия вручную для его включения. This tool is available by default on Windows Server 2019 and Windows Server 2016, but you might have to take a few manual steps to enable it on earlier versions of Windows Server.
Чтобы запустить средство очистки диска, выполните команду cleanmgr.exe или последовательно выберите Пуск, Средства администрирования Windows, Очистка диска. To start the Disk Cleanup tool, either run the Cleanmgr.exe command, or select Start, select Windows Administrative Tools, and then select Disk Cleanup.
Кроме того, средство очистки диска можно запустить командой Windows cleanmgr, указав в параметрах командной строки параметры для удаления определенных файлов. You can also run Disk Cleanup by using the cleanmgr Windows command and use command-line options to specify that Disk Cleanup cleans up certain files.
Если вы просто хотите освободить место на диске, рассмотрите возможность использования Синхронизации файлов Azure с включенным распределением по уровням облака. If you’re just looking to free up disk space, consider using Azure File Sync with cloud tiering enabled. Благодаря этому вы сможете кэшировать часто используемые файлы локально и распределять редко используемые файлы по уровням облака, сохраняя пространство в локальном хранилище и поддерживая производительность. This allows you to cache your most frequently accessed files locally and tier your least frequently accessed files to the cloud, saving local storage space while maintaining performance. Дополнительные сведения см. в статье Планирование развертывания Синхронизации файлов Azure. For details, see Planning for an Azure File Sync deployment.
Включение очистки диска в более ранней версии Windows Server с помощью установки возможности рабочего стола Enable Disk Cleanup on an earlier version of Windows Server by installing the Desktop Experience
Выполните описанные ниже действия, чтобы использовать мастер добавления ролей и компонентов для установки возможностей рабочего стола на сервере под управлением Windows Server 2012 R2 или более ранней версии, в составе которых устанавливается и средство очистки диска. Follow these steps to use the Add Roles and Features Wizard to install the Desktop Experience on a server running Windows Server 2012 R2 or earlier, which also installs Disk Cleanup.
Если диспетчер серверов уже открыт, переходите к следующему шагу. If Server Manager is already open, go on to the next step. Если диспетчер серверов еще не открыт, откройте его одним из следующих способов. If Server Manager is not already open, open it by doing one of the following.
На рабочем столе Windows запустите диспетчер серверов, щелкнув Диспетчер серверов на панели задач Windows. On the Windows desktop, start Server Manager by clicking Server Manager in the Windows taskbar.
Откройте Начальный экран и щелкните плитку «Диспетчер сервера». Go to Start and select the Server Manager tile.
В меню Управление выберите добавление ролей и компонентов. On the Manage menu, select add Roles and Features.
На странице Прежде чем приступить к работе проверьте готовность конечного сервера и сетевого окружения к установке нужного компонента. On the Before you begin page, verify that your destination server and network environment are prepared for the feature that you want to install. Выберите Далее. Select Next.
На странице Выбор типа установки выберите Установка ролей или компонентов, чтобы установить все компоненты для отдельного сервера. On the Select installation type page, select Role-based or feature-based installation to install all parts features on a single server. Выберите Далее. Select Next.
На странице Выбор целевого сервера выберите сервер из пула серверов или автономный виртуальный жесткий диск. On the Select destination server page, select a server from the server pool, or select an offline VHD. Выберите Далее. Select Next.
На странице Выбор ролей сервера щелкните Далее. On the Select server roles page, select Next.
На странице Выбор компонентов выберите элемент Пользовательский интерфейс и инфраструктура, а затем — Возможности рабочего стола. On the Select features page, select User Interface and Infrastructure, and then select Desktop Experience.
В диалоговом окне Добавление компонентов, необходимых для возможностей рабочего стола щелкните элемент Добавить компоненты. In Add features that are required for Desktop Experience?, select Add Features.
Продолжите установку, затем перезагрузите систему. Proceed with the installation, and then reboot the system.
Убедитесь, что в диалоговом окне «Свойства» появилась кнопка Очистка диска. Verify that the Disk Cleanup option button appears in the Properties dialog box.
Добавление средства очистки диска вручную на более ранних версиях Windows Server Manually add Disk Cleanup to an earlier version of Windows Server
Средство очистки диска (Cleanmgr.exe) отсутствует в Windows Server 2012 R2 и более ранних версиях, если не установлен дополнительный компонент «Возможности рабочего стола». The Disk Cleanup tool (cleanmgr.exe) isn’t present on Windows Server 2012 R2 or earlier unless you have the Desktop Experience feature installed.
Чтобы использовать программу cleanmgr.exe, установите возможности рабочего стола, как описано выше, или скопируйте два файла cleanmgr.exe и cleanmgr.exe.mui, которые уже имеются на сервере. To use cleanmgr.exe, install the Desktop Experience as described earlier, or copy two files that are already present on the server, cleanmgr.exe and cleanmgr.exe.mui. С помощью следующей таблицы выберите нужные файлы для используемой операционной системы. Use the following table to locate the files for your operating system.
Операционная система Operating System | Архитектура Architecture | Расположение файла File Location |
---|---|---|
Windows Server 2008 R2 Windows Server 2008 R2 | 64-разрядная 64-bit | C:\Windows\winsxs\amd64_microsoft-windows-cleanmgr_31bf3856ad364e35_6.1.7600.16385_none_c9392808773cd7da\cleanmgr.exe C:\Windows\winsxs\amd64_microsoft-windows-cleanmgr_31bf3856ad364e35_6.1.7600.16385_none_c9392808773cd7da\cleanmgr.exe |
Windows Server 2008 R2 Windows Server 2008 R2 | 64-разрядная 64-bit | C:\Windows\winsxs\amd64_microsoft-windows-cleanmgr.resources_31bf3856ad364e35_6.1.7600.16385_en-us_b9cb6194b257cc63\cleanmgr.exe.mui C:\Windows\winsxs\amd64_microsoft-windows-cleanmgr.resources_31bf3856ad364e35_6.1.7600.16385_en-us_b9cb6194b257cc63\cleanmgr.exe.mui |
Найдите файл cleanmgr.exe и переместите его в папку %systemroot%\System32. Locate cleanmgr.exe and move the file to %systemroot%\System32.
Найдите файл cleanmgr.exe.mui и переместите его в папку %systemroot%\System32\en-US. Locate cleanmgr.exe.mui and move the files to %systemroot%\System32\en-US.
Теперь вы можете запустить средство очистки диска, выполнив команду Cleanmgr.exe из командной строки, или открыв начальный экран и набрав строку Cleanmgr на панели поиска. You can now launch the Disk cleanup tool by running Cleanmgr.exe from Command Prompt, or by clicking Start and typing Cleanmgr into the search bar.
Чтобы в диалоговом окне «Свойства» для диска появилась кнопка «Очистка диска», необходимо установить компонент «Возможности рабочего стола». To have Disk Cleanup button appear on a disk’s Properties dialog, you will also need to install the Desktop Experience feature.
Источник
Аудит удаления файлов в сетевой папке на Windows Server
С помощью аудита событий доступа к объектам файловой системы вы можете определить конкретного пользователя, который создал, удалил или изменил определенный файл. В этой статье мы покажем, как настроить аудит событий удаления объектов в общей сетевой папке на Windows Server 2016. После настройки аудита, вы можете с помощью информации в журнале событий найти пользователя, который удалил на файловом сервере.
Включаем политику аудита доступа к файлам и папкам в Windows
По умолчанию в Windows Server не включен аудит событий доступа к объектам на файловой системе. Вы можете включить и настроить аудит событий с помощью групповой политики. Если нужно включить политики аудита на нескольких серверах или компьютера, можно использовать доменные GPO (настраиваются с помощью консоли управления gpmc.msc). Если нужно настроить аудит только на одном сервере, можно воспользоваться локальной групповой политикой.
Настройка аудита событий удаления файлов из конкретной папки
Если появится сообщение You must be an administrator or have been given the appropriate privileges to view the audit properties of this object, нажмите кнопку Continue.
Затем нажмите кнопку Add чтобы указать пользователя или группу, для которых нужно записывать все события аудита. Если вы хотите отслеживать события для всех пользователей, укажите группу Everyone.
Затем нужно указать использование каких разрешений доступа к объекту нужно записывать в лог. Чтобы сохранять в Event Log только события удаления файлов, нажмите кнопку Show advanced permissions. В списке событий оставьте аудит только для событий удаления папок и файлов — Delete и Delete subfolders and files.
Откройте любой их оставшихся событий в Event Viewer. Как вы видите, в нем есть информация об имени удаленного файла и учетной записи пользователя, который удалил файл.
После настройки аудита, найдите в журнале Security вы сможете найти с:
Запись событий удаления файлов в SQL базу (MySQL/MSSQL)
Если после включения аудита удаления файлов в сетевой папке, вы видите в журнале много событий, найти что-то в логах бывает проблематично. Во-первых, найти нужную запись среди тысячи событий довольно сложно (в Windows отсутствуют вменяемые средства поиска интересующего события с возможностью гибкой фильтрации), а во-вторых, если файл был удален давно, это событие может просто отсутствовать в журнале, т.к. было перезатерто более новыми.
Вы можете записывать все нужные событий в отдельную SQL базу данных. Для хранения событий можно использовать Microsoft SQL Server, Elasticsearch или MySQL/MariaDB.
В этом примере мы покажем, как записывать события аудита в отдельную таблицу БД на сервере MySQL. Формат таблицы:
MySQL запрос на создание такой таблицы будет выглядеть так:
CREATE TABLE track_del (id INT NOT NULL AUTO_INCREMENT, server VARCHAR(100), file_name VARCHAR(255), dt_time DATETIME, user_name VARCHAR(100), PRIMARY KEY (ID));
Если вы хотите использовать Microsoft SQL, обратите внимание на статью “Как выполнить запрос к MSSQL Server из скрипта PowerShell?”.
Для получения событий с EventID 4663 из журнала Security за текущий день можно использовать такой PowerShell скрипт:
Следующий PowerShell скрипт запишет полученные данные в БД MySQL на удаленном сервере:
Теперь, чтобы узнать, кто удалил файл «document1 — Copy.DOC». Достаточно в консоли PowerShell выполнить следующий скрипт.
В результате в консоли PS появится имя пользователя и время удаления файла.
Можно создать реагировать простую веб страницу на php для получения информации о событиях удаления файлов в более удобном виде. Задача решается силами любого php программиста за 1-2 часа.
Запись информации о событиях удаления файлов в текстовый файл
Если вы не хотите вести отдельную БД, можно сохранять события аудита удалений файлов в текстовый лог файл. Воспользуйтесь таким PowerShell скриптом:
Итак, мы предложили идею и некий общий каркас системы аудита и хранения информации об удаленных файлах в сетевых шарах, при желании ее с лёгкостью можно будет модифицировать под ваши нужды.
Источник
Удаление файлов старше n дней
Иногда надо сделать удаление файлов старше n дней. Например Backup’ы. Можно делать это вручную, отсортировать их по дате и удалить, а можно воспользоваться скриптом. В данном примере мы рассмотрим скрипт для удаления файлов старше n дней и добавим задание в планировщик Windows Server 2012R2.
Содержание:
1. Скрипт удаления файлов старше n-дней
2. Создание задания в планировщике задач
#Скрипт удаления файлов старше n-дней
Скрипт на самом деле очень простой, создается в PowerShell и выглядит он следующим образом:
Вот так это выглядит в PowerShell:
Осталось только его выполнить и все.
#Создание задания в планировщике задач
Все хорошо, у нас есть скрипт. Мы можем выполнять его вручную, когда необходимо очистить наши бекапы. Но зачем выполнять это вручную? Мы поручим планировщику запускать наш скрипт и избавимся сами от рутинной работы.
Итак, что нам для этого надо?
Выбираем пункт «Создать задачу«:
На вкладке «Общие» задаем имя задания, его описание и пользователя, от которого оно будет выполняться. По умолчанию там будет пользователь, под которым вы вошли в данный момент в систему.
Далее переходим на вкладку «Триггеры» и создаем расписание, когда мы будем запускать наше задания. У меня настроено в 10:00 каждые 2 дня.
Далее идем на вкладку «Действия» и задаем действие, которое будет выполняться. Выбираем «Запуск программы»
программу или сценарий
и указываем путь до PowerShell:
А аргументе указываем путь до нашего скрипта, который мы создали ранее:
Нажимаем «Ок» и еще раз «Ок»
Все, на этом наше задание создано. Осталось дождаться, когда будет выполнено наше действие по расписанию и проверить, все ли правильно было настроено.
Источник
Часто мы сталкиваемся с проблемой, когда необходимо удалять какие-то файлы с папками автоматически, по мере их устаревания.
Например, ведется запись с камер видеонаблюдения, все складывается на NAS-сервер и необходимо периодически удалять файлы, чтобы не закончилось место на жестком диске.
Второй случай использования: удаление бэкапов. Как правило они занимают достаточно много места и надо следить за тем, чтобы они были вовремя удалены.
Мы решим эту задачу удаления старых файлов с помощью cmd (bat-файла). Рассмотрим одну из возможных реализаций как это можно сделать.
Вводная
Пусть папка, которую нам необходимо периодически очищать находится в каталоге D:\ftp\CAMERA
Что нужно сделать
1. Создадим файл clear.cmd, рядом с папкой которую нам необходимо удалить (не внутри, а рядом) в каталог D:\ftp
2. В файле clear.cmd добавим следующий текст:
@echo off
SET Path2Del=D:\ftp\CAMERA
forfiles -p "%Path2Del%" -s -m *.* -d -15 -c "cmd /c del /q @path"
for /f %%D in ('DIR cd "%Path2Del%" /AD/B/S ^| sort /r') do RD "%%D"
3. Там где Path2Del замените на свой путь, параметр -d -15 означает, что необходимо удалить файлы старше 15 дней. Если хотите увеличить или уменьшить этот срок замените 15 на нужное число.
4. Откройте меню Пуск > Служебные Windows > Средства администрирование Windows > Планировщик заданий
5. Создадим в планировщике заданий новое задание:
6. После этого каждый день, в 20:00 будет произведено удаление файлов старше 15 дней.
PS: Если вы ИТ-специалист, возможно вам пригодиться вот это: программа для ИТ-шников
Основатель и директор по развитию Софтонит. Практикующий руководитель разработки. Эксперт в области автоматизации техподдержки
Если внутри корпоративной сети используются всевозможные сетевые ресурсы доступные множеству пользователей и выполняющие функции файлообменников, например сетевые папки или каталоги FTP серверов, то иногда может возникнуть необходимость в обслуживании таких ресурсов, например периодического удаления файлов и подкаталогов имеющих определённый срок давности. Хочу поделиться маленьким примером когда-то найденного (уже не вспомню где) PowerShell скрипта, который решает у меня такую задачу
Param ( #период в днях старше которого файл считается пригодным к удалению [int]$Period = 10 , #каталог для просмотра [String]$PATH = "D:\IIS_FTP\port_21\Public" , #включать ли вложенные каталоги [bool]$recurse = $true ) filter Get-OldFiles{ Param ( [int]$Period = 10 ) if( ([DateTime]::Now.Subtract($_.CreationTime)).Days -gt $Period ) {return $_ } } if ($recurse) {dir -path $PATH -recurse | Get-OldFiles -Period $Period | Remove-Item -recurse -force} else {dir -path $PATH | Get-OldFiles -Period $Period | Remove-Item -force}
Другим примером применения такого скрипта может стать необходимость периодической очистки каких либо текстовых лог-файлов.
Если например присутствует дополнительное условие, при котором нельзя удалять вложенные каталоги можно заменить строчку…
([DateTime]::Now.Subtract($_.CreationTime)).Days -gt $Period
… на блок…
($_.Attributes -ne "Directory") ` -and ` (([DateTime]::Now.Subtract($_.CreationTime)).Days -gt $Period)
Если на файловом сервере несколько каталогов которые нужно обслуживать на предмет удаления старых данных и при этом условия удаления различаются, то можно создать единый командный файл который будет запускаться в последствии из Планировщика задач. Пример содержимого такого командного файла
powershell.exe -NoProfile -command "C:\PS_Scripts\DelOldFilesExchangeFolder.ps1" powershell.exe -NoProfile -command "C:\PS_Scripts\DelOldFilesScanToFTPFolder.ps1" powershell.exe -NoProfile -command "C:\PS_Scripts\DelOldFilesFTPPublicFolder.ps1"
В описании к скрипту я так же нашёл информацию о том что можно производить вызов скрипта с передачей параметров, например так:
powershell.exe -NoProfile -NonInteractive -command "C:\PS_Scripts\DelOldFiles.ps1 -Period 4 -Path 'D:\SHARE_Exchange'"
но если честно, такой тип вызова я не использую и даже не проверял.
Созданный командный файл располагаем в каталоге с скриптами и выполняем уже непосредственное его вызов из Планировщика задач по нужному нам расписанию
Хочу сегодня показать вам очередной скрипт PowerShell. В этот раз – для удаления старых файлов и пустых папок. Такой скрипт может пригодиться для отчистки, например файловых серверов, или каких-нибудь временных или обменных папок.
Скачать скрипт можно тут. Скрипт на GitHub.
Текст скрипта:
$Now = Get-Date
$Days = "7"
$TargetFolder = "C:\Users\sanglyb\Documents\"
$Extension = "*"
$LastWrite = $Now.AddDays(-$Days)
$Files = Get-Childitem $TargetFolder -Include $Extension -Recurse | Where{$_.CreationTime -le "$LastWrite" -and $_.LastWriteTime -le "$LastWrite"} | Sort-Object -Descending {$_.FullName.Split('\').Count},FullName
foreach ($File in $Files)
{
if ($File -ne $NULL -and !$File.PSIsContainer)
{
write-host "Deleting File $File" -ForegroundColor "Magenta"
Remove-Item $File.FullName -Force | out-null
}
elseif ($File -ne $NULL -and $File.PSIsContainer)
{
$FolderInfo = get-Childitem $File.FullName | Measure-Object
if ($folderInfo.count -eq 0)
{
write-host "Deleting directory - $File" -foregroundcolor "green"
Remove-Item $File.FullName -Force | out-null
}
}
else
{
Write-Host "No more files to delete!" -foregroundcolor "Green"
}
}
#удаляем пустые папки, не зависимо от времени создания
$folderInfo=""
$Folders = Get-Childitem $TargetFolder -Recurse | Where{$_.PSIsContainer} | Sort-Object -Descending {$_.FullName.Split('\').Count},FullName
foreach ($Folder in $Folders)
{
if ($Folder -ne $null)
{
$FolderInfo = get-Childitem $Folder.FullName | Measure-Object
if ($folderInfo.count -eq 0)
{
write-host "Deleting directory - $Folder" -foregroundcolor "yellow"
Remove-Item $Folder.FullName -force | out-null
}
}
}
Пару слов, о том, что тут происходит.
$Days = "7"
$TargetFolder = "C:\Users\sanglyb\Documents\"
$Extension = "*"
Тут мы указываем количество дней, файлы старше которых должны быть удалены, задаем путь до отчищаемой папки и желаемые расширения файлов, если вам нужно удалять определенные типы файлов, например можно задать *.js тогда будут удалены все старые JavaScript файлы.
$LastWrite = $Now.AddDays(-$Days)
$Files = Get-Childitem $TargetFolder -Include $Extension -Recurse | Where{$_.CreationTime -le "$LastWrite" -and $_.LastWriteTime -le "$LastWrite"} | Sort-Object -Descending {$_.FullName.Split('\').Count},FullName
В этом участке мы находим все файлы, которые подходят под наши критерии. А также сортируем список, что бы всё шло от большего пути к меньшему. Это нужно, если у вас будут вложенные папки, что бы скрипт всегда сперва удалял файлы, а потом уже пытался удалить папку, где расположены эти папки.
foreach ($File in $Files)
{
if ($File -ne $NULL -and !$File.PSIsContainer)
{
write-host "Deleting File $File" -ForegroundColor "Magenta"
Remove-Item $File.FullName -Force | out-null
}
Собственно, удаляем файл.
elseif ($File -ne $NULL -and $File.PSIsContainer)
{
$FolderInfo = get-Childitem $File.FullName | Measure-Object
if ($folderInfo.count -eq 0)
{
write-host "Deleting directory - $File" -foregroundcolor "green"
Remove-Item $File.FullName -Force | out-null
}
}
Тут мы удаляем папку, но перед ее удалением, проверяем, что бы она была пустая.
$folderInfo=""
$Folders = Get-Childitem $TargetFolder -Recurse | Where{$_.PSIsContainer} | Sort-Object -Descending {$_.FullName.Split('\').Count},FullName
foreach ($Folder in $Folders)
{
if ($Folder -ne $null)
{
$FolderInfo = get-Childitem $Folder.FullName | Measure-Object
if ($folderInfo.count -eq 0)
{
write-host "Deleting directory - $Folder" -foregroundcolor "yellow"
Remove-Item $Folder.FullName -force | out-null
}
}
}
По сути, это повторение уже проделанной операции. Но тут мы проходимся по всем папкам, ищем пустые папки и удаляем их.
Такой вот не хитрый, но думаю весьма полезный в хозяйстве скриптик. Надеюсь, информация окажется вам полезной.