Удаление и архивирование файлов в Windows 2003 с помощью PowerShell

Модифицировал предыдущий скрипт.

Теперь он считывает из текстового файла маски файлов, которые надо заархивировать и удалить, затем делает своё черное дело 🙂

Единственный косяк, который пока не понял как устранить – архив уже должен существовать и быть архивом… Т. е. защиты от дурака не получилось у меня. Функция New-Item или как-то так создает файл, но текстовый – и это не подходит.

Вначале идет часть объявления, где в переменные заносятся все пути (чтобы легче было менять “под себя”), затем идет архивирование (если оно вообще нужно), а затем удаление.

####### define parameters
#----- get current date ----#
$Now = Get-Date
#----- define amount of days ----#
$Days = "10"
#----- define folder where files are located ----#
$TargetFolder = "C:gbQuoteServer"
#----- define LastWriteTime parameter based on $Days ---#
$LastWrite = $Now.AddDays(-$Days)
#----- define delete list file path
$Del_List = "c:scriptsfiles.txt"
#----- define files fore archiving list file path ---#
$Arch_List = "c:scriptsarchive.txt"
#----- define archive file path - this file MUST exist! ---#
$Arch_Path = "c:scriptstest.zip"
####### archiving part
foreach ($_ in Get-Content $Arch_List)
{
$Files = Get-Childitem $TargetFolder -Include $_ -Recurse | Where {$_.LastWriteTime -le "$LastWrite"}
foreach ($File in $Files)
{
if ($File -ne $NULL)
{
write-host "Archiving File $File" -ForegroundColor "Green"
$ZipFile = (new-object -com shell.application).NameSpace($Arch_Path)
$ZipFile.CopyHere($_.fullname)
}
else
{
Write-Host "No more files to archive!" -foregroundcolor "Green"
}
}
}

####### deleting part
foreach ($_ in Get-Content $Del_List)
{
$Files = Get-Childitem $TargetFolder -Include $_ -Recurse | Where {$_.LastWriteTime -le "$LastWrite"}
foreach ($File in $Files)
{
if ($File -ne $NULL)
{
write-host "Deleting File $File" -ForegroundColor "DarkRed"
Remove-Item $File.FullName | out-null
}
else
{
Write-Host "No more files to delete!" -foregroundcolor "Green"
}
}
}
Содержимое файлов со списками примерно такого формата:

B*.txt
*.dll
Del*f.doc

и т. п.

http://geckich.blogspot.com/

Как удалить файлы старше 10 (например) дней в Windows 2003

После некоторого гугления я понял, что это проще всего сделать на PowerShell.

Если он еще не установлен в системе, то берем тут -> Windows PowerShell 1.0 English-Language Installation Package for Windows Server 2003 . Возможно, выругается что нету .NET Framework Version 2.0 Redistributable Package. Тогда берем его там же, у Мракобесов: Microsoft .NET Framework Version 2.0 Redistributable Package (x64) или Microsoft .NET Framework Version 2.0 Redistributable Package (x86) . Также нужен как минимум Service Pack 1.

Инсталляция идет типа Далее, Далее, Финиш 🙂
Затем запускаем наш павер шелл и видим синенький экранчик с очень хорошим юзабилити (растягиваемый, работа с буфером мышкой – н ето что убогая стандартная CMD).

Сразу проверяем, разрешено ли у нас запускать скрипты:

Get-ExecutionPolicy

Скорее всего нет – т. е. вернет что-то типа Restricted. Посему юзаем команду, меняющую “политику партии”:

Set-ExecutionPolicy RemoteSigned

Теперь создаем где-нибудь текстовый файл с расширением .ps1 и пишем в него:

#----- получаем текущую дату и пихаем в переменную ----#
$Now = Get-Date
#----- задаем количество дней старше которых файлы будут удаляться ----#
$Days = "10"
#----- задаем папку которая будет чиститься ----#
$TargetFolder = "C:ApplicationsLogs"
#----- вот тут самое прикольное - задаем маску, то ли это просто расширение ----#
#----- то ли это будут файлы какогото спец формата, например такие PROG_Date.log где Date - дата ----#
$Extension = "PROG*.log"
#----- здесь делаем дату за которой будут удаляться файлы ---#
$LastWrite = $Now.AddDays(-$Days)
#----- получаем список файлов. Если не надо рекурсии то убираем соотв. параметр ---#
#----- если надо удалить тупо все файлы старше 10 дней то убираем -Include $Extension ---#
$Files = Get-Childitem $TargetFolder -Include $Extension -Recurse | Where{$_.LastWriteTime -le "$LastWrite"}
#----- в цикле вербозно удаляем все полученные файлы ---#
foreach ($File in $Files)
{
if ($File -ne $NULL)
{
write-host "Deleting File $File" -ForegroundColor "DarkRed"
Remo ve-Item $File.FullName | out-null
}
else
{
Write-Host "No more files to delete!" -foregroundcolor "Green"
}
}

Напоследок, если хотим сделать shedule, то пишем батник с содержимым типа такого:
%SystemRoot%system32windowspowershellv1.0powershell.exe -command “c:scriptsdelete.ps1”
Где вначале идет путь к павер шеллу (у вас он может отличаться), а в конце – путь к файлу со скриптом.
Затем пихаем батник в планировщик.
Усё, товарищи. 
http://geckich.blogspot.com/

