Рейтинг статьи: 2.400/5 



(5 голосов).
Этот вариант резервирования файлов можно рассматривать как один из инструментов, который в дальнейшем можно использовать и для других целей.
Используется 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
Комментариев нет. Станьте первым!
























