Архив рубрики: сисадмину на заметку

Крепление длинных рельсов к стойке

Вчера устанавливали новые серверы в открытую стойку и столкнулись с тем, что рельсы оказались на пару сантиметров длиннее стойки. Покумекав, съездили на строительный рынок за крепежом и приступили к монтажу. Получилось достаточно надежно:

DSC00606DSC00609DSC00611

Для монтажа потребовалось: 6 болтов, 6 шайб и 12 гаек (на каждый комплект рельсов).

Сокращенная форма имени локального пользователя

Оказывается, что для входа в систему под локальным пользователем помимо полной формы Computername\User существует сокращенная: .\User. Очень удобно, особенно когда имя компьютера сгенерировано автоматически. Спасибо Алексею Пахунову, сотруднику Майкрософт.

Новая версия клиента служб терминалов 6.0.6001

В состав Windows Server 2008, Windows Vista SP1 и Windows XP SP3 входит новая версия клиента служб терминалов 6.0.6001. Из новшеств — поддержка RDP версии 6.1. Также стоит обратить внимание на то, что ключ /console заменен на /admin, подробнее в kb947723.

Скрипт для архивации файлов старше определенной даты

Для архивации файлов старше определенной даты, например логов, предлагаю воспользоваться следующим скриптом на языке JScript:

if (WScript.Arguments.Length < 4)
{
  WScript.Echo("Usage: archivelogs.js c:\\folder\\with_logs\\ log_extension c:\\temp\\filelist.txt c:\\folder\\archive_name_w/o_extension");
  WScript.Quit();
}
var archname = new String();
var currdate = new Date();
var regexp = new RegExp(String().concat("\\.", WScript.Arguments(1), "$"), "i");
var shell = WScript.CreateObject("WScript.Shell");
var filesys = WScript.CreateObject("Scripting.FileSystemObject");
var filelist = filesys.CreateTextFile(WScript.Arguments(2), true, false);
var folder = filesys.GetFolder(WScript.Arguments(0));
var files = new Enumerator(folder.Files);
currdate.setDate(1);
currdate.setHours(0);
currdate.setMinutes(0);
currdate.setSeconds(0);
currdate.setMilliseconds(0);
for (; !files.atEnd(); files.moveNext())
{
  if (regexp.test(files.item().Name))
    if (files.item().DateLastModified < currdate)
      filelist.WriteLine(files.item());
}
filelist.Close();
switch (currdate.getMonth())
{
  case 0: archname = String().concat(WScript.Arguments(3), currdate.getFullYear()-1, "12"); break;
  case 10:
  case 11: archname = String().concat(WScript.Arguments(3), currdate.getFullYear(), currdate.getMonth()); break;
  default: archname = String().concat(WScript.Arguments(3), currdate.getFullYear(), "0", currdate.getMonth());
}
shell.Run(String().concat("\"C:\\Program Files\\WinRAR\\Rar.exe\" m -ep -m5 -s ", archname, " @", WScript.Arguments(2)), 1, true);
filesys.DeleteFile(WScript.Arguments(2), true);

Как работает скрипт. Получив входные данные, выполняется поиск файлов по расширению в указанном каталоге. Если файл не изменялся в текущем месяце (поведение определяется в строках 14-18), то путь к нему записывается во временный список. Затем запускается WinRAR, который перемещает файлы в архив с указанным именем и суффиксом года и прошлого месяца, например: archname200712.rar, archname200803.rar.
Формат запуска скрипта: cscript.exe //nologo archivelogs.js путь_к_папке_с_файлами расширение_файлов путь_к_временному_списку_файлов путь_к_создаваемому_архиву_без_расширения

Скрипт для отправки текстовых файлов по почте

Для отправки текстовых файлов по почте (в теле письма, а не вложением) предлагаю воспользоваться следующим скриптом на языке JScript:

if (WScript.Arguments.Length < 1)
{
  WScript.Echo("Usage: email.js filetosend.txt");
  WScript.Quit();
}
var FSO = WScript.CreateObject("Scripting.FileSystemObject");
var File = FSO.OpenTextFile(WScript.Arguments(0), 1);
var Email = WScript.CreateObject("CDO.Message");
Email.From = "results@domain.com";
Email.To = "administrator@domain.com";
Email.Subject = "Task results";
Email.Bodypart.Charset = "koi8-r";
Email.Textbody = File.ReadAll();
Email.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2;
Email.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "mail.domain.com";
Email.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25;
Email.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "user";
Email.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "pwd";
Email.Configuration.Fields.Update();
Email.Send();
File.Close();

Отправляемый файл должен быть в кодировке ANSI (windows-1251). Если авторизация на почтовом сервере не требуется, необходимо закомментировать строки 17 и 18 двумя косыми чертами (//).
Формат запуска скрипта: cscript.exe //nologo email.js путь_к_файлу_для_отправки

Скрипт для перекодировки текстовых файлов

Очень часто возникает необходимость перекодировать текстовый файл, например, перенаправленный вывод консольного приложения имеет кодировку CP866, что не совсем приемлемо для отправки по почте. Предлагаю воспользоваться следующим скриптом на языке JScript:

if (WScript.Arguments.Length < 1)
{
  WScript.Echo("Usage: oem2ansi.js filetoconvert.txt");
  WScript.Quit();
}
var Stream1 = WScript.CreateObject("ADODB.Stream");
var Stream2 = WScript.CreateObject("ADODB.Stream");
Stream1.Type = 2;
Stream1.Mode = 3;
Stream1.Charset = "cp866";
Stream1.Open();
Stream1.LoadFromFile(WScript.Arguments(0));
Stream2.Type = 2;
Stream2.Mode = 3;
Stream2.Charset = "windows-1251";
Stream2.Open();
Stream1.CopyTo(Stream2,-1);
Stream1.Close();
Stream2.SaveToFile(WScript.Arguments(0),2);
Stream2.Close();

ADODB.Stream поддерживает великое множество кодировок, в том числе UTF-8, с полным перечнем можно ознакомиться в реестре по следующему пути: HKEY_LOCAL_MACHINE\SOFTWARE\Classes\MIME\Database\Charset.
Формат запуска скрипта: cscript.exe //nologo oem2ansi.js путь_к_файлу_для_перекодирования

Решение проблемы пропадающих значков в System Tray

Если после загрузки Windows XP пропадают значки в System Tray, например регулятор громкости, диспетчер задач и т.д., то для решения проблемы необходимо в контекстном меню рабочего стола включить опцию «Закрепить веб-элементы на рабочем столе».
Каким образом это может быть взаимосвязано — мне неизвестно, но проблема решается.

Где найти драйверы и Adaptec Storage Manager для встроенного SCSI-контроллера Adaptec AIC-7902

Если вы попытаетесь найти драйверы для SCSI-контроллера Adaptec AIC-7902 на сайте самого Adaptec, то с удивлением не обнаружите какого-либо упоминания об этом продукте, потому что AIC-7902 — это не продукт для конечного пользователя, а микросхема, которую используют производители материнских плат. Выясняем, что SCSI-контроллеры Adaptec ASC-39320A-R и ASC-39320-R основаны на AIC-7902, поэтому драйверы для них подойдут и для встроенного в материнскую плату AIC-7902.