Отключение принудительной перезагрузки после установки обновлений в Windows XP/2003

Отключить принудительную перезагрузку после установки обновлений в Windows XP/2003 просто:
  • Отключение через реестр. Нужно создать (если его нет) ключ HKEY_LOCAL_MACHINESOFTWAREPoliciesMicrosoftWindowsWindowsUpdateAUNoAutoRebootWithLoggedOnUsers типа DWORD и установить в единицу.
  • Отключение через редактор групповых политик. Запустить gpedit.msc, далее Computer Configuration -> Administrative Templates -> Windows Components -> Windows Update. Установить опцию “No auto-restart for scheduled Automatic Updates installations” в состояние “Enabled”.
http://geckich.blogspot.com/

Использования screen для восстановления терминального подключения при не корректном его завершении

Screen – довольно-таки мощная и полезная утилита для системного администратора. У нее достаточно много ключей и параметров, которые человека нового, непосвященного могут вначале отпугнуть. В этой статье я напишу, как я использую эту утилиту.

Основное назначение screen, как для меня, – подключение к прерванному консольному сеансу. Т. е. вот вы, например, подключились к удаленному веб-серверу и запустили там какой-либо очень важный процесс, которым возможно нужно управлять. И вдруг у вас пропадает ssh-соединение – то ли проблемы с подключением через Интернет то ли еще по какой-то причине… И вы уже не сможете управлять процессом. Чтобы так не произошло – нужно запускать важные такие вещи в скрине.

Для начала установим его (как правило, в стандартную установку он не входит):

yum install screen (для RedHat/CentOS)
aptitude install screen (для Debian/Ubuntu)

Для других дистрибутивов нечто похожее.

Теперь войдите в скрин:

screen
Или выполните команду “в скрине”:
screen sudo nano /etc/sudoers
Теперь принудительно закройте терминал с nano (крестиком 🙂 ) После подключитесь заново к этой машине и наберите команду:
screen ls

Вы должны увидеть что-то вроде такого:
There is a screen on:
12836.pts-3.WS102 (04/02/2012 02:58:09 PM) (Detached)
1 Socket in /var/run/screen/S-root.
Где будут указаны открытые скрины и их состояние (Detached значит, что соединение оборвалось или было закрыто). Для подключения к существующему скрину введите команду:

screen -r 12836.pts-3.WS102

Теперь вы увидите ваш открытый ранее nano (ну или что вы там запустили).

screen -r 12836.pts-3.WS102

Выполнение этой команды сделает вначале detach указанному скрину, затем подключит к нему вас (иногда бывает полезно).

screen -S <name>

Эта команда запустит новый скрин с заданным именем (которое отобразится по команде screen -ls)

Управляющие команды в скрине указываются с помощью нажатия Ctrl+A, а затем нужную команду. Все клавиши – в английской раскладке! Например:

  • Ctrl+A, D – сделать detach текущему скрину, т. е. выйти из него – потом можно будет подключиться к нему
  • Ctrl+A, C – создать новое окно скрина. Полезно, если вам необходимо несколько одновременно терминалов на одной машине.
  • Ctrl+A, “ – показать меню с выбором окон скрина.
От такая полезная штука этот screen.

screen -T xterm

Стартуя скрин этой командой, мы меняем тип терминала и в mc можно будет использовать мышку, также можно после старта набирать:

export TERM=xterm

http://geckich.blogspot.com/

Если при установке ESXi гипервизора установка заваливается с сообщением: can't detect last level cache

У меня на чипсете интел была такая проблема при установку гипервизора VMWare ESXi

Устанавливалось оно себе, а потом – бац, и ошибка:

can’t detect last level cache

После гугления и экспериментов с биосом понял, что проблема была в том, что опцию “Max CPUID Value Limit” надо установить в Enable. После этого всё установилось.

http://geckich.blogspot.com/

522 SSL connection failed; session reuse required: see require_ssl_reuse option in vsftpd.conf man page

Если вы настроили vsftpd на SSL и при попытке подключения получаете такой мессейдж:

522 SSL connection failed; session reuse required: see require_ssl_reuse option in vsftpd.conf man page

То необходимо прописать в конфиге vsftpd.conf:

require_ssl_reuse=NO

И всё должно заработать. (Кстати, если проверяете FileZilla то тип сервера надо выбрать НЕ FTPS, а FTPES (!!!))

http://geckich.blogspot.com/

Принудительное удаленное терминальное подключение к Windows 2003 если Максимальное количество терминальных подключений превышено

Сталкивались с такой ситуевиной – хотите вы зайти на сервак удаленно, а он вас посылает с формулировкой типа “Максимальное количество терминальных подключений превышено”? 🙂 Это очень просто исправить.

Набираем в cmd команду:

mstsc /console

или:

mstsc /admin
И всё – нерадивого юзера, забывшего разлогиниться, выбросит и вы сможете зайти.
http://geckich.blogspot.com/

Мониторинг определенного процесса Windows машины в Zabbix

Вначале находим наш узел в Inventory -> Hosts


Клацаем Items -> Create new

Делаем айтем как на рисунке:

Сохраняем. Можно добавить его в какую-то группу. Затем создаем у этого хоста триггер как на рисунке:

Сохраняем. Если всё правильно сделали, то убейте эксплорер – и увидите алерт заббикса)

http://geckich.blogspot.com/