Тернопіль - Форум Файного Міста
Назад   Тернопіль - Форум Файного Міста > Комп'ютерні обговорення: Hard, Soft, Nets, Design, CAD etc > Операційні системи / адміністрування

Операційні системи / адміністрування Linux, Unix, Windows, DOS... обговорюєм можливості, налагодження, встановлення, продуктивність, секрети...


Задачі на .bat-файлах

Відповідь
 
Параметри теми Пошук у темі Параметри перегляду
Старий 20.07.2012, 01:41 #1994737   #1
$iD
 
Аватар для $iD
Типово Задачі на .bat-файлах

Не знайшов подібної теми, надіюся вона буде комусь цікавою.
Пропоную тут ділитися вирішеннями якихось задач по автоматизації адміністрування віндовса методами командної стрічки або power shell і пробувати спільно вирішувати якісь задачі.
Отож почну першим.
Дано: Робочу групу з 46 машин
адмінські шари
Потрібно: розкинути з одного компа на певні компютери файли з одинаковим шляхом

Після риття в інтернетах, і купи експериментів наваяв таке:
Прихований текст: copy.bat 


Батнік монтує диски E: з компютерів, айпішки яких прописані в файлі list.txt в поточній директорії (в мене це була D:\temp) на мережевий диск Z: , копіює на них файл cs.tib який знаходиться по шляху D:\temp\1\ і розмонтовує мережевий диск.
в файлі list.txt можна прописувати не лише айпішки, а й конкретні папки на віддалених машинах - того цей скріпт достатньо гнучкий. Надіюся комусь він стане в пригоді.
$iD зараз поза форумом  
Офтопів до посту: 0  Офтоп  
Старий 20.07.2012, 07:03 #1994762   #2
ados
 
Аватар для ados
Типово Відповідь: Задачі на .bat-файлах

Для таких задач краще підходить Windows host scripting
bat файли це вже для чогось простенького
ados зараз поза форумом  
Офтопів до посту: 0  Офтоп  
Старий 20.07.2012, 07:18 #1994769   #3
$iD
 
Аватар для $iD
Типово Відповідь: Задачі на .bat-файлах

Цитата:
Допис від ados Переглянути допис
Для таких задач краще підходить Windows host scripting
bat файли це вже для чогось простенького
не мав справи з ним, нажаль. поки що майже всі потреби задовільняє cmd =)
але перспективи ради, почав читати гайди і факи по power shell
$iD зараз поза форумом  
Офтопів до посту: 0  Офтоп  
Старий 20.07.2012, 16:29 #1995289   #4
Jony
ムゲツ
 
Аватар для Jony
Типово Відповідь: Задачі на .bat-файлах

