Готовится к выходу новая версия WinScript.
Что добавлено или улучшено?
функция StrConvert для перевода текстовых строк из одной кодировки в другую;
процедура MsgBox для показа стандартных информационных окон Windows;
процедура SaveScreenToBMP - сохранение экрана в BMP файл;
процедура XDelFolder для удаления каталога со всем содержимым (подпапки, файлы);
функция ExecuteEx - расширенный запуск приложений изнутри скриптов;
функция DatesDelta - вычисление разницы в днях для двух указанных дат (день, месяц, год);
функции FileSetAttr и FileGetAttr для установки и чтения атрибутов файлов;
функции GetWinScriptVer и GetWinScriptReleaseDate для получения версии скрипт-машины WinScript и даты её сборки;
функция GetIdleTime для определения времени простоя системы;
функция LockWorkstation - блокировка пользовательской сессии;
функция GetCmdLineParameters для получения параметров, которые были переданы скрипту прямо из командной строки;
процедуры ScriptSleep и ScriptIdle - для возможности сделать паузу во время выполнения или пропуска тиков процессора во время работы скрипта;
значительное количество новых примеров (папка "\examples").
Список исправленных ошибок:
ошибка в функции GetTextFileLinesCount. Функция возвращала неверное значение, если файл был пуст;
функции DeleteFile и DeleteFiles теперь корректно удаляют файлы с атрибутом ReadOnly;
Также добавлен полный спектр функций для работы с системным реестром (поддерживается удалённое подключение). В следующих постах будут полезные исходники, которые с успехом можно будет применить для удалённой диагностики компьютеров в локальной сети.
вторник, 26 августа 2008 г.
пятница, 13 июня 2008 г.
Как очистить профиль пользователя от мусора?
В нашей компании используется контроллер домена под Linux Mandriva. Работает SAMBA. Рабочие станции работают на Windows XP и Windows 2000 Professional. Все пользователи сохраняют свои профили автоматически при перезагрузке или logoff/logon на файловом сервере.
Это очень удобно, так как позволяет пользователям "мигрировать" по сети. Также очень здорово, что все документы хранятся не только на локальных компьютерах, но и на файловом сервере. Там они автоматически бекапятся, что нивелирует риск потери важных данных людей в случает поломки, скажем жёсткого диска клиентского компьютера.
Но тут есть один неприятный момент. Люди часто используют свой профиль для того, чтобы записать туда какую-нибудь муть. Типа пачки mp3 файлов или пары фильмов по полтора гигабайта. И выложить это добро на "Рабочий стол". Профиль стремительно пухнет и гигабайты свободного места на файловом сервере начинают быстро уменьшаться.
Периодически начинаются чистки, но это происходит время от времени. Когда ситуация со свободным местом на сервере становится угрожающей.
Проблему решили просто. Написали скрипт, который запускается при старте клиентской операционной системы в logon скрипте. Схема работы его очень проста: сканируем локальный профиль, и если находим "крамольные" файлы - автоматически переносим их в корень диска, где находится профиль пользователя, с указанием полного пути к файлу. Ну и, понятное дело, параллельно чистим профиль на файловом сервере, удаляя найденные "неугодные" файлы.
А после того, как закончили работу - выдаём гневное сообщение, типа "Ай-яй-яй, нехорошо!".
Вот собственно и сам скрипт:
Авторство - Andrey Rakov aka Gifer (gifer17@gmail.com)
После небольшой адаптации (в скрипте все логи пишутся на диск T:\winscript.logs\users.log) можно использовать где угодно. Скрипт проверен и работает надёжно. Запускаем скрипт машину с файлового сервера, с примапленного диска - чтобы избежать неоднозначности версий.
Будут вопросы - пишите на support@nsoft-s.com, постараемся помочь. В теме укажите "WinScript".
Это очень удобно, так как позволяет пользователям "мигрировать" по сети. Также очень здорово, что все документы хранятся не только на локальных компьютерах, но и на файловом сервере. Там они автоматически бекапятся, что нивелирует риск потери важных данных людей в случает поломки, скажем жёсткого диска клиентского компьютера.
Но тут есть один неприятный момент. Люди часто используют свой профиль для того, чтобы записать туда какую-нибудь муть. Типа пачки mp3 файлов или пары фильмов по полтора гигабайта. И выложить это добро на "Рабочий стол". Профиль стремительно пухнет и гигабайты свободного места на файловом сервере начинают быстро уменьшаться.
Периодически начинаются чистки, но это происходит время от времени. Когда ситуация со свободным местом на сервере становится угрожающей.
Проблему решили просто. Написали скрипт, который запускается при старте клиентской операционной системы в logon скрипте. Схема работы его очень проста: сканируем локальный профиль, и если находим "крамольные" файлы - автоматически переносим их в корень диска, где находится профиль пользователя, с указанием полного пути к файлу. Ну и, понятное дело, параллельно чистим профиль на файловом сервере, удаляя найденные "неугодные" файлы.
А после того, как закончили работу - выдаём гневное сообщение, типа "Ай-яй-яй, нехорошо!".
Вот собственно и сам скрипт:
{===========================================
Скрипт переносит из пользовательского профиля
все медиа файлы в локальную папку с названием,
равном имени пользователя, под которым тот
залогинился в системе
24.06.2008
Gifer
============================================}
var
trashlog,home,prhome,profile,trash,user,s,st,newdir:string;
i,j:integer;
//Функция удаления имени файла из строкиfunction
function DeleteFileName(s:string):string;
var
st:string;
begin
st:=s;
while st[length(st)]<>'\' do
if st[length(st)]<>'\' then delete(st,length(st),1);
result:=st;
end;
begin
//Диск на котором расположен профиль
prhome:= GetEnvValue('HOMEDRIVE')+'\';
//Папка профиля на сервере
home:= prhome+'profile';
//Папка профиля на локальной машине пользователя
profile:= GetEnvValue('USERPROFILE')+'\';
//Имя текущего пользователя
user:= GetEnvValue('USERNAME');
//Расположение перенесенных файлов из профиля
trash:=profile[1]+':\'+user;
Deletefile(profile[1]+':\Profile_cleaner.txt');
Protocol('Пользователь '+user+' начал работу....','T:\winscript.logs\users.log',true);
//Сканирование локальной папки профиля на наличие "лишних" файлов
ExecuteEX('cmd.exe',' /c dir "'+profile+'*.avi" /s /b /c /a>trash.log', prhome,1);
ExecuteEX('cmd.exe',' /c dir "'+profile+'*.mp3" /s /b /c /a>>trash.log',prhome,1);
ExecuteEX('cmd.exe',' /c dir "'+profile+'*.mp4" /s /b /c /a>>trash.log',prhome,1);
ExecuteEX('cmd.exe',' /c dir "'+profile+'*.wmv" /s /b /c /a>>trash.log',prhome,1);
ExecuteEX('cmd.exe',' /c dir "'+profile+'*.mkv" /s /b /c /a>>trash.log',prhome,1);
ExecuteEX('cmd.exe',' /c dir "'+profile+'*.3gp" /s /b /c /a>>trash.log',prhome,1);
ExecuteEX('cmd.exe',' /c dir "'+profile+'*.wav" /s /b /c /a>>trash.log',prhome,1);
ExecuteEX('cmd.exe',' /c dir "'+profile+'*.wma" /s /b /c /a>>trash.log',prhome,1);
j:=GetTextFileLinesCount(prhome+'trash.log');
if j>0 then begin
Protocol('Пользователь '+user+' собрал мусор','T:\winscript.logs\users.log',true);
createfolder(trash);
AddLineToFile(trash+'\Profile_cleaner.txt','Ниже перечислены медиа файлы,');
AddLineToFile(trash+'\Profile_cleaner.txt','которые были перенесены из Вашего профиля в: '+trash);
AddLineToFile(trash+'\Profile_cleaner.txt','========================================================================');
for i:=1 to j do begin
LoadLineFromFile(prhome+'trash.log',i,s);
//в это условие подставляем название тех папок, которые не нужно просматривать
if (pos(profile+'Local Settings',s)=0) or (pos(profile+'Application Data',s)=0) then begin
s:=strconvert(s,4);
AddLineToFile(trash+'\Profile_cleaner.txt',s);
st:=s;
delete(s,1,length(profile)-1);
newdir:=trash+DeleteFileName(s);
//Удаление файлов с сервера
if FileExists(home+s) then DeleteFile(home+s);
//Перенос на локальный диск "лишних" файлов
ForceFolders(newdir);
MoveFile(st,trash+s,true);
end;
end;
Protocol('Пользователь '+user+' выбросил мусор.','T:\winscript.logs\users.log',true);
MsgBox('Внимание!!!','Ваш профиль был очищен от медиа файлов. Все вопросы к Яндексу :)',1);
Execute(trash+'\Profile_cleaner.txt','','');
end else Protocol('Пользователь '+user+' ничего не нашeл.','T:\winscript.logs\users.log',true);
deletefile(prhome+'trash.log');
end.
Авторство - Andrey Rakov aka Gifer (gifer17@gmail.com)
После небольшой адаптации (в скрипте все логи пишутся на диск T:\winscript.logs\users.log) можно использовать где угодно. Скрипт проверен и работает надёжно. Запускаем скрипт машину с файлового сервера, с примапленного диска - чтобы избежать неоднозначности версий.
Будут вопросы - пишите на support@nsoft-s.com, постараемся помочь. В теме укажите "WinScript".
Подписаться на:
Сообщения (Atom)