Powershell for Windows

18.06.2009

Удаляем «Левые» задания вида AT*.JOB

Вирус-червь Win32/Conficker создает в планировщике «левые» задания вида At*.job.
Для очистки компьютера от этой «грязи» написал скрипт на PowerShell.

Скрипт для очистки с одного компьютера.

param(
[string]$Computer,
[string]$Process = 'rundll32.exe',
[string]$FolderPath = 'c:\WINDOWS\Tasks',
[string]$ObjectName = 'at',
$User
)
#################################################################################################################
if ($Computer -eq "") {
Write-Host "ERROR: Use Computer parameter." -foregroundcolor blue ;break
}
if ($User -is [String]) {
$Connection = Get-Credential -Credential $User
}
if ($FolderPath -like "*:*") {
$FolderPath = $FolderPath.replace(":","$");
Write-Host "The path parametre has been changed on $FolderPath " -foregroundcolor Green
}
if ($ObjectName -notlike "*'*'*") {
$ObjectName = $ObjectName+'*';
Write-Host "The path parametre has been changed on $ObjectName" -foregroundcolor Green
}
#################################################################################################################
$ArrInfo = @();`
$InfoProcess = @();$InfoTasks = @();$counterProcess = 0;$counterTasks = 0
#################################################################################################################
if ($Connection -eq $null) {
$InfoTasks = Get-ChildItem -LiteralPath \\$Computer\$FolderPath -ErrorAction SilentlyContinue | where {$_.PSIsContainer -eq $false -and $_.PSChildName -like $ObjectName}
if ($InfoTasks -like $ObjectName){
$InfoProcess = gwmi "win32_process" -ComputerName $Computer -filter "name='$Process'" | % {$counterProcess++;$_.terminate()}
$InfoTasks | % {$counterTasks++;$_.delete()}
}
}
else {
$InfoTasks = Get-ChildItem -LiteralPath \\$Computer\$FolderPath -ErrorAction SilentlyContinue | where {$_.PSIsContainer -eq $false -and $_.PSChildName -like $ObjectName}
if ($InfoTasks -like $ObjectName){
$InfoProcess = gwmi "win32_process" -ComputerName $Computer -filter "name='$Process'" -Credential $Connection | % {$counterProcess++;$_.terminate()}
$InfoTasks | % {$counterTasks++;$_.delete()}
}
}
#################################################################################################################
$ArrInfo = "" | select @{e={$Computer};n='Компьютер'},`
@{e={$Process};n='Процесс'}, @{e={$counterProcess};n='Остановлен процесс'}, @{e={$ObjectName};n='Имя файла'}, @{e={$counterTasks};n='Удален объект'}
#################################################################################################################
$ArrInfo

Для очистки компьютеров в сети нужно видо изменить скрипт используя следующее:

1. Параметры

param(
[int[]]$a,
[int[]]$b = 1..254,
[string]$Process = 'rundll32.exe',
[string]$FolderPath = 'c:\WINDOWS\Tasks',
[string]$ObjectName = 'at',
$User
)

2.Функции проверки
Function ping ($Name){
$ping = new-object System.Net.NetworkInformation.Ping
if ($ping.send($Name).Status -eq "Success" ) { $True }
else { $False }
}

Function nbtstat ($Name) {
$nbtstat = c:\WINDOWS\system32\nbtstat.exe -A $Name | % {$_ -replace " *",""}
if ($nbtstat.SyncRoot[6] -ne "Узелненайден.") { $True }
else { $False }
}

4. Создаем список ИП-адресов и перебором проходимся по ним
$IPNetwork = @()
foreach ($y in $a) {foreach ($x in $b) {$IPNetwork += $("192.168.$y.$x")}}

foreach ($ip in $IPNetwork){
$Alive = «»;`
$NetName = «»
$Alive = ping $ip

if ($Alive -eq $True){
$NetName = nbtstat $ip

if ($NetName -eq $True){

Часть скрипта для очистки берем из первого

}}}

Блог на WordPress.com.