Давно юзаю павершел, як для адміністрування гіпервізорів (Ксен і вСфери), так і для посякденних задач.
Ось один з бомбових прикладів - скрипт перевірки відкритості портів на ПК
Код:
function Test-Port{
<#  
.SYNOPSIS  
    Tests port on computer.
.DESCRIPTION
    Tests port on computer.
.PARAMETER computer
    Name of server to test the port connection on.
.PARAMETER port
    Port to test  
.PARAMETER tcp
    Use tcp port  
.PARAMETER udp
    Use udp port  
.PARAMETER UDPTimeOut
    Sets a timeout for UDP port query. (In milliseconds, Default is 1000)  
.PARAMETER TCPTimeOut
    Sets a timeout for TCP port query. (In milliseconds, Default is 1000)            
.EXAMPLE  
    Test-Port -computer 'server' -port 80
    Checks port 80 on server 'server' to see if it is listening
.EXAMPLE  
    'server' | Test-Port -port 80
    Checks port 80 on server 'server' to see if it is listening  
.EXAMPLE  
    Test-Port -computer @("server1","server2") -port 80
    Checks port 80 on server1 and server2 to see if it is listening    
.EXAMPLE  
    @("server1","server2") | Test-Port -port 80
    Checks port 80 on server1 and server2 to see if it is listening  
.EXAMPLE  
    (Get-Content hosts.txt) | Test-Port -port 80
    Checks port 80 on servers in host file to see if it is listening
.EXAMPLE  
    Test-Port -computer (Get-Content hosts.txt) -port 80
    Checks port 80 on servers in host file to see if it is listening    
.EXAMPLE  
    Test-Port -computer (Get-Content hosts.txt) -port @(1..59)
    Checks a range of ports from 1-59 on all servers in the hosts.txt file    
           
#>  
[cmdletbinding(
    DefaultParameterSetName = '',
    ConfirmImpact = 'low'
)]
    Param(
        [Parameter(
            Mandatory = $True,
            Position = 0,
            ParameterSetName = '',
            ValueFromPipeline = $True)]
            [array]$computer,
        [Parameter(
            Position = 1,
            Mandatory = $True,
            ParameterSetName = '')]
            [array]$port,
        [Parameter(
            Mandatory = $False,
            ParameterSetName = '')]
            [int]$TCPtimeout=1000,
        [Parameter(
            Mandatory = $False,
            ParameterSetName = '')]
            [int]$UDPtimeout=1000,            
        [Parameter(
            Mandatory = $False,
            ParameterSetName = '')]
            [switch]$TCP,
        [Parameter(
            Mandatory = $False,
            ParameterSetName = '')]
            [switch]$UDP            
                         
        )
    Begin {
        If (!$tcp -AND !$udp) {$tcp = $True}
        #Typically you never do this, but in this case I felt it was for the benefit of the function
        #as any errors will be noted in the output of the report        
        $ErrorActionPreference = "SilentlyContinue"
        $report = @()
        }
    Process {    
        ForEach ($c in $computer) {
            ForEach ($p in $port) {
                If ($tcp) {  
                    #Create temporary holder  
                    $temp = "" | Select Server, Port, TypePort, Open, Notes
                    #Create object for connecting to port on computer
                    $tcpobject = new-Object system.Net.Sockets.TcpClient
                    #Connect to remote machine's port              
                    $connect = $tcpobject.BeginConnect($c,$p,$null,$null)
                    #Configure a timeout before quitting
                    $wait = $connect.AsyncWaitHandle.WaitOne($TCPtimeout,$false)
                    #If timeout
                    If(!$wait) {
                        #Close connection
                        $tcpobject.Close()
                        Write-Verbose "Connection Timeout"
                        #Build report
                        $temp.Server = $c
                        $temp.Port = $p
                        $temp.TypePort = "TCP"
                        $temp.Open = "False"
                        $temp.Notes = "Connection to Port Timed Out"
                        }
                    Else {
                        $error.Clear()
                        $tcpobject.EndConnect($connect) | out-Null
                        #If error
                        If($error[0]){
                            #Begin making error more readable in report
                            [string]$string = ($error[0].exception).message
                            $message = (($string.split(":")[1]).replace('"',"")).TrimStart()
                            $failed = $true
                            }
                        #Close connection    
                        $tcpobject.Close()
                        #If unable to query port to due failure
                        If($failed){
                            #Build report
                            $temp.Server = $c
                            $temp.Port = $p
                            $temp.TypePort = "TCP"
                            $temp.Open = "False"
                            $temp.Notes = "$message"
                            }
                        #Successfully queried port    
                        Else{
                            #Build report
                            $temp.Server = $c
                            $temp.Port = $p
                            $temp.TypePort = "TCP"
                            $temp.Open = "True"  
                            $temp.Notes = ""
                            }
                        }    
                    #Reset failed value
                    $failed = $Null    
                    #Merge temp array with report            
                    $report += $temp
                    }    
                If ($udp) {
                    #Create temporary holder  
                    $temp = "" | Select Server, Port, TypePort, Open, Notes                                    
                    #Create object for connecting to port on computer
                    $udpobject = new-Object system.Net.Sockets.Udpclient($p)
                    #Set a timeout on receiving message
                    $udpobject.client.ReceiveTimeout = $UDPTimeout
                    #Connect to remote machine's port              
                    Write-Verbose "Making UDP connection to remote server"
                    $udpobject.Connect("$c",$p)
                    #Sends a message to the host to which you have connected.
                    Write-Verbose "Sending message to remote host"
                    $a = new-object system.text.asciiencoding
                    $byte = $a.GetBytes("$(Get-Date)")
                    [void]$udpobject.Send($byte,$byte.length)
                    #IPEndPoint object will allow us to read datagrams sent from any source.
                    Write-Verbose "Creating remote endpoint"
                    $remoteendpoint = New-Object system.net.ipendpoint([system.net.ipaddress]::Any,0)
                   
                    Try {
                        #Blocks until a message returns on this socket from a remote host.
                        Write-Verbose "Waiting for message return"
                        $receivebytes = $udpobject.Receive([ref]$remoteendpoint)
                        [string]$returndata = $a.GetString($receivebytes)
                        }
 
                    Catch {
                        If ($Error[0].ToString() -match "\bRespond after a period of time\b") {
                            #Close connection
                            $udpobject.Close()
                            #Make sure that the host is online and not a false positive that it is open
                            If (Test-Connection -comp $c -count 1 -quiet) {
                                Write-Verbose "Connection Open"
                                #Build report
                                $temp.Server = $c
                                $temp.Port = $p
                                $temp.TypePort = "UDP"
                                $temp.Open = "True"
                                $temp.Notes = ""
                                }
                            Else {
                                <#
                                It is possible that the host is not online or that the host is online,
                                but ICMP is blocked by a firewall and this port is actually open.
                                #>
                                Write-Verbose "Host maybe unavailable"
                                #Build report
                                $temp.Server = $c
                                $temp.Port = $p
                                $temp.TypePort = "UDP"
                                $temp.Open = "False"
                                $temp.Notes = "Unable to verify if port is open or if host is unavailable."                                
                                }                        
                            }
                        ElseIf ($Error[0].ToString() -match "forcibly closed by the remote host" ) {
                            #Close connection
                            $udpobject.Close()
                            Write-Verbose "Connection Timeout"
                            #Build report
                            $temp.Server = $c
                            $temp.Port = $p
                            $temp.TypePort = "UDP"
                            $temp.Open = "False"
                            $temp.Notes = "Connection to Port Timed Out"                        
                            }
                        Else {
                            $udpobject.close()
                            }
                        }    
                    #Merge temp array with report            
                    $report += $temp
                    }                                
                }
            }                
        }
    End {
        #Generate Report
        $report
        }        
}

