Решил сделать подобное централизовано путем запуска резервного копирования на роутере командой по ssh во временный файл temp.backup и загрузки его по фтп.
#зададим политику сразу, чтобы не вспминать команду при переносе Set-ExecutionPolicy remotesigned -scope currentuser #установка и импорт библиотеки для ssh Install-Module -Name Posh-SSH Import-Module posh-ssh $curDir = $MyInvocation.MyCommand.Definition | split-path -parent function bkprtr { param($ipaddr) #тут указываем логин и пароль к роутерам с правами на ftp и ssh. $secpasswd = ConvertTo-SecureString "Ваш_пароль_к_роутеру" -AsPlainText -Force $mycreds = New-Object System.Management.Automation.PSCredential ("Ваш_логин_к_роутеру", $secpasswd) $error.clear() #Подключение по ssh и отправка команды резервного копирования New-SSHSession -ComputerName $ipaddr -Credential $mycreds -Force Invoke-SshCommand -index 0 -Command "system backup save name temp.backup" Get-SSHSession | Remove-SshSession; $Cdate=get-date -Uformat %Y%m%d $rptpath = "$curDir\backup\$cdate" #Создание каталога по дате if (!(test-path -path $rptpath)) {new-item -path $rptpath -itemtype directory} #скачивание файла wget -Uri "ftp://$ipaddr/temp.backup" -OutFile "$rptpath\$ipaddr.backup" -Credential $mycreds #вывод ошибок в файл журнала If ($error.count -gt 0) { get-date | out-file "$curDir\error.log" -append $ipaddr | out-file "$curDir\error.log" -append $error | out-file "$curDir\error.log" -append $error.clear() } } #обрабатываем файл list.txt построчно foreach ($ip in gc $curDir\list.txt ){bkprtr($ip)}
Список адресов маршрутизаторов list.txt следует положить в каталог скрипта. Бэкапы будут складываться в папку backup в подкаталог с датой запуска скрипта. Сами бэкапы именуются по адресу маршрутизатора.
Возможно, кому-то пригодится.
upd.
вторая версия без использования промежуточных файлов
#зададим политику сразу, чтобы не вспминать команду при переносе Set-ExecutionPolicy remotesigned -scope currentuser #установка и импорт библиотеки для ssh Install-Module -Name Posh-SSH Import-Module posh-ssh $curDir = $MyInvocation.MyCommand.Definition | split-path -parent function bkprtr { param($ipaddr) #тут указываем логин и пароль к роутерам с правами на ftp и ssh. $secpasswd = ConvertTo-SecureString "Ваш_пароль_к_роутеру" -AsPlainText -Force $mycreds = New-Object System.Management.Automation.PSCredential ("Ваш_логин_к_роутеру+ct", $secpasswd) $error.clear() $Cdate=get-date -Uformat %Y%m%d $rptpath = "$curDir\backup\$cdate" #Создание каталога по дате if (!(test-path -path $rptpath)) {new-item -path $rptpath -itemtype directory} #скачивание файла #Подключение по ssh и отправка команды резервного копирования $sshsession=New-SSHSession -ComputerName $ipaddr -Credential $mycreds -Force $ssh = $sshSession | New-SSHShellStream start-sleep -s 5 $ssh.read() | out-null $ssh.WriteLine( "export" ) start-sleep -s 15 $ssh.read() | sc "$rptpath\$ipaddr.backup" $tfileproc=gc "$rptpath\$ipaddr.backup" $tfileproc[2..($tfileproc.count-2)]|sc "$rptpath\$ipaddr.backup" Get-SSHSession | Remove-SshSession; #вывод ошибок в файл журнала If ($error.count -gt 0) { get-date | out-file "$curDir\error.log" -append $ipaddr | out-file "$curDir\error.log" -append $error | out-file "$curDir\error.log" -append $error.clear() } }

