http://nettips.ru

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

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

Рейтинг статьи: 2.000/5 Рейтинг 2.00 из 5Рейтинг 2.00 из 5Рейтинг 2.00 из 5Рейтинг 2.00 из 5Рейтинг 2.00 из 5 (1 голосов).

Это третья статья о резервном копировании файлов конфигурации 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
http://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

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

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


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

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