Домен pc-v.ru не обслуживается.
Если Вы желаете приобрести домен pc-v.ru, оформите сделку в магазине доменов REG.RU.

Powershell

  • [Скачать archive.ps1] # Архивация устаревших данных

    Содержимое archive.ps1# Архивация устаревших данных # Архивация данных из одного каталога, в другой по дате последнего изменения # Передать в переменную $sc каталог-источник $sc=$args[0] # Передать в переменную $ds каталог-назначение $ds=$args[1] # Передать в переменную $tl срок актуальности данных (в днях) $tl=$args[2] # Передать в переменную $lg журнал действий $lg=$args[3] # Построить массив данных $s из файлов старше $tl (все файлы, включая системные, исключая дирректории) $s=Get-ChildItem $sc -Filter * -Recurse -Attributes !d,!d+h | where { $_.LastWriteTime -lt (get-date).addDays($tl*(-1)) } # Перместить файлы из массива $s в $d (идентичный каталог $sc в расположении $ds) # Если каталог $d не существует - создать его # Удалить временные файлы (~$.* и Thumbs.db) # Создать запись в журнале для каждого файла (удаление или перемещение) Foreach ($f in $s) { $dt = (get-date -f "yyyy.MM.dd HH:mm:ss") $d=$ds+($f.DirectoryName -ireplace ([regex]::escape($sc)), "") if (!(Test-Path ($d))) { md $d } if ($f -like "~$*" -Or $f -like "Thumbs.db") { Write-Output "${dt}: Delete $f" | Out-File -filepath $lg -encoding "UTF8" -Append Remove-Item $f.FullName -Force -Confirm:$false } else { Write-Output "${dt}: Move $f to $d" | Out-File -filepath $lg -encoding "UTF8" -Append Move-Item $f.FullName $d -Force -Confirm:$false } } # Пример использования: # %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe C:\Service\A004.ps1 "D:\FileServer" "X:\Backup" "365" "X:\Log\archive.log" # Где: # "C:\Service\A004.ps1" - путь до скрипта # "D:\FileServer" - раздел с данными # "X:\Backup" - раздел с архивными данными # "365" - срок актуальности данных (в днях) # "X:\Log\archive.log" - журнал с действиями

    # Архивация данных из одного каталога, в другой по дате последнего изменения

  • [Скачать audit.ps1] # Аудит локальной системы (сбор информации)

    Содержимое audit.ps1# Аудит локальной системы (сбор информации) # Опрос системы на установленное ПО, аппаратную конфигурацию, наличие обновлений, сетевую конфигурацию и пр. #version: 0.3beta $hm=hostname $spath=split-path -parent $MyInvocation.MyCommand.Definition $mpath="$spath\report" $dt=Get-Date -f yyyy.MM.dd $dtf=Get-Date -f yyyy-MM-dd-HH-mm $mfile=$hm+"_"+$dtf+".txt" write-host "Checking service path..." if (test-path $mpath) {write-host "Service path exists."} else {md $mpath;write-host "Service path created."} write-host "Write headers." Write-Output "Inv date: $dt" | Out-File $mpath\$mfile Write-Output "---------------------------------" | Out-File $mpath\$mfile -Append Write-Output "" | Out-File $mpath\$mfile -Append Write-Output "Step: IPCONFIG /ALL" | Out-File $mpath\$mfile -Append Write-Host "Step: IPCONFIG /ALL" ipconfig /all | Out-File $mpath\$mfile -Append Write-Output "---------------------------------" | Out-File $mpath\$mfile -Append Write-Output "" | Out-File $mpath\$mfile -Append Write-Output "Step: ROUTE PRINT" | Out-File $mpath\$mfile -Append Write-Host "Step: ROUTE PRINT" route print | Out-File $mpath\$mfile -Append Write-Output "---------------------------------" | Out-File $mpath\$mfile -Append Write-Output "" | Out-File $mpath\$mfile -Append Write-Output "Step: SYSTEMINFO" | Out-File $mpath\$mfile -Append Write-Host "Step: SYSTEMINFO" systeminfo | Out-File $mpath\$mfile -Append Write-Output "---------------------------------" | Out-File $mpath\$mfile -Append Write-Output "" | Out-File $mpath\$mfile -Append Write-Output "Step: NETSTAT -A" | Out-File $mpath\$mfile -Append Write-Host "Step: NETSTAT -A" netstat -a | Out-File $mpath\$mfile -Append Write-Output "---------------------------------" | Out-File $mpath\$mfile -Append Write-Output "" | Out-File $mpath\$mfile -Append Write-Output "Step: ARP -A" | Out-File $mpath\$mfile -Append Write-Host "Step: ARP -A" arp -a | Out-File $mpath\$mfile -Append Write-Output "---------------------------------" | Out-File $mpath\$mfile -Append Write-Output "" | Out-File $mpath\$mfile -Append Write-Output "Step: NET USE" | Out-File $mpath\$mfile -Append Write-Host "Step: NET USE" net use | Out-File $mpath\$mfile -Append Write-Output "---------------------------------" | Out-File $mpath\$mfile -Append Write-Output "" | Out-File $mpath\$mfile -Append Write-Output "Step: NETSH ADVFIREWALL FIREWALL SHOW RULE ALL" | Out-File $mpath\$mfile -Append Write-Host "Step: NETSH ADVFIREWALL FIREWALL SHOW RULE ALL" netsh advfirewall firewall show rule all | Out-File $mpath\$mfile -Append Write-Output "---------------------------------" | Out-File $mpath\$mfile -Append Write-Output "" | Out-File $mpath\$mfile -Append Write-Output "Step: NET LOCALGROUP" | Out-File $mpath\$mfile -Append Write-Host "Step: NET LOCALGROUP" net localgroup | Out-File $mpath\$mfile -Append Write-Output "---------------------------------" | Out-File $mpath\$mfile -Append Write-Output "" | Out-File $mpath\$mfile -Append Write-Output "Step: NET USER" | Out-File $mpath\$mfile -Append Write-Host "Step: NET USER" net user | Out-File $mpath\$mfile -Append Write-Output "---------------------------------" | Out-File $mpath\$mfile -Append Write-Output "" | Out-File $mpath\$mfile -Append Write-Output "Step: Test-Connection ipatron.ru -Count 10 -BufferSize 1024" | Out-File $mpath\$mfile -Append Write-Host "Step: Test-Connection ipatron.ru -Count 10 -BufferSize 1024" Test-Connection ipatron.ru -Count 10 -BufferSize 1024 | Out-File $mpath\$mfile -Append Write-Output "---------------------------------" | Out-File $mpath\$mfile -Append Write-Output "" | Out-File $mpath\$mfile -Append Write-Host "Copy cygwin1.dll to Windows dir." Copy-Item $spath\cygwin1.dll $env:windir Write-Host "Register library cygwin1.dll." regsvr32 cygwin1.dll -silentcontinue Write-Output "Step: IPERF3 -p 65001 -c l2tp.mcprombez.ru -i 10 -t 60" | Out-File $mpath\$mfile -Append Write-Host "Step: IPERF3 -p 65001 -c l2tp.mcprombez.ru -i 10 -t 60" & "$spath\iperf3.exe" -p 65001 -c l2tp.mcprombez.ru -i 10 -t 60 | Out-File $mpath\$mfile -Append Write-Output "---------------------------------" | Out-File $mpath\$mfile -Append Write-Output "" | Out-File $mpath\$mfile -Append Write-Output "Step: DISKS DATA" | Out-File $mpath\$mfile -Append Write-Host "Get local disks." $ld=Get-WMIObject -Class Win32_logicaldisk -Filter "DriveType=3" | Select-Object DeviceID $ld=$ld.DeviceID Write-Host "Get disks data." Foreach ($dl in $ld) { $colItems = (Get-ChildItem $dl\ -force -ErrorAction SilentlyContinue | Where-Object {$_.PSIsContainer -eq $True} | Sort-Object) foreach ($i in $colItems) { $subFolderItems = (Get-ChildItem $i.FullName -force -recurse -ErrorAction SilentlyContinue | Measure-Object -property length -sum -ErrorAction SilentlyContinue) $i.FullName + " -- " + "{0:N2}" -f ($subFolderItems.sum / 1MB) + " MB" | Out-File $mpath\$mfile -Append if ($i.Name -match "Users") { $colIUtems = (Get-ChildItem $i -force -ErrorAction SilentlyContinue | Where-Object {$_.PSIsContainer -eq $True} | Sort-Object) foreach ($iu in $colIUtems) { $subFolderIUtems = (Get-ChildItem $iu.FullName -force -recurse -ErrorAction SilentlyContinue | Measure-Object -property length -sum -ErrorAction SilentlyContinue) $iu.FullName + " -- " + "{0:N2}" -f ($subFolderIUtems.sum / 1MB) + " MB" | Out-File $mpath\$mfile -Append } } } } Write-Output "---------------------------------" | Out-File $mpath\$mfile -Append Write-Output "" | Out-File $mpath\$mfile -Append Write-Output "Step: Get-Disk | Get-StorageReliabilityCounter (DISK HEALTH)" | Out-File $mpath\$mfile -Append Write-Host "Step: Get-Disk | Get-StorageReliabilityCounter (DISK HEALTH)" Get-Disk | Get-StorageReliabilityCounter | Out-File $mpath\$mfile -Append

    # Опрос системы на установленное ПО, аппаратную конфигурацию, наличие обновлений, сетевую конфигурацию и пр.

  • [Скачать backup_v1.ps1] # Резервирование файлового сервера (v.1)

    Содержимое backup_v1.ps1# Резервирование файлового сервера (v.1) # Создание архивных копий актуальных данных файлового сервера # Назначение переменной $spath (рабочий каталог = каталог скрипта) $spath=split-path -parent $MyInvocation.MyCommand.Definition # Назначение перменной = дата ($dt.d) и время ($dt.h) $dt=New-Object PsObject -Property @{d=Get-Date -f "yyyyMMdd";h=Get-Date -f "HHmmss";} # Назначение нового массива $opath = содержимого каталога ранее заданного $opath (с исключением директорий, без рекурсии) $opath = "c:\Service\temp\test\" $opath = Get-ChildItem $opath -filter * | where {$_.PSIsContainer -eq $false} # Назначение переменной $npath = каталог постоянного хранения резервных копий $npath = "c:\Service\temp\npath\" # Цикл для каждого $i из массива $opath выполнить: Foreach ($i in $opath) { # Назначение проходной переменной = дата ($a.d) и время ($a.h) $a=New-Object PsObject -Property @{d=Get-Date $i.LastWriteTime -f "yyyyMMdd";h=Get-Date $i.LastWriteTime -f "HHmmss";} # Получение разницы от $dt.d и $a.d (текущая дата и дата текущего в проходе файла, результат преобразован в целочисленное значение), если разница больше 1 выполнить: if ([int]($dt.d-$a.d) -ge 1) { # Перемещение текущего в проходе файла в каталог $npath в принудительном режиме, подавляя запрос на замену уже существующего одноименного файла Move-Item $i.FullName $npath -Force -Confirm:$false } }

    # Создание архивных копий актуальных данных файлового сервера

  • [Скачать backup_v2.ps1] # Резервирование файлового сервера (v.2)

    Содержимое backup_v2.ps1# Резервирование файлового сервера (v.2) # Создание архивных копий актуальных данных файлового сервера # Назначение переменной $s для исключения из пути-источника (используется далее) $s="D:\\fs\\" # Назначение переменной $spth - каталог скрипта (базовый) $spth = split-path -parent $MyInvocation.MyCommand.Definition # Назначение переменной $cA - Каталог с актуальными копиями (далее - 'A') $cA = "D:\fs\01-Общие\" # Назначение переменной $cB - Каталог постоянного хранения (далее - 'B') $cB = "\\domain\fs\08-Backup\01-B00\02-FS" # Назначение переменной $ht и $htD (путь и файл таблицы хешей) $ht="$spth\hashtable.csv" $htD="$spth\hashtable_dup.csv" # Создание комплексной переменной на основе даты (раздельные значения для "год"=$dt.y, "месяц"=$dt.m, "день"=$dt.d) $dt = New-Object PsObject -Property @{y=Get-date -f "yyyy"; m=Get-Date -f "MM"; d=Get-Date -f "dd"; f=Get-Date -f "yyyyMMdd"; h=Get-date -f "hh"; mm=Get-date -f "mm";} # ПО для выполнения архивации (7zip) $7z = "C:\Program Files\7-Zip\7z.exe" # Проверка существования и загрузка текущей таблицы хешей в массив $hta (создание массива в случае отсутсвия) if(Test-Path ($ht)) { [psobject[]]$hta=import-csv "$ht" -Encoding UTF8 } else { $hta=@() } # Проверка существования и загрузка текущей таблицы хешей дубликатов в массив $htb (создание массива в случае отсутсвия) if(Test-Path ($htD)) { [psobject[]]$htb=import-csv "$htD" -Encoding UTF8 } else { $htb=@() } # Создание полного списка файлов для хеширования и проверки $toCheck = Get-ChildItem $cA -R | where {! $_.PSIsContainer -eq $true} # Назначение функции Calc-Hash для хеширования Function Calc-Hash { Param ( [parameter(Position=0, Mandatory=$true, ValueFromPipeline=$false)] $file ) Begin { $md5 = New-Object -TypeName System.Security.Cryptography.MD5CryptoServiceProvider } Process { $hash = [System.BitConverter]::ToString($md5.ComputeHash([System.IO.File]::ReadAllBytes($file))) Write-Output $hash } } # Создание массива $toBackup из файлов к резервированию $toBackup=@() # Цикл создания хешей в массив $hta (в случае отсутсвия) и формирование списка файлов к резервированию Foreach ($f in $toCheck) { $h=Calc-Hash $f.FullName # Пропустить обработку текущего файла, если хэш не создан (например, изза недостатка прав) if (!($h)) { Write-Output "File '$f' Locked" | Out-File -filepath "$cB\locked.log" -encoding "UTF8" -Append Continue } $uid=($h+$f.FullName) if ($hta.hash -notcontains $h) { # Пополнение массива хешей (таблицы) новым уникальным значением $hta+=New-Object PsObject -Property @{hash=$h;file=$f.FullName;uid=$uid;} # Формирование списка файлов для резервирования с дополнительными параметрами (стандартные для файла + хеш) $toBackup+=$f | select @{n='Extension';e={$f.Extension}},@{n='FullName';e={$f.FullName}},@{n='BaseName';e={$f.BaseName}},@{n='Name';e={$f.Name}},@{n='Directory';e={$f.DirectoryName}},@{n='Hash';e={$h}} } elseif ($hta.uid -notcontains $uid) { if ($htb.uid -notcontains $uid) { # Назначение переменных для текущего и существующего файла $CurrentFile=$f.FullName $ExistFile=($hta -match $h).file # Переменная для лог-файла (полная дата и время) $dtf=$dt.y+"-"+$dt.m+"-"+$dt.d+" "+$dt.h+":"+$dt.mm $htb+=New-Object PsObject -Property @{hash=$h;fileA=$CurrentFile;fileB=$ExistFile;uid=$uid;} # Формирование лог-файла с сопоставлением дубликат = оригинал $duplog="$cB\dublicates.log" Write-Output "[$dtf] $CurrentFile = $ExistFile" | Out-File -filepath $duplog -encoding "UTF8" -Append } } } # Цикл резервирования файлов по списку массива $toBackup Foreach ($b in $toBackup) { # Формирование каталога размещения копии из замены $s в пути-источника на $cB (размещение идентично начальному, внутри каталога назначения) $bD=($b.Directory -replace $s,$cB) $bF=$bD+"\"+($b.Name) # Проверка существования каталога (создание, если отсутствует) if(!(Test-Path ($bD))) { md $bD } # Копирование файла # Проверка существование старой версии файла (архивация, если существует) if(Test-Path ($bF)) { # Назначение переменной для имени будущего архива $bFn=$bD+"\"+$b.BaseName+$b.Extension+"_"+$dt.f+".7z" # Архивация старой версии файла & $7z @('a','-t7z',$bFn,$bF) # Удалить старую версию файла Remove-Item $bF # Скопировать новую Copy-Item $b.FullName $bD } else { Copy-Item $b.FullName $bD } } # Выгрузить новые значения для таблиц с хешами архивированных файлов $hta | export-csv $ht -NoTypeInformation -Encoding UTF8 $htb | export-csv $htD -NoTypeInformation -Encoding UTF8

    # Создание архивных копий актуальных данных файлового сервера

  • [Скачать block.ps1] # Блокировка исходящих соединений (Windows Firewall)

    Содержимое block.ps1# Блокировка исходящих соединений (Windows Firewall) # Создание правила в Windows Firewall для каждого приложения (.exe) в заданном каталоге # Передать в переменную $s каталог с приложениями $s=$args[0] # Получить из каталога $s список *.exe файлов в массив $d $d=Get-ChildItem $s -Filter *.exe -Recurse -Attributes !d,!d+h # Для каждого $f в массиве $d создать запрещающее исходящее соединение правило Foreach ($f in $d) { New-NetFirewallRule -DisplayName "Block: $f" -Direction Outbound -Program $f.FullName -Action Block } # Пример использования: # %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe C:\Service\A005.ps1 "c:\Program Files (x86)\TeamViewer\" # Где: # C:\Service\A005.ps1 - путь до скрипта # "c:\Program Files (x86)\TeamViewer\" - раздел с приложением(ями)

    # Создание правила в Windows Firewall для каждого приложения (.exe) в заданном каталоге

  • [Скачать filter_eml.ps1] # Парсер и фильтрация почтовых адресов

    Содержимое filter_eml.ps1# Парсер и фильтрация почтовых адресов # Разделение базы email адресов по популярным доменам, фильтр недействующих и битых адресов $file = Read-Host -Prompt 'Enter list name' $spth = split-path -parent $MyInvocation.MyCommand.Definition $mpth = "$spth\list" if(!(Test-Path ($mpth))) { Write-Output "Result folder and address list didnt exist" Break } $flst = "$mpth\$file" $md5 = New-Object -TypeName System.Security.Cryptography.MD5CryptoServiceProvider $hash = [System.BitConverter]::ToString($md5.ComputeHash([System.IO.File]::ReadAllBytes($flst))) $path = "$mpth\$hash" if(Test-Path ($path)) { } else { md $path $ListSkip = Get-Content "$spth\skip" $WhiteListRE = Get-Content "$spth\whiteskip" $ListDomains = Get-Content "$spth\domain-exclude" $WhiteList = Get-Content "$spth\whitelist" $BlackList = Get-Content "$spth\addr-exclude" $SelfList = Get-Content "$spth\selflist" $global:ListValidDomains = @() $global:ListValidDomains += "@mail.ru", "@bk.ru", "@list.ru", "@yandex.ru", "@ya.ru" $global:ListInvalidDomains = @() $global:ListInvalidDomains += "@domain.ru", "@domain.com", "@test.ru", "@example.ru", "@example.com", "@test.com", "@mail.gmail.com" Function Clean-List { Param ( [parameter(Position=0, Mandatory=$true, ValueFromPipeline=$false)] $array ) Begin { $ListInput = $array } Process { ForEach ($addr in $ListInput) { if ($WhiteList -contains $addr) { Write-Output $addr | Out-File -filepath "$path\$file" -encoding "UTF8" -Append Continue } $mod_skip = 0 $addr_domn = ("@" + ($addr -split "@")[-1]) ForEach ($checkre in $WhiteListRE) { if ($addr -match $checkre) { Write-Output $addr | Out-File -filepath "$path\$file" -encoding "UTF8" -Append $mod_skip = 1 Break } } if ($mod_skip -eq 0) { ForEach ($check in $SelfList) { if ($addr -match $check) { Write-Output $addr | Out-File -filepath "$path\exclude_self.log" -encoding "UTF8" -Append $mod_skip = 1 Break } } } if ($mod_skip -eq 0) { ForEach ($scheck in $ListSkip) { if ($addr -match $scheck) { Write-Output $addr | Out-File -filepath "$path\exclude_skip.log" -encoding "UTF8" -Append $mod_skip = 1 Break } } } if ($mod_skip -eq 0) { if ($BlackList -contains $addr) { Write-Output $addr | Out-File -filepath "$path\exclude_bl.log" -encoding "UTF8" -Append Continue } } if ($mod_skip -eq 1) { Continue } elseif ($addr.length -gt 40) { Write-Output $addr | Out-File -filepath "$path\exclude_length.log" -encoding "UTF8" -Append } elseif ($ListDomains -contains $addr_domn) { Write-Output $addr | Out-File -filepath "$path\exclude_domains.log" -encoding "UTF8" -Append } elseif ($ListValidDomains -notcontains $addr_domn) { if ($ListInvalidDomains -notcontains $addr_domn) { $domain_dns = ($addr_domn -replace "@","") $domain_lkp = Resolve-DnsName $domain_dns -Type mx if ($domain_lkp) { $mx = $domain_lkp."NameExchange" $global:ListValidDomains += $addr_domn Write-Output $addr | Out-File -filepath "$path\$file" -encoding "UTF8" -Append } else { $global:ListInvalidDomains += $addr_domn Write-Output $addr | Out-File -filepath "$path\exclude_badmx.log" -encoding "UTF8" -Append } } else { Write-Output $addr | Out-File -filepath "$path\exclude_badmx.log" -encoding "UTF8" -Append } } else { Write-Output $addr | Out-File -filepath "$path\$file" -encoding "UTF8" -Append } } } } Get-Content $flst -ReadCount 1000 | Foreach { Clean-List $_ } }

    # Разделение базы email адресов по популярным доменам, фильтр недействующих и битых адресов

  • [Скачать grep.ps1] # Парсер по маске RegExp

    Содержимое grep.ps1# Парсер по маске RegExp # Парсер с обработкой блоков по 1000 строк. Использует строку RegExp для поиска в указанном файле $pathsys = $args[0] $batch = 1000 $outfile = "$pathsys.out" [regex]$match_regex = '[^\.\r\n]+[\.][^\.]|[^\hpsxj]{1,3}\/' Get-Content $pathsys -ReadCount $batch | Foreach { $var = [Regex]::Matches($_,$match_regex) Write-Output $var.Value | Out-File $pathsys"_out" -Append -Encoding "UTF8" }

    # Парсер с обработкой блоков по 1000 строк. Использует строку RegExp для поиска в указанном файле

  • [Скачать killer.ps1] # Снятие активных процессов по имени и выделенной памяти

    Содержимое killer.ps1# Снятие активных процессов по имени и выделенной памяти # Скрипт, позволяющий принудительно завершать нежелательные процессы, с фильтрацией по названию и объему выделенной памяти. # Завершить процессы с фильтрацией по названию (начальной части наименования) kill -Name "acrot*" -Force kill -Name "p3stat*" -Force kill -Name "whats*" -Force kill -Name "wilca*" -Force # Получить все процессы с именем "chrome", фильтр полученных значений по объему выделенной памяти (614MB) # Затем, принудительное завершение каждого найденного процесса без запроса подтверждения Get-Process -Name "chrome" | Where-Object {$_.WorkingSet -gt 614400Kb} | Stop-Process -Force -Confirm:$false # Скрипт подходит для использования в планировщике, по времени или событию (переполнение памяти) # Целевое применение - на сервере терминалов (сервер с удаленными рабочими столами пользователей)

    # Скрипт, позволяющий принудительно завершать нежелательные процессы, с фильтрацией по названию и объему выделенной памяти.

  • [Скачать mining_start.ps1] # Автоматический запуск майнинга

    Содержимое mining_start.ps1# Автоматический запуск майнинга # Запуск майнера с отправкой уведомления о (пере)запуске, а так же предварительный запуск Afterburner для разгона $pathsys = "C:\Service" $errlog = "$pathsys\errors.log" $t_st = get-date -f "yyyy.MM.dd HH:mm:ss" $Body = "System started at: "+$t_st $worker = hostname $wallet = "3467EnaKtM42Lo1A1iQT8EL873LFcq7W4u.$worker" #$wallet = "etnkDRmmiG63URMGfNN8d58gwNbb1Q485VHzajoYEFJ1bLbvgxJkSpTaWcrKeJBERcNvzq2vJ89WP2j3obZWKenc6KPDq4iwNk.$worker/$wmail" #$pool = "etn-eu1.nanopool.org:13333" $pool = "cryptonight.eu.nicehash.com:3355" $addr = "mail@mail.ru" $smtpserver = "mx.mail.ru" $smtpport = 25 $miner = "C:\Service\CastXMR\cast_xmr-vega.exe" $ab = 0 # Enable Afterburner $opt = "--forcecompute --fastjobswitch" # Additional options $gpu = "-G 0,1,2,3,4,5,6,7" if ($ab -eq 1) { Function Test-Clock { Get-Process -Name "*burn*" } } Function Test-Cast { Get-Process -Name "*cast*" } Function SendEmail { Param ( [parameter(Mandatory=$true, ValueFromPipeline=$false)] $Body ) Begin { $smtp = new-object Net.Mail.SmtpClient $smtpserver, $smtpport $smtp.Credentials = New-Object System.Net.NetworkCredential("notice@mail.ru", "1234567!a") $smtp.Enablessl = $false $smtp.Timeout = 10000 } Process { $dt = get-date -f "yyyy.MM.dd HH:mm" $EmailFrom = "Monitoring <notice@mail.ru>" $EmailCC = "admin@mail.ru" $Subject = 'Miner '+$worker+' started (at: '+$dt+')' $msg = New-Object system.net.mail.mailmessage ForEach ($EmailAddr in $addr) { $msg.To.Add($EmailAddr) } $msg.CC.Add($EmailCC) $msg.From = $EmailFrom $msg.Subject = $Subject $msg.body = $Body $msg.IsBodyHTML = $true $msg.BodyEncoding = [System.Text.Encoding]::UTF8 $smtp.Send($msg) if ($error) { $erdt = get-date -f "yyyy.MM.dd HH:mm:ss" Write-Output $Body | out-file -append -filepath $errlog -Encoding "UTF8" Write-Output "$erdt $error" | out-file -append -filepath $errlog -Encoding "UTF8" } $error.clear() } } Function Start-Mine { if ($ab -eq 1) { while (!(Test-Clock)) { & "C:\Program Files (x86)\MSI Afterburner\MSIAfterburner.exe" -Profile1 -s sleep -s 15 } if (Test-Clock) { $t_ab = get-date -f "yyyy.MM.dd HH:mm:ss" $Body = $Body+"<br>Afterburner started at: "+$t_ab } } $t_cx = get-date -f "yyyy.MM.dd HH:mm:ss" $Body = $Body+"<br>CastXMR started at: "+$t_cx SendEmail $Body while (Test-Cast) { taskkill /f /FI "IMAGENAME eq cast*" sleep -s 2 } & $miner $opt $gpu -S $pool -u $wallet } Start-Mine

    # Запуск майнера с отправкой уведомления о (пере)запуске, а так же предварительный запуск Afterburner для разгона

  • [Скачать newaduser.ps1] # Автоматическое создание нового пользователя в Active Directory

    Содержимое newaduser.ps1# Автоматическое создание нового пользователя в Active Directory # Создание пользователя с шаблонами прав, а так же отправка пригласительного письма $error.clear() $login=$env:username $spth = split-path -parent $MyInvocation.MyCommand.Definition $ef="$spth\log\error_$login.log" $lg="$spth\log\execute_$login.log" $chars1=[Char[]]"qazwsxedcrfvtgbyhnujmikolp" $chars2=[Char[]]"QAZWSXEDCRFVTGBYHNUJMIKOLP" $chars3=[Char[]]"1234567890" $script:status=0 $co="Domain" $EmailTo = "admin@mail.ru" $EmailCC = "hr@mail.ru" $smtpserver = "smtp.mail.ru" $smtpport = 587 $smtp = new-object Net.Mail.SmtpClient $smtpserver, $smtpport $smtp.Enablessl = $false $smtp.Credentials = New-Object System.Net.NetworkCredential("notice@mail.ru", "password") $smtp.Timeout = 10000 $EmailFrom = "Notice <notice@mail.ru>" $text=@("text0","text1","text2","text3","text4") $dirs=@("$spth\log","$spth\body","$spth\html","$spth\archive") Function WriteLog { Param ( [parameter(Mandatory=$true, ValueFromPipeline=$false)] $l ) Process { $d=(get-date -f "yyyy.MM.dd HH:mm:ss") Write-Output "$d $l" | Out-File -append -filepath $lg -encoding "UTF8" } } Foreach ($dr in $dirs) { if (!(Test-Path ($dr))) {md $dr;WriteLog "Missed path: $dr. Folder created"} } Function WriteError { Param ( [parameter(Mandatory=$true, ValueFromPipeline=$false)] $e ) Process { $d=(get-date -f "yyyy.MM.dd HH:mm:ss") Write-Error "$e" if ($error) { Write-Output "$d $error" | Out-file -append -filepath $ef -Encoding "UTF8" $error.clear() } } } Foreach ($t in $text) { if (Test-Path ("$spth\body\$t")) { New-Variable -Name $t -Value (Get-Content $spth\body\$t -encoding "UTF8") } else { WriteError "File $t not found" Exit } } $dblist=Get-ChildItem $spth -Filter {*.csv} if ($dblist) { WriteLog "... System started" ForEach ($db in $dblist) { WriteLog "Progress DB: $db" $tdb=Get-Content $db -encoding "UTF8" if ($tdb -like "*;*") { WriteLog "Convert DB: $db" $tdb=$tdb -Replace (';','","') ForEach ($b in $tdb) {$rdb+=@('"'+$b+'"')} Write-Output $rdb | Out-file -filepath $db -Encoding "UTF8" } else { WriteError "Convert DB skipped" } $users=import-csv $db -Encoding UTF8 if ($error) {WriteError "Convert DB fails:";Exit} Foreach ($u in $users) {WriteLog "Imported user: $u"} if(Test-Path ("$spth\log\addb_$login.csv")) {$addb = import-csv $spth\log\addb_$login.csv -Encoding UTF8} else {$addb = @()} ForEach ($user in $users) { WriteLog "Progress user: $user" $nuser=$null if ($user.password) { $script:pwd = $user.password WriteLog "Password is set. Value = $pwd" } else { $p1 = ($chars1 | Get-Random -Count 3) -join "" $p2 = ($chars2 | Get-Random -Count 3) -join "" $p3 = ($chars3 | Get-Random -Count 3) -join "" $script:pwd = $p1+$p2+$p3 WriteLog "Password is not set. New value generated = $pwd" } $msg = New-Object system.net.mail.mailmessage $msg.To.Add($EmailTo) $msg.IsBodyHTML = $True $msg.CC.Add($EmailCC) $msg.BodyEncoding = [System.Text.Encoding]::UTF8 $msg.From = $EmailFrom $ufname=$user.firstname if (!($ufname)) {WriteError "User Firstname not set";Exit} $ulname=$user.lastname if (!($ulname)) {WriteError "User Lastname not set";Exit} $utype=$user.type $usmgr=$user.manager $usdep=$user.department $uspos=$user.title $uscity=$user.city $mldomain="@"+$user.emldomain $un="$ulname $ufname" $groups=$user.groups -split "," $bdgr=$user.groups $Body2 = "Password: $pwd<br><hr><br> Last Name: $ulname<br> First Name: $ufname<br><br> Group membership:<br>$bdgr<br>" if ($user.acc) {$acc=$user.acc} else { $acc=$user.lastname $acc=$acc.tolower() } if ($utype) { if ($utype -match "alfa") { $acc="alfa_"+$acc WriteLog "User type is set to alfa. Username set to $acc" } elseif ($utype -match "bravo") { $acc="bravo_"+$acc WriteLog "User type is set to bravo. Username set to $acc" } else { WriteLog "User type is not set. Used default values" } } $fatt="$spth\html\$acc.html" Function CreateUser { Param ( [parameter(Mandatory=$true, ValueFromPipeline=$false)] $newacc ) Begin { $ou="OU=Users,OU=Moscow,OU=Russia,OU=Offices,DC=domain,DC=local" $welcome=$null $script:email=$newacc+$mldomain $upn=$newacc+"@domail.local" $nuser=Get-ADUser -Filter {sAMAccountName -eq $newacc} $fatt="$spth\html\$newacc.html" if ($error) {WriteError "Get-ADUser fails:";Break} } Process { if ($addb.acc -notcontains $newacc) { if ($nuser -eq $null) { $welcome = $text0+$ufname+$text1+$email+$text2+$newacc+$text3+$pwd+$text4 Write-Output $welcome | Out-File -filepath $fatt -encoding "UTF8" New-ADUser -SamAccountName $newacc -Name $un -DisplayName $un -GivenName $ufname -Surname $ulname -Company $co -Organization $co -UserPrincipalName $upn -Country "RU" -Manager $usmgr -Department $usdep -Title $uspos -City $uscity -OtherAttributes @{'mail'=$email;} -PasswordNeverExpires $true -CannotChangePassword $false -AccountPassword (ConvertTo-SecureString $pwd -AsPlainText -Force) -Path $ou -Enabled $true if ($error) {WriteError "New-ADUser fails:";Break} ForEach ($grp in $groups) { Add-ADGroupMember $grp $newacc if ($error) {WriteError "Add-ADGroupMember fails:";Break} } $Body0 = "New user: $newacc<br>" $Body1 = "EMail: $email<br> OU: $ou<br>" $Body=$Body0+$Body1+$Body2 $Subject = "New user created ($newacc)" $msg.Subject = $Subject $att = new-object Net.Mail.Attachment($fatt) $msg.Attachments.Add($att) $msg.body = $Body $html = [System.Net.Mail.AlternateView]::CreateAlternateViewFromString($Body, $null, "text/html") $msg.AlternateViews.Add($html) $smtp.Send($msg) if ($error) {WriteError "Send message fails:"} WriteLog "Email sent (user: $newacc; email: $email)" $script:addb+=New-Object PsObject -Property @{type=$utype;acc=$newacc;firstname=$ufname;lastname=$ulname;groups=$user.groups;password=$pwd;domain=$mldomain;title=$uspos;department=$usdep;manager=$usmgr;city=$uscity} if ($error) {WriteError "Modify addb_$login.csv fails:"} $script:status=1 } } else { $script:status=2 } if ($error) {WriteError "CreateUser fails:"} } } if ($status -eq 0) {CreateUser $acc} if ($status -eq 0) {$acc=$acc+"."+$ufname.tolower()[0];CreateUser $acc} if ($status -eq 0) {$acc=$acc+"."+$ufname.tolower()[1];CreateUser $acc} if ($status -eq 0) {WriteError "Possible user '$acc' exists"} if ($status -eq 2) {WriteError "User '$acc' created earlier";$script:status=0} if ($status -eq 1) {WriteLog "New Account created: $acc";$script:status=0} } $addb | export-csv $spth\log\addb_$login.csv -NoTypeInformation -Encoding UTF8 $d=(get-date -f "yyMMddHHmmss") $n=$d+"-"+$db.Name mv $db "$spth\archive\$n" WriteLog "DB $db archived" } } else { WriteError "New users list not found" } if ($error) {WriteError "Completed with errors:"}

    # Создание пользователя с шаблонами прав, а так же отправка пригласительного письма

  • [Скачать pinger.ps1] # Опрос хостов подсети (последовательный ping)

    Содержимое pinger.ps1# Опрос хостов подсети (последовательный ping) # Скрипт для последовательного перебора хостов выбранной подсети и запуска ping (эхо-запроса) для каждого из них. # Получить начальное значение подсети (вида: xxx.xxx.xxx) $suf=$args[0] # Назначить первый адрес для опроса $ipCurrent = 1 # Формирование адреса из начального значения подсети и текущего в проходе значения # Выполнить консольную команду "ping" (один запрос с минимальным ожиданием) # Передать в переменную только значение содержащее слово "Ответ" # Если значение назначено (существует), вывести его на экран # Прибавить еденицу к текущему значению адреса # Очистить значение переменной "status_ping" # Выполнение цикла, пока значение адреса менее 255 Do { $ipAddr=$suf+"."+$ipCurrent $status_ping = ping $ipAddr -l 1 -n 1 -w 1 | Select-String "Ответ" if ($status_ping) {Write-Host $status_ping} $ipCurrent+=1 Remove-Variable status_ping } while ($ipCurrent -lt 255) # Пример использования: # %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe C:\Service\A001.ps1 172.16.71 # # Пример результата: # Ответ от 172.16.71.1: число байт=1 время<1мс TTL=64 # Ответ от 172.16.71.2: число байт=1 время<1мс TTL=128 # Ответ от 172.16.71.10: число байт=1 время<1мс TTL=255 # # Цель использования может быть простой, пусть и не быстрый скан сети средствами Powershell. # Чаще всего я применяю его в ситуациях, когда мне нужно опросить соседнюю подсеть. В своей подсети получить список хостов значительно проще: # Достаточно отправить любой пакет на Broadcast адрес (последний адрес в подсети). Например, ping 172.16.71.255. # Ответ будет получен от всех получателей и результат будет достигнут значительно быстрее. # Для обвновления arp таблицы достаточно начала обмена данными с хостом (в данном случае это icmp пакет). # Поэтому каждый доступный адрес собественной подсети появится в arp таблице (проверить ее содержимое можно командой "arp -a".

    # Скрипт для последовательного перебора хостов выбранной подсети и запуска ping (эхо-запроса) для каждого из них.

  • [Скачать scan.ps1] # Формирование рассылки писем с вложениями

    Содержимое scan.ps1# Формирование рассылки писем с вложениями # Рекурсивная проверка каталога для отправки вложений различным адресатам (например, для рассылки счетов или иных документов) $path = "D:\FileServer" $pathsys = "D:\Service\Mail" $content = Get-ChildItem $path -Recurse -Filter "$*" | where { ! $_.PSIsContainer -eq $true } $errlog = "$pathsys\error_docs.log" $dt = get-date -f "yyyy.MM.dd" $da = get-date -f "yyyyMMdd" $sign = Get-Content "$pathsys\sign" $Rcpt = "user@mail.ru" $a7z = "C:\Program Files\7-Zip\7z.exe" $pathp = "D:\Service\Temp\docs_$da.7z" Function SendEmail { Param ( [parameter(Mandatory=$true, ValueFromPipeline=$false)] $addr, [parameter(Mandatory=$true, ValueFromPipeline=$false)] [String] $Body, [parameter(Mandatory=$true, ValueFromPipeline=$false)] $matt ) Begin { $smtpserver = smtp.mail.ru $smtpport = 587 $smtp = new-object Net.Mail.SmtpClient $smtpserver, $smtpport $smtp.Enablessl = $true $smtp.Credentials = New-Object System.Net.NetworkCredential("user@mail.ru", "password") $smtp.Timeout = 10000 } Process { $EmailFrom = "Служба уведомлений <user@mail.ru>" $EmailCC = "copy@mail.ru" $Subject = 'Документы от '+$dt $msg = New-Object system.net.mail.mailmessage ForEach ($EmailAddr in $addr) { $msg.To.Add($EmailAddr) } if ($matt) { ForEach($fatt in $matt) { $attach = new-object Net.Mail.Attachment($fatt) $msg.Attachments.Add($attach) } } else { Break } $msg.CC.Add($EmailCC) $msg.DeliveryNotificationOptions = "OnSuccess" $msg.Priority = "high" $msg.From = $EmailFrom $msg.Subject = $Subject $msg.body = $Body $msg.IsBodyHTML = $true $msg.BodyEncoding = [System.Text.Encoding]::UTF8 $smtp.Send($msg) if ($error) { $erdt = get-date -f "yyyy.MM.dd HH:mm:ss" Write-Output $Body | out-file -append -filepath $errlog -Encoding "UTF8" Write-Output "$erdt $error" | out-file -append -filepath $errlog -Encoding "UTF8" } $error.clear() } } # Body $cntDoc = 1 Foreach($file in $content){ $file = ($file -replace "pdf","") $file = ($file -replace "\$","") if ($cntDoc -gt 1) { $DocList = $DocList+"$cntDoc. $file;<br>" } else { $DocList = "$cntDoc. $file;<br>" } $cntDoc+=1 } $Body = "<HTML><BODY style='font-family:Calibri;font-size:12pt;'>Новые сканы документов от $dt<br><br>" $Body = $Body+$DocList+$sign # 7zip Foreach($file in $content){ $ad = ($file.FullName -split "\$")[0] $af = ($file.Name -replace "\$","") Rename-Item -Path $file.FullName -NewName $af $nf = $ad+$af & $a7z @('a',$pathp,'-t7z',$nf) } # Send if(Test-Path ($pathp)) { SendEmail $Rcpt $Body $pathp } if ($error) { $erdt = get-date -f "yyyy.MM.dd HH:mm:ss" Write-Output $file | out-file -append -filepath $errlog -Encoding "UTF8" Write-Output "$erdt $error" | out-file -append -filepath $errlog -Encoding "UTF8" } $error.clear()

    # Рекурсивная проверка каталога для отправки вложений различным адресатам (например, для рассылки счетов или иных документов)

  • [Скачать sendmail.ps1] # Функция формирования тела письма и его отправки

    Содержимое sendmail.ps1# Функция формирования тела письма и его отправки # Скрипт позволяет сфорировать письмо с вложением и требуемыми заголовками, с авторизацией на smtp сервере $sys = "C:\Service\Mail" $errlog = "$sys\error.log" $smtpserv = smtp.mail.ru $smtpport = 587 $ssl = $true $user = "user@mail.ru" $pwd = "paSSw0rd" $ecc = "copy@mail.ru" $from = "Служба уведомлений <user@mail.ru>" $subj = "Тема письма" Function SendEmail { Param ( [parameter(Mandatory=$true, ValueFromPipeline=$false)] $addr, [parameter(Mandatory=$true, ValueFromPipeline=$false)] [String] $Body, [parameter(Mandatory=$true, ValueFromPipeline=$false)] $matt ) Begin { $smtp = new-object Net.Mail.SmtpClient $smtpserv, $smtpport $smtp.Enablessl = $ssl $smtp.Credentials = New-Object System.Net.NetworkCredential($user, $pwd) $smtp.Timeout = 10000 } Process { $EmailFrom = $from $EmailCC = $ecc $Subject = $subj $msg = New-Object system.net.mail.mailmessage ForEach ($EmailAddr in $addr) { $msg.To.Add($EmailAddr) } if ($matt) { ForEach($fatt in $matt) { $attach = new-object Net.Mail.Attachment($fatt) $msg.Attachments.Add($attach) Write-Output $fatt | out-file -append -filepath $toprint -Encoding "UTF8" } } else { Break } $msg.CC.Add($EmailCC) $msg.DeliveryNotificationOptions = "OnSuccess" $msg.Priority = "high" $msg.From = $EmailFrom $msg.Subject = $Subject $msg.body = $Body $msg.IsBodyHTML = $true $msg.BodyEncoding = [System.Text.Encoding]::UTF8 $smtp.Send($msg) if ($error) { $erdt = get-date -f "yyyy.MM.dd HH:mm:ss" Write-Output $Body | out-file -append -filepath $errlog -Encoding "UTF8" Write-Output "$erdt $error" | out-file -append -filepath $errlog -Encoding "UTF8" } $error.clear() } } # "asdasd" | ConvertTo-SecureString -AsPlainText -Force | ConvertFrom-SecureString

    # Скрипт позволяет сфорировать письмо с вложением и требуемыми заголовками, с авторизацией на smtp сервере

  • [Скачать set-wallpaper.ps1] # Смена изображения на рабочем столе

    Содержимое set-wallpaper.ps1# Смена изображения на рабочем столе # Функция смены изображения на рабочем столе пользователя. Может быть полезно, если изображение содержит важную информацию Function Set-WallPaper($Value) { Set-ItemProperty -path 'HKCU:\Control Panel\Desktop\' -name wallpaper -value $value rundll32.exe user32.dll, UpdatePerUserSystemParameters } Set-WallPaper -value "C:\Service\IMG\$env:UserName.png" # Не уверен что оно работает стабильно, не помню что бы это решение тестировалось

    # Функция смены изображения на рабочем столе пользователя. Может быть полезно, если изображение содержит важную информацию

  • [Скачать sync.ps1] # Синхронизация каталогов с эталонным (с фильтрацией)

    Содержимое sync.ps1# Синхронизация каталогов с эталонным (с фильтрацией) # Подобная синхронизация может применяться для обновления данных в каталогах пользователей, на основе эталонного. # Например, для обновления версии приложения. # Фильтрация разделена по дирректориям и файлам (расширениям, в данном случае). # Это может быть полезно, если у приложения есть пользовательская часть данных и общая (базовая), # а при обновлении пользовательскую нужно сохранять. # $pathsys = "f:\PSC" $content_d = Get-ChildItem $pathsys\System -filter * -exclude catalog,data,word,templates,Prices | where { $_.PSIsContainer -eq $true } $content_f = Get-ChildItem $pathsys\System -filter * -exclude *.zip,*.tmp,*.bak,*.psc | where { ! $_.PSIsContainer -eq $true } $users = Get-ChildItem $pathsys\Users -filter * | where { $_.PSIsContainer -eq $true } Foreach($user in $users) { Foreach($d in $content_d) { Copy-Item $d.FullName $pathsys\Users\$user\Program\System\ -Force } Foreach($f in $content_f) { if ($f.name -eq "Program.exe") { Copy-Item $f.FullName $pathsys\Users\$user\Program\System\Program_$user.exe -Force } else { Copy-Item $f.FullName $pathsys\Users\$user\Program\System\ -Force } } }

    # Подобная синхронизация может применяться для обновления данных в каталогах пользователей, на основе эталонного.



Похожие на pc-v.ru домены, в магазине доменов REG.RU
Витрина домена pc-v.ru на REG.RU
Купить домен pc-v.ru, в магазине доменов REG.RU
Информация Whois по домену pc-v.ru на REG.RU
© 2020
Яндекс.Метрика