Test-Port
Маю цілу коллекцію скриптів, більшість вже скачані готові, решту писав сам під конкретно потреби.
Jony зараз поза форумом  
Подякував(ла):
$iD (20.07.2012)
Офтопів до посту: 0  Офтоп  
Старий 20.07.2012, 19:34 #1995389   #5
$iD
 
Аватар для $iD
Типово Відповідь: Задачі на .bat-файлах

Цитата:
Допис від Jony Переглянути допис
Маю цілу коллекцію скриптів, більшість вже скачані готові, решту писав сам під конкретно потреби.
Можеш порадити якусь літературу для нубів по павер шеллу?)
$iD зараз поза форумом  
Офтопів до посту: 0  Офтоп  
Старий 24.11.2012, 03:06 #2081720   #6
$iD
 
Аватар для $iD
Типово Відповідь: Задачі на .bat-файлах

Була задачка. Робоча група на багато компів Windows XP sp3, встановлені браузери Опера і Мозіла. Треба автоматизувати зміну стартової сторінки на потрібну мені (наприклад http://forum.te.ua/), і виставлення шляхів дефолтного збереження файлів на шару в залежності від номера компа, (по принципу \\192.168.56.10\pc_0*порядковий номер компютера*)

Вот кусок скріпта по автонастройці:
Прихований текст: скріпт 


Принцип роботи:
змінна var в мене маэ значення порядкового номера компютера.
Налаштування Опери знаходяться у файлі operaprefs.ini за шляхом C:\Documents and Settings\$iDadmin\Application Data\Opera\Opera\
Налаштування Мозілли в файлі prefs.js за шляхом C:\Documents and Settings\$iDadmin\Application Data\Mozilla\Firefox\Profiles\*профіль*(профіль на кожному компютері унікальний)
Скріпт перебирає обидва ці файли, шукає відповідні стрічки з записом настройок і вписує туда задані мною значення.

Надіюся комусь скріпт стане в пригоді.
$iD зараз поза форумом  
Офтопів до посту: 0  Офтоп  
Старий 28.01.2016, 16:39 #2611090   #7
$iD
 
Аватар для $iD
Типово Відповідь: Задачі на .bat-файлах

Підніму стару тему. Стикнувся з задачею: є маленька фірма, на ній стоїть сервер (windows 7 x64) з 1с і всякими потрімними документами (.xls, .doc i т.д.). Недавно вчепили на тому сервері кріптолокер. Купу важливої інфи втратили, тре було настроїти систему бекапів, щоб в майбутньому такого не повторилося. Зібрали зі старого компютера FreeNAS сервер з CIFS-шарою і написав такий от скріпт (точніше адапував оцей - ЛІНК):

Прихований текст: BAT 

Цей скріпт запускаэться на сервері, монтує нас-шару як мережевий диск W:, у якій перевіряє присутність папки Archive, у цій папці створює папку з датою бекапу. У цю папку через 7zip архівує папки baza (архів називатиметься 1с.7z) і Work (work.7z). Також в цій папці пишеться лог бекапу (%date%.log)
Після закінчення архівації - скріпт впорядковує папки з датами і залишає 20 найн овіших, решту видаляє. Після чого розмонтовує диск.
Цей скріпт примонтував до шедюлера сервера на виконання кожного робочого дня за 1 годину до закінчення.
Так як шара на насі прихована і запаролена, і НАС зєднується лише з сервером і то на +- 30 хв в день. - криптолокери і інші віруси туди не повинні добратися.

Можливо комусь пригодиться таке рішення.
$iD зараз поза форумом  
Офтопів до посту: 0  Офтоп  
Старий 28.01.2016, 18:36 #2611122   #8
S.H.A.D.E
 
Аватар для S.H.A.D.E
Типово Відповідь: Задачі на .bat-файлах

А можна було поставити нормальний DC і більшість ваших задач робиться через адміністрування домена. ТАм і розмежування доступів, і архівація...
S.H.A.D.E зараз поза форумом  
Офтопів до посту: 2  Офтоп  
Старий 29.01.2016, 20:17 #2611506   #9
Don Kihot
 
Аватар для Don Kihot
Типово Відповідь: Задачі на .bat-файлах

Цитата:
Допис від S.H.A.D.E Переглянути допис
А можна було поставити нормальний DC і більшість ваших задач робиться через адміністрування домена. ТАм і розмежування доступів, і архівація...
Цитата:
Допис від $iD Переглянути допис
Стикнувся з задачею: є маленька фірма

Ектів діректорі не всюди панацея, попробуй поясни власнику малого бізнесу, що йому потрібно додаткові дві машини для КД (без репліки не пропонувати, ймовірність виложити мережу через креш КД приблизно рівна ймовірності просрати дані). Тому всякі костилі у вигляді бат-файлів мають право на існування та свою нішу застосування.
Don Kihot зараз поза форумом  
Подякував(ла):
$iD (03.02.2016)
Офтопів до посту: 0  Офтоп  
Старий 29.01.2016, 21:46 #2611532   #10
S.H.A.D.E
 
Аватар для S.H.A.D.E
Типово Відповідь: Задачі на .bat-файлах

46 машин маленька фірма?
я не проті батників, я проти годування через сраку
S.H.A.D.E зараз поза форумом  
Офтопів до посту: 1  Офтоп  
Старий 02.02.2016, 15:35 #2612254   #11
Distemper
псіх одіночка
 
Аватар для Distemper
Типово Відповідь: Задачі на .bat-файлах

Ми зрбили простіше. Сервер поставили на Дебіані , там встановили віртуалки на вінді з сервером ліцензій 1С і б/д 1С і бекап кожного дня ну і відповідно теж 20-30 днів з видаленням старих бекапів і не треба придумувати ніяких костилів. і вінти в рейді. Відновити з бек-апу віртуалки бази 1С і всі файли простіше ніж придумувати куму гемору. (Фірма напевно ще менша ніж 46 машин) Все просто і сердито.

Востаннє редагував Distemper: 03.02.2016 о 09:51.
Distemper зараз поза форумом  
Офтопів до посту: 0  Офтоп  
Старий 03.02.2016, 14:34 #2612446   #12
Don Kihot
 
Аватар для Don Kihot
Типово Відповідь: Задачі на .bat-файлах

Цитата:
Допис від Distemper Переглянути допис
Ми зрбили простіше. Сервер поставили на Дебіані , там встановили віртуалки на вінді з сервером ліцензій 1С і б/д 1С і бекап кожного дня ну і відповідно теж 20-30 днів з видаленням старих бекапів і не треба придумувати ніяких костилів. і вінти в рейді. Відновити з бек-апу віртуалки бази 1С і всі файли простіше ніж придумувати куму гемору. (Фірма напевно ще менша ніж 46 машин) Все просто і сердито.
Гіпервізор який? KVM? Яким чином по гарячому консистентні бекапи робите, снапшотами чи якось інакше? Чи тушатьтся віртуалки перед бекапом?
Don Kihot зараз поза форумом  
Офтопів до посту: 0  Офтоп  
Старий 03.02.2016, 15:18 #2612454   #13
Distemper
псіх одіночка
 
Аватар для Distemper
Типово Відповідь: Задачі на .bat-файлах

Цитата:
Допис від Don Kihot Переглянути допис
Гіпервізор який? KVM? Яким чином по гарячому консистентні бекапи робите, снапшотами чи якось інакше? Чи тушатьтся віртуалки перед бекапом?
KVM використовується. Тушаться віртуалки перед бекапом в 00:00 коли нікого на роботі вже фізично немає . Робиться не снепшотами ,а бекапи образів віртуалок (розділів) . Снепшотами коли робили то дуже починало лагати (падла швидкість читання розділів)

Вінти в рейді конфіги всі збережені Дебіана тому відновити і розгорнути заново Лінус не проблема. 4 вінта 2 по 2 в реді і все. за 2 роки жодних серйозних проблем не виникало. Виникали лише після того коли вимикалося світло накопичувалися помилки в самій 1С і тоді їх віддалено чистили ІТ-шники 1С тех-сапорта , але то вже не наші проблеми.
Distemper зараз поза форумом  
Офтопів до посту: 0  Офтоп  
Відповідь



Ваші права у розділі
Ви не можете створювати теми
Ви не можете писати дописи
Ви не можете долучати файли
Ви не можете редагувати дописи

BB-код є Увімк.
Усмішки Увімк.
[IMG] код Увімк.
HTML код Вимк.

Швидкий перехід


vBulletin 3.8.7 ; Переклад: © Віталій Стопчанський, 2003-2024 Форум Файного Міста Тернопіль
VBSilver style released under GPL by TC Port of subSilver released by and copyright of phpBB
е-mail адміністратора серверу
Часовий пояс GMT +2. Поточний час: 12:37.