nettips.ru

Организация резервного копирования файлов конфигурации Cisco используя PowerShell

На главную Cisco Systems VoIP Arduino маршрутизатор Android Беларусь Умный сетевой хаос дом Asterisk коммутатор Nateks Alcatel MTS Velcom Python Gigaset ZTE Grandstream Huawei админы шутят о сайте Zelax Allied Telesis D-Link Штрихкоды HP
Телефонные номера доступа sip операторов VitebskPets - инфопомощь животным в Витебске Телефонные коды городов и стран мира.

Рейтинг статьи: 2.750/5 Рейтинг 2.75 из 5Рейтинг 2.75 из 5Рейтинг 2.75 из 5Рейтинг 2.75 из 5Рейтинг 2.75 из 5 (4 голосов).

Это третья статья о резервном копировании файлов конфигурации Cisco. Соединение с оборудованием происходит по ssh, поэтому этот метод можно использовать и по открытым сетям, не волнуясь о перехвате трафика. Используется скрипт на PowerShell

Спонсор этой страницы:

Этот вариант резервирования файлов можно рассматривать как один из инструментов, который в дальнейшем можно использовать и для других целей.

Используется PowerShell. (Входит с состав windows 7 и выше. На Windows XP необходимо устанавливать отдельно)

Подготовительная работа

Список сетевого оборудования cisco решил хранить в "ini" файле, и использовать его в дальнейшем для других скриптов.

cisco.ini

[192.168.1.1]

[192.168.52.1]

[192.168.73.1]

На оборудовании cisco создаем пользователя для примера backup с паролем b@ckUpPa$$ с 15 привилегией.

создаем , который будет запускать скрипт с именем .\config.ps1

%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy ByPass -NoProfile powershell .\config.ps1

Для работы по протоколу SSH понадобится Renci.SshNet.dll
https://sshnet.codeplex.com/

Скрипт для копирования

.\config.ps1


# Load SSH library (for .NET 4.0 and PowerShell 3)
$DllPath = ".\Renci.SshNet.dll"
[void][reflection.assembly]::LoadFrom( (Resolve-Path $DllPath) )

#Функция чтения INI файла в массив
Function Get-IniContent {  
      
    [CmdletBinding()]  
    Param(  
        [ValidateNotNullOrEmpty()]  
        [ValidateScript({(Test-Path $_) -and ((Get-Item $_).Extension -eq ".ini")})]  
        [Parameter(ValueFromPipeline=$True,Mandatory=$True)]  
        [string]$FilePath  
    )  
      
    Begin  
        {Write-Verbose "$($MyInvocation.MyCommand.Name):: Function started"}  
          
    Process  
    {  
        Write-Verbose "$($MyInvocation.MyCommand.Name):: Processing file: $Filepath"  
              
        $ini = @{}  
        switch -regex -file $FilePath  
        {  
            "^\[(.+)\]$" # Section  
            {  
                $section = $matches[1]  
                $ini[$section] = @{}  
                $CommentCount = 0  
            }  
            "^(;.*)$" # Comment  
            {  
                if (!($section))  
                {  
                    $section = "No-Section"  
                    $ini[$section] = @{}  
                }  
                $value = $matches[1]  
                $CommentCount = $CommentCount + 1  
                $name = "Comment" + $CommentCount  
                $ini[$section][$name] = $value  
            }   
            "(.+?)\s*=\s*(.*)" # Key  
            {  
                if (!($section))  
                {  
                    $section = "No-Section"  
                    $ini[$section] = @{}  
                }  
                $name,$value = $matches[1..2]  
                $ini[$section][$name] = $value  
            }  
        }  
        Write-Verbose "$($MyInvocation.MyCommand.Name):: Finished Processing file: $FilePath"  
        Return $ini  
    }  
          
    End  
        {Write-Verbose "$($MyInvocation.MyCommand.Name):: Function ended"}  
} 


$FileContent = Get-IniContent ".\cisco.ini"
$date = Get-Date -Format "yyyy-MM-dd"
$outDir = ".\config\" + $date


#$FileContent.Keys | % { "key = $_ , value = " + $FileContent.Item($_) }
New-Item -ItemType directory -Path ".\config"
New-Item -ItemType directory -Path $outDir

foreach ($h in $FileContent.GetEnumerator()) {
    #Читаем в цикле секции являющиеся адресом устройства
    $ciscohost=$($h.Name)
    Write-Host $ciscohost
    $ports=$($h.Value)

       $SshClient = New-Object Renci.SshNet.SshClient($ciscohost, 22, 'backup', 'b@ckUpPa$$')
       $SshClient.Connect()
      if ($SshClient.isconnected)
      {
       $SshCommand = $SshClient.RunCommand("sh run")
       $outFile=$outDir + "\" + $ciscohost + ".config"
       Out-File -FilePath $outFile -InputObject $SshCommand.Result -encoding unicode
       $SshCommand.Dispose()
       $SshClient.Disconnect()
       $SshClient.Dispose()
      }

}


Результат скрипта для копирования

В результате должна появится папка config, в ней папка с текущей датой, а в ней файлы конфигураций.

Удачи в использовании новых инструментов.

Cisco Systems Backup Программирование PowerShell

Пожалуйста, оцените и ВЫ эту статью:

Комментариев нет. Станьте первым!


Ваши отзывы и предложения по работе сайта направляйте на форму обратной связи.

Яндекс.Метрика