<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' version='2.0'><channel><atom:id>tag:blogger.com,1999:blog-3780099352274724658</atom:id><lastBuildDate>Thu, 03 Dec 2009 04:49:15 +0000</lastBuildDate><title>WinScript</title><description>Простой и эффективный бесплатный интерпретируемый скриптовый движок для Windows на базе Pascal</description><link>http://winscriptlib.blogspot.com/</link><managingEditor>noreply@blogger.com (Hobit)</managingEditor><generator>Blogger</generator><openSearch:totalResults>9</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-3780099352274724658.post-5880126240749815050</guid><pubDate>Mon, 09 Mar 2009 08:52:00 +0000</pubDate><atom:updated>2009-03-09T02:13:47.207-07:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>переменная</category><category domain='http://www.blogger.com/atom/ns#'>профиль</category><category domain='http://www.blogger.com/atom/ns#'>set</category><category domain='http://www.blogger.com/atom/ns#'>cmd</category><category domain='http://www.blogger.com/atom/ns#'>консоль</category><category domain='http://www.blogger.com/atom/ns#'>окружение</category><title>Как правильно в скрипте указать %userprofile% ?</title><description>Люди спрашивают, а как в скрипте достать каталог профиля пользователя, под которым сейчас залогинен юзер в системе?&lt;br /&gt;&lt;p&gt;Очень просто, воспользуемся функцией получения значения переменной окружения:&lt;br /&gt;&lt;/p&gt;&lt;blockquote&gt;var s:string;&lt;br /&gt;begin&lt;br /&gt;s:= GetEnvValue('USERPROFILE');&lt;br /&gt;end. &lt;/blockquote&gt;&lt;p&gt;Кстати, список всех переменных окружения можно посмотреть в консоли (cmd.exe), просто набрав команду "SET". &lt;/p&gt;&lt;p&gt;&lt;img id="BLOGGER_PHOTO_ID_5311113116607681138" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: hand; HEIGHT: 317px; TEXT-ALIGN: center" alt="" src="http://1.bp.blogspot.com/_uFA2gCmcHMo/SbTdPXVRknI/AAAAAAAAALY/3cOl5gNSrqI/s400/userprofile_console.png" border="0" /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3780099352274724658-5880126240749815050?l=winscriptlib.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://winscriptlib.blogspot.com/2009/03/userprofile.html</link><author>noreply@blogger.com (Hobit)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_uFA2gCmcHMo/SbTdPXVRknI/AAAAAAAAALY/3cOl5gNSrqI/s72-c/userprofile_console.png' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-3780099352274724658.post-408301125444721896</guid><pubDate>Sat, 22 Nov 2008 09:41:00 +0000</pubDate><atom:updated>2008-11-22T01:52:49.383-08:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>GERMES</category><category domain='http://www.blogger.com/atom/ns#'>Клиент-Банк</category><category domain='http://www.blogger.com/atom/ns#'>бекап</category><category domain='http://www.blogger.com/atom/ns#'>скрипт</category><category domain='http://www.blogger.com/atom/ns#'>WinScript</category><title>Интеграция GERMES и WinScript</title><description>Сегодня выходит новая версия нашего продукта для автоматизированной передачи файлов через локальную сеть/интернет &lt;a href="http://www.nsoft-s.com/aboutgermes.html"&gt;GERMES&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Продукт "заточен" именно под передачу/приём файлов и не обладает возможностью обработки полученных файлов. Все действия по постобработке необходимо выполнять вручную, в BAT либо CMD файлах, используя наш продукт &lt;a href="http://www.nsoft-s.com/aboutwinscript.html"&gt;WinScript&lt;/a&gt; или же сторонние скриптовые языки/технологии.&lt;br /&gt;&lt;br /&gt;Особенно это актуально в банках, где движение файлов очень интенсивное (например, в системах "Клиент-Банк") и есть необходимость надёжной маршрутизации файлов, логгирования и прочего.&lt;br /&gt;&lt;br /&gt;Также &lt;a href="http://www.nsoft-s.com/aboutgermes.html"&gt;GERMES&lt;/a&gt; применяется для организации систем резервного копирования, однако выполняет лишь функцию непосредственной передачи данных и их синхронизации.&lt;br /&gt;&lt;br /&gt;Поэтому принято решение следующую версию &lt;a href="http://www.nsoft-s.com/aboutgermes.html"&gt;GERMES&lt;/a&gt; (после 4.1) оснастить возможностью выполнения любых скриптов как на стороне клиента, так и сервера.&lt;br /&gt;&lt;br /&gt;Новые версии &lt;a href="http://www.nsoft-s.com/aboutwinscript.html"&gt;WinScript&lt;/a&gt; и в дальнейшем будут выходить как отдельным продуктом, так и в составе нашего файлового агента &lt;a href="http://www.nsoft-s.com/aboutgermes.html"&gt;GERMES&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3780099352274724658-408301125444721896?l=winscriptlib.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://winscriptlib.blogspot.com/2008/11/germes-winscript.html</link><author>noreply@blogger.com (Hobit)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-3780099352274724658.post-2143832931283283988</guid><pubDate>Mon, 03 Nov 2008 07:05:00 +0000</pubDate><atom:updated>2008-11-02T23:09:36.288-08:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>новая версия</category><category domain='http://www.blogger.com/atom/ns#'>WinScript</category><title>WinScript 1.4.0.15</title><description>Вышла свежая версия нашего скриптового движка. Реализовано всё то, что было обещано, кроме работы с хард- и симлинками :)&lt;br /&gt;&lt;br /&gt;Исправлены найденные ошибки. &lt;a href="http://www.nsoft-s.com/downloadwinscript.html"&gt;Скачать новую версию WinScript &gt;&gt;&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3780099352274724658-2143832931283283988?l=winscriptlib.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://winscriptlib.blogspot.com/2008/11/winscript-14015.html</link><author>noreply@blogger.com (Hobit)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-3780099352274724658.post-3557835872472612223</guid><pubDate>Mon, 20 Oct 2008 09:46:00 +0000</pubDate><atom:updated>2008-10-20T03:08:22.165-07:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>symlink</category><category domain='http://www.blogger.com/atom/ns#'>symlinks</category><category domain='http://www.blogger.com/atom/ns#'>hardlink</category><category domain='http://www.blogger.com/atom/ns#'>hardlinks</category><title>Работа с hardlinks и symlinks</title><description>В Windows, при использовании файловой системы NTFS, можно делать так называемые хардлинки и симлинки. Постараюсь пояснить, что это такое.&lt;br /&gt;&lt;br /&gt;Допустим, у нас есть каталог, в котором есть какие-то файлы. Мы пишем скрипт (программу и т.п.), где в коде жёстко зашиваем все пути к файлам. Потом переносим этот скрипт на другой компьютер и сталкиваемся с ситуацией, что структура каталогов несколько другая.&lt;br /&gt;&lt;br /&gt;Чтобы решить проблему, нужно либо переписать скрипт с учётом новой структуры каталогов, либо сделать так, чтобы он "не заметил" никаких изменений.&lt;br /&gt;&lt;br /&gt;Есть консольная команда SUBST, которая позволяет привязать к букве диска любой каталог на любом диске. Но если нам хочется гибкости, то придётся использовать линки. Люди из мира UNIX очень часто пользуются этой возможностью, в Windows эта технология применяется не так широко.&lt;br /&gt;&lt;br /&gt;Линк - это ссылка на файл либо каталог. Скажем, каталог - "&lt;span style="color:#660000;"&gt;&lt;strong&gt;C:\MyDocs\&lt;/strong&gt;&lt;/span&gt;", а симлинк на него - "&lt;span style="color:#660000;"&gt;&lt;strong&gt;C:\MyLinks\Docs\&lt;/strong&gt;&lt;/span&gt;". Для программ нет никакой разницы, к какому пути обращаться. Если мы удалим файлы из "&lt;span style="color:#660000;"&gt;&lt;strong&gt;C:\MyLinks\Docs\&lt;/strong&gt;&lt;/span&gt;" - это моментально отразится в исходном "&lt;span style="color:#660000;"&gt;&lt;strong&gt;C:\MyDocs\&lt;/strong&gt;&lt;/span&gt;".&lt;br /&gt;&lt;br /&gt;Как штатным образом увидеть этот линк, скажем, в Проводнике - я не знаю. Буду благодарен тому, кто подскажет :) Потому что на вид линк на каталог либо на файл ничем от своего оригинала не отличается.&lt;br /&gt;&lt;br /&gt;Есть ещё и хардлинки - они, в отличие от симлинков, могут указывать только на файлы. Основное отличие от хардлинков в Linux то, что при удалении хардлинка исходный файл не удаляется. В остальном - тот же симлинк.&lt;br /&gt;&lt;br /&gt;В новой версии &lt;a href="http://www.nsoft-s.com/aboutwinscript.html"&gt;WinScript&lt;/a&gt; будет поддержка создания хардлинков и симлинков. Экспериментируйте, буду ждать замечаний и предложений.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3780099352274724658-3557835872472612223?l=winscriptlib.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://winscriptlib.blogspot.com/2008/10/hardlinks-symlinks.html</link><author>noreply@blogger.com (Hobit)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-3780099352274724658.post-5842706621699650474</guid><pubDate>Wed, 24 Sep 2008 13:46:00 +0000</pubDate><atom:updated>2008-09-24T07:15:43.601-07:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>SendKeys</category><category domain='http://www.blogger.com/atom/ns#'>новая версия</category><category domain='http://www.blogger.com/atom/ns#'>SetLedState</category><category domain='http://www.blogger.com/atom/ns#'>SumToString</category><category domain='http://www.blogger.com/atom/ns#'>WinScript</category><category domain='http://www.blogger.com/atom/ns#'>SetScreenResolution</category><title>Что нового планируется в следующей версии WinScript</title><description>В готовящемся обновлении &lt;a href="http://www.nsoft-s.com/aboutwinscript.html"&gt;WinScript&lt;/a&gt; добавлены новые функции, которые реализуют весьма интересный функционал. В релизе, скорее всего, будут ещё некоторые изменения, но хочется остановиться именно на этих функциях немного подробнее.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;strong&gt;&lt;span style="color:#3333ff;"&gt;procedure &lt;span style="color:#990000;"&gt;SetLedState&lt;/span&gt;(KeyCode:byte;OnOff:boolean)&lt;/span&gt;&lt;/strong&gt;. Процедура, с помощью которой можно зажигать и гасить индикаторы NumLock, CapsLock и ScrollLock программно. Например, вызов &lt;span style="color:#3333ff;"&gt;&lt;strong&gt;&lt;span style="color:#990000;"&gt;SetLedState&lt;/span&gt;(1,true)&lt;/strong&gt;&lt;/span&gt; включит NumLock, а &lt;span style="color:#3333ff;"&gt;&lt;strong&gt;&lt;span style="color:#990000;"&gt;SetLedState&lt;/span&gt;(2,false)&lt;/strong&gt;&lt;/span&gt; погасит CapsLock.&lt;/li&gt;&lt;li&gt;&lt;span style="color:#3333ff;"&gt;&lt;strong&gt;function &lt;span style="color:#990000;"&gt;SumToString&lt;/span&gt;(value:string;valute:byte):string&lt;/strong&gt;&lt;/span&gt;. Функция, которая преобразовывает сумму в строку прописью. Например, вызов &lt;span style="color:#3333ff;"&gt;&lt;strong&gt;&lt;span style="color:#990000;"&gt;SumToString&lt;/span&gt;(10387652.02,1)&lt;/strong&gt;&lt;/span&gt; вернёт строку "десять миллионов триста восемьдесят семь тысяч шестьсот пятьдесят два доллара 02 цента". Поддерживаются пока две валюты: доллар и рубль. Максимальная сумма - 999 999 999. Нужно будет больше либо есть необходимость в других валютах - пишите, добавим. Также имеется функция для преобразования числа в строку прописью (т.е. без валют и дробной части - просто число). Ограничения на размерность числа - то же.&lt;/li&gt;&lt;li&gt;&lt;span style="color:#3333ff;"&gt;&lt;strong&gt;function &lt;span style="color:#990000;"&gt;SetScreenResolution&lt;/span&gt;(PelsWidth,PelsHeight,BitsPerPixel,DisplayFrequency:integer):boolean&lt;/strong&gt;&lt;/span&gt;. Эта функция автоматически выставляет разрешение экрана на заданное. Указываем размер экрана в точках по вертикали, горизонтали и цветность - и всё. Если монитор TFT - то последний параметр устанавливаем в ноль. Функция очень эффективна, если нужна автоматизированно выставлять определённое разрешение для разных задач. Скажем, для работы в AutoCad - максимальное разрешение, для игр - 800х600х24bit. Если попытка была неудачной - функция вернёт false.&lt;/li&gt;&lt;li&gt;&lt;span style="color:#3333ff;"&gt;&lt;strong&gt;procedure &lt;span style="color:#990000;"&gt;SendKeys&lt;/span&gt;(Buffer,WndCaption:string)&lt;/strong&gt;&lt;/span&gt;. Крайне полезная функция для взаимодействия с приложениями Windows. Суть ее в следующем: выбранному приложению посылаются наборы комбинаций клавиш, приложение реагирует на них и выполняет какие-либо функции, как будто бы мы действительно нажимали что-либо на клавиатуре, управляя этим приложением. Получаем возможность создания макросов произвольной сложности для управления теми программами, которые как бы и не предусматривают такого поведения с собой :) В примерах к дистрибутиву будут приложены варианты работы с Блокнотом, Калькулятором и некоторыми другими распространёнными Windows-приложениями.&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3780099352274724658-5842706621699650474?l=winscriptlib.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://winscriptlib.blogspot.com/2008/09/winscript.html</link><author>noreply@blogger.com (Hobit)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-3780099352274724658.post-4519627156335271862</guid><pubDate>Mon, 01 Sep 2008 14:47:00 +0000</pubDate><atom:updated>2008-09-01T07:52:18.723-07:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>реестр</category><category domain='http://www.blogger.com/atom/ns#'>обновление</category><category domain='http://www.blogger.com/atom/ns#'>WinScript</category><title>Обновление WinScript - версия 1.2.0.13</title><description>Сегодня вышла новая версия скриптового движка WinScript. Добавлена пачка функций для работы с системным реестром. Также можно управлять реестром компьютеров удалённо, по сети.&lt;br /&gt;&lt;br /&gt;Чувствую, пора писать серию статей по использованию скриптового движка, а то что-то активности сисадминов никакой не чувствуется :)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.nsoft-s.com/downloadwinscript.html"&gt;http://www.nsoft-s.com/downloadwinscript.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3780099352274724658-4519627156335271862?l=winscriptlib.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://winscriptlib.blogspot.com/2008/09/winscript-12013.html</link><author>noreply@blogger.com (Hobit)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-3780099352274724658.post-3324209743358269761</guid><pubDate>Mon, 01 Sep 2008 13:53:00 +0000</pubDate><atom:updated>2008-09-01T06:59:03.981-07:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>движок</category><category domain='http://www.blogger.com/atom/ns#'>скриптовый</category><category domain='http://www.blogger.com/atom/ns#'>UPX</category><category domain='http://www.blogger.com/atom/ns#'>упаковщик</category><category domain='http://www.blogger.com/atom/ns#'>троян</category><category domain='http://www.blogger.com/atom/ns#'>WinScript</category><category domain='http://www.blogger.com/atom/ns#'>Avira Antivir</category><title>Avira Antivir VS WinScript</title><description>В нашем &lt;a href="http://hobit-nss.blogspot.com/2008/05/avira-antivir-vs-winscript.html"&gt;корпоративном блоге&lt;/a&gt; писалось о том, что антивирус Avira Antivir неадекватно реагирует на &lt;a href="http://www.nsoft-s.com/aboutwinscript.html"&gt;WinScript&lt;/a&gt;. Как выяснилось, корень проблемы в том, что эвристик антивируса ошибается из-за того, что exe-файл скриптового движка &lt;strong&gt;WinScript ws.exe&lt;/strong&gt; сжат упаковщиком &lt;a href="http://upx.sourceforge.net/"&gt;UPX&lt;/a&gt;. Достаточно распаковать программу и проблема отпадает.&lt;br /&gt;&lt;br /&gt;Командная строка для распаковки: &lt;strong&gt;&lt;span style="color:#3333ff;"&gt;upx.exe -d ws.exe&lt;/span&gt;&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3780099352274724658-3324209743358269761?l=winscriptlib.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://winscriptlib.blogspot.com/2008/09/avira-antivir-vs-winscript.html</link><author>noreply@blogger.com (Hobit)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-3780099352274724658.post-8964269246620323498</guid><pubDate>Tue, 26 Aug 2008 11:21:00 +0000</pubDate><atom:updated>2008-08-26T04:30:30.571-07:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>удалённый</category><category domain='http://www.blogger.com/atom/ns#'>процедура</category><category domain='http://www.blogger.com/atom/ns#'>реестр</category><category domain='http://www.blogger.com/atom/ns#'>обновление</category><category domain='http://www.blogger.com/atom/ns#'>подключение</category><category domain='http://www.blogger.com/atom/ns#'>функция</category><category domain='http://www.blogger.com/atom/ns#'>WinScript</category><title>Что же будет в следующей версии?</title><description>Готовится к выходу новая версия &lt;a href="http://nsoft-s.com/aboutwinscript.html"&gt;WinScript&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#660000;"&gt;&lt;strong&gt;Что добавлено или улучшено?&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;функция &lt;strong&gt;StrConvert&lt;/strong&gt; для перевода текстовых строк из одной кодировки в другую;&lt;br /&gt;процедура &lt;strong&gt;MsgBox&lt;/strong&gt; для показа стандартных информационных окон Windows;&lt;br /&gt;процедура &lt;strong&gt;SaveScreenToBMP&lt;/strong&gt; - сохранение экрана в BMP файл;&lt;br /&gt;процедура &lt;strong&gt;XDelFolder&lt;/strong&gt; для удаления каталога со всем содержимым (подпапки, файлы);&lt;br /&gt;функция &lt;strong&gt;ExecuteEx&lt;/strong&gt; - расширенный запуск приложений изнутри скриптов;&lt;br /&gt;функция &lt;strong&gt;DatesDelta&lt;/strong&gt; - вычисление разницы в днях для двух указанных дат (день, месяц, год);&lt;br /&gt;функции &lt;strong&gt;FileSetAttr&lt;/strong&gt; и &lt;strong&gt;FileGetAttr&lt;/strong&gt; для установки и чтения атрибутов файлов;&lt;br /&gt;функции &lt;strong&gt;GetWinScriptVer&lt;/strong&gt; и &lt;strong&gt;GetWinScriptReleaseDate&lt;/strong&gt; для получения версии скрипт-машины WinScript и даты её сборки;&lt;br /&gt;функция &lt;strong&gt;GetIdleTime&lt;/strong&gt; для определения времени простоя системы;&lt;br /&gt;функция &lt;strong&gt;LockWorkstation&lt;/strong&gt; - блокировка пользовательской сессии;&lt;br /&gt;функция &lt;strong&gt;GetCmdLineParameters&lt;/strong&gt; для получения параметров, которые были переданы скрипту прямо из командной строки;&lt;br /&gt;процедуры &lt;strong&gt;ScriptSleep&lt;/strong&gt; и &lt;strong&gt;ScriptIdle&lt;/strong&gt; - для возможности сделать паузу во время выполнения или пропуска тиков процессора во время работы скрипта;&lt;br /&gt;значительное количество новых примеров (папка "\examples").&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#660000;"&gt;&lt;strong&gt;Список исправленных ошибок:&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;ошибка в функции &lt;strong&gt;GetTextFileLinesCount&lt;/strong&gt;. Функция возвращала неверное значение, если файл был пуст;&lt;br /&gt;функции &lt;strong&gt;DeleteFile&lt;/strong&gt; и &lt;strong&gt;DeleteFiles&lt;/strong&gt; теперь корректно удаляют файлы с атрибутом ReadOnly;&lt;br /&gt;&lt;br /&gt;Также добавлен полный спектр функций для работы с системным реестром (поддерживается удалённое подключение). В следующих постах будут полезные исходники, которые с успехом можно будет применить для удалённой диагностики компьютеров в локальной сети.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3780099352274724658-8964269246620323498?l=winscriptlib.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://winscriptlib.blogspot.com/2008/08/blog-post.html</link><author>noreply@blogger.com (Hobit)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-3780099352274724658.post-1036366493177698728</guid><pubDate>Fri, 13 Jun 2008 14:26:00 +0000</pubDate><atom:updated>2008-06-26T07:36:11.718-07:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>профиль</category><category domain='http://www.blogger.com/atom/ns#'>linux</category><category domain='http://www.blogger.com/atom/ns#'>samba</category><category domain='http://www.blogger.com/atom/ns#'>очистка</category><category domain='http://www.blogger.com/atom/ns#'>logon</category><category domain='http://www.blogger.com/atom/ns#'>скрипт</category><category domain='http://www.blogger.com/atom/ns#'>WinScript</category><title>Как очистить профиль пользователя от мусора?</title><description>В нашей компании используется контроллер домена под &lt;a href="http://mandriva.ru/"&gt;Linux Mandriva&lt;/a&gt;. Работает &lt;a href="http://www.samba.org/"&gt;SAMBA&lt;/a&gt;. Рабочие станции работают на Windows XP и Windows 2000 Professional. Все пользователи сохраняют свои профили автоматически при перезагрузке или logoff/logon на файловом сервере.&lt;br /&gt;&lt;br /&gt;Это очень удобно, так как позволяет пользователям "мигрировать" по сети. Также очень здорово, что все документы хранятся не только на локальных компьютерах, но и на файловом сервере. Там они автоматически бекапятся, что нивелирует риск потери важных данных людей в случает поломки, скажем жёсткого диска клиентского компьютера.&lt;br /&gt;&lt;br /&gt;Но тут есть один неприятный момент. Люди часто используют свой профиль для того, чтобы записать туда какую-нибудь муть. Типа пачки mp3 файлов или пары фильмов по полтора гигабайта. И выложить это добро на "Рабочий стол". Профиль стремительно пухнет и гигабайты свободного места на файловом сервере начинают быстро уменьшаться.&lt;br /&gt;&lt;br /&gt;Периодически начинаются чистки, но это происходит время от времени. Когда ситуация со свободным местом на сервере становится угрожающей.&lt;br /&gt;&lt;br /&gt;Проблему решили просто. Написали скрипт, который запускается при старте клиентской операционной системы в logon скрипте. Схема работы его очень проста: сканируем локальный профиль, и если находим "крамольные" файлы - автоматически переносим их в корень диска, где находится профиль пользователя, с указанием полного пути к файлу. Ну и, понятное дело, параллельно чистим профиль на файловом сервере, удаляя найденные "неугодные" файлы.&lt;br /&gt;&lt;br /&gt;А после того, как закончили работу - выдаём гневное сообщение, типа "Ай-яй-яй, нехорошо!".&lt;br /&gt;&lt;br /&gt;Вот собственно и сам скрипт:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;br /&gt;{===========================================&lt;br /&gt;Скрипт переносит из пользовательского профиля&lt;br /&gt;все медиа файлы в локальную папку с названием,&lt;br /&gt;равном имени пользователя, под которым тот&lt;br /&gt;залогинился в системе&lt;br /&gt;&lt;br /&gt;24.06.2008&lt;br /&gt;Gifer&lt;br /&gt;============================================}&lt;br /&gt;var&lt;br /&gt;  trashlog,home,prhome,profile,trash,user,s,st,newdir:string;&lt;br /&gt;  i,j:integer;&lt;br /&gt;&lt;br /&gt;//Функция удаления имени файла из строкиfunction&lt;br /&gt;function DeleteFileName(s:string):string;&lt;br /&gt;var&lt;br /&gt;  st:string;&lt;br /&gt;begin&lt;br /&gt;  st:=s;&lt;br /&gt;    while st[length(st)]&lt;&gt;'\' do&lt;br /&gt;      if st[length(st)]&lt;&gt;'\' then delete(st,length(st),1);&lt;br /&gt;  result:=st;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;begin&lt;br /&gt;  //Диск на котором расположен профиль&lt;br /&gt;  prhome:= GetEnvValue('HOMEDRIVE')+'\';&lt;br /&gt;&lt;br /&gt;  //Папка профиля на сервере&lt;br /&gt;  home:= prhome+'profile';&lt;br /&gt;&lt;br /&gt;  //Папка профиля на локальной машине пользователя&lt;br /&gt;  profile:= GetEnvValue('USERPROFILE')+'\';&lt;br /&gt;&lt;br /&gt;  //Имя текущего пользователя&lt;br /&gt;  user:= GetEnvValue('USERNAME');&lt;br /&gt;&lt;br /&gt;  //Расположение перенесенных файлов из профиля&lt;br /&gt;  trash:=profile[1]+':\'+user;&lt;br /&gt;&lt;br /&gt;  Deletefile(profile[1]+':\Profile_cleaner.txt');&lt;br /&gt;&lt;br /&gt;  Protocol('Пользователь '+user+' начал работу....','T:\winscript.logs\users.log',true);&lt;br /&gt;&lt;br /&gt;  //Сканирование локальной папки профиля на наличие "лишних" файлов&lt;br /&gt;  ExecuteEX('cmd.exe',' /c dir "'+profile+'*.avi" /s /b /c /a&gt;trash.log', prhome,1);&lt;br /&gt;  ExecuteEX('cmd.exe',' /c dir "'+profile+'*.mp3" /s /b /c /a&gt;&gt;trash.log',prhome,1);&lt;br /&gt;  ExecuteEX('cmd.exe',' /c dir "'+profile+'*.mp4" /s /b /c /a&gt;&gt;trash.log',prhome,1);&lt;br /&gt;  ExecuteEX('cmd.exe',' /c dir "'+profile+'*.wmv" /s /b /c /a&gt;&gt;trash.log',prhome,1);&lt;br /&gt;  ExecuteEX('cmd.exe',' /c dir "'+profile+'*.mkv" /s /b /c /a&gt;&gt;trash.log',prhome,1);&lt;br /&gt;  ExecuteEX('cmd.exe',' /c dir "'+profile+'*.3gp" /s /b /c /a&gt;&gt;trash.log',prhome,1);&lt;br /&gt;  ExecuteEX('cmd.exe',' /c dir "'+profile+'*.wav" /s /b /c /a&gt;&gt;trash.log',prhome,1);&lt;br /&gt;  ExecuteEX('cmd.exe',' /c dir "'+profile+'*.wma" /s /b /c /a&gt;&gt;trash.log',prhome,1);&lt;br /&gt;&lt;br /&gt;  j:=GetTextFileLinesCount(prhome+'trash.log');&lt;br /&gt;&lt;br /&gt;  if j&gt;0 then begin&lt;br /&gt;    Protocol('Пользователь '+user+' собрал мусор','T:\winscript.logs\users.log',true);&lt;br /&gt;    createfolder(trash);&lt;br /&gt;    AddLineToFile(trash+'\Profile_cleaner.txt','Ниже перечислены медиа файлы,');&lt;br /&gt;    AddLineToFile(trash+'\Profile_cleaner.txt','которые были перенесены из Вашего профиля в: '+trash);&lt;br /&gt;    AddLineToFile(trash+'\Profile_cleaner.txt','========================================================================');&lt;br /&gt;    for i:=1 to j do begin&lt;br /&gt;      LoadLineFromFile(prhome+'trash.log',i,s);&lt;br /&gt;        &lt;br /&gt;        //в это условие подставляем название тех папок, которые не нужно просматривать&lt;br /&gt;        if (pos(profile+'Local Settings',s)=0) or (pos(profile+'Application Data',s)=0) then begin&lt;br /&gt;          s:=strconvert(s,4);&lt;br /&gt;          AddLineToFile(trash+'\Profile_cleaner.txt',s);&lt;br /&gt;          st:=s;&lt;br /&gt;          delete(s,1,length(profile)-1);&lt;br /&gt;          newdir:=trash+DeleteFileName(s);&lt;br /&gt;            //Удаление файлов с сервера&lt;br /&gt;            if FileExists(home+s) then DeleteFile(home+s);&lt;br /&gt;          //Перенос на локальный диск "лишних" файлов&lt;br /&gt;          ForceFolders(newdir);&lt;br /&gt;          MoveFile(st,trash+s,true);&lt;br /&gt;        end;&lt;br /&gt;      end;&lt;br /&gt;    Protocol('Пользователь '+user+' выбросил мусор.','T:\winscript.logs\users.log',true);&lt;br /&gt;    MsgBox('Внимание!!!','Ваш профиль был очищен от медиа файлов. Все вопросы к Яндексу :)',1);&lt;br /&gt;    Execute(trash+'\Profile_cleaner.txt','','');&lt;br /&gt;  end else Protocol('Пользователь '+user+' ничего не нашeл.','T:\winscript.logs\users.log',true);&lt;br /&gt;&lt;br /&gt;  deletefile(prhome+'trash.log');&lt;br /&gt;end.&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;Авторство - Andrey Rakov aka Gifer (&lt;a href="mailto:gifer17@gmail.com"&gt;gifer17@gmail.com&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;После небольшой адаптации (в скрипте все логи пишутся на диск T:\winscript.logs\users.log) можно использовать где угодно. Скрипт проверен и работает надёжно. Запускаем скрипт машину с файлового сервера, с примапленного диска - чтобы избежать неоднозначности версий.&lt;br /&gt;&lt;br /&gt;Будут вопросы - пишите на &lt;a href="mailto:support@nsoft-s.com"&gt;support@nsoft-s.com&lt;/a&gt;, постараемся помочь. В теме укажите "WinScript".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3780099352274724658-1036366493177698728?l=winscriptlib.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://winscriptlib.blogspot.com/2008/06/blog-post.html</link><author>noreply@blogger.com (Hobit)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>7</thr:total></item></channel></rss>