Question Script PS sauvegarde Cisco / Small Business

Plus d'informations
il y a 10 ans 2 mois #21210 par Odric
Bonjour à tous,
Depuis quelques temps je travail sur un moyen de sauvegarder les actifs réseaux de mon parc.

Je viens de faire un script avec POSH-SSH mais j'ai quelques erreurs.
Voici le script :
[code:1]#################################################################################################
# Author: Odric #
# Requirements: Powershell 3.0, Posh-SSH module #
# For install POSH-SSH go to : github.com/darkoperator/Posh-SSH #
# Installation : #
# Accept external scripting (Set-ExecutionPolicy Unrestricted) #
#################################################################################################

# Download and Install :
# iex (New-Object Net.WebClient).DownloadString(\"gist.github.com/darkoperator/6152630/raw...poshsshdev\"«») #
# 10.1.2.3 = serv and tftp server

#Static folders
$Dossier_save = \"\\serv\c$\tftp\"
$Dossier_save_change = \"\\serv\c$\tftp\change\"
$Dossier_save_temp = \"\\serv\c$\tftp\temp\"

#Import of CSV File (Cisco SW and SmallBusiness SW List)
$CSV = Import-Csv -Path \"$Dossier_save\liste_sw.csv\" -Delimiter \";\"

#Loop Begin
Foreach ($Commu in $CSV) {
$ipaddress = $Commu.switchip
$username = $Commu.user
$password = $Commu.pass
$modele = $Commu.modele
$date = Get-Date -Format \"yyyy-MM-dd\"

#Test Connection to Switch
if (Test-Connection $ipaddress -Count 5 -Quiet) {

#Create string for password security check on cisco
$secstr = New-Object -TypeName System.Security.SecureString
$password.ToCharArray() | ForEach-Object {$secstr.AppendChar($_)}
$cred = new-object -typename System.Management.Automation.PSCredential -argumentlist $username, $secstr
New-SSHSession -ComputerName $ipaddress -Credential $cred
$session = Get-SSHSession -Index 0
$stream = $session.Session.CreateShellStream(\"dumb\", 0, 0, 0, 0, 1000)


if ($modele -eq \"sb\"«») {
Write-Host \"Small Business\"
$stream.Write(\"cisco`n\"«»)
$stream.Write(\"$password`n\"«»)
$stream.WriteLine(\"copy startup-config tftp://10.1.2.3/temp/$ipaddress.startup-config\"«»)
Write-Host \"Fin Small Business\"
Test-Connection $ipaddress -Count 3 -Quiet
Remove-SSHSession -Index 0
}


if ($modele -eq \"cisco\"«») {
Write-Host \"Cisco\"
$stream.WriteLine(\"terminal len 0\"«»)
$stream.WriteLine(\"configure terminal\"«»)
$stream.WriteLine(\"file prompt quiet\"«»)
$stream.WriteLine(\"exit\"«»)
$stream.WriteLine(\"copy startup-config tftp://10.1.2.3/temp/$ipaddress.startup-config\"«»)
$stream.WriteLine(\"clear ip arp 10.1.2.3\"«»)
$stream.WriteLine(\"exit\"«»)

Write-Host \"Fin Cisco\"
Test-Connection $ipaddress -Count 3 -Quiet
Remove-SSHSession -Index 0
Write-Host \"Fin SSH $ipaddress\"
}

Write-Host \"Récuperation de la sortie\"
$Sortie = \"$Dossier_save_temp\$ipaddress.startup-config\"
Get-Content $Sortie | Out-File $Dossier_save_temp\tempactu.txt


if (Test-Path -Path \"$Dossier_save\$ipaddress.startup-config\"«») {
Get-Content \"$Dossier_save\$ipaddress.startup-config\" | Out-File $Dossier_save_temp\tempdiff.txt
$conf_actu_rev = Get-Content $Dossier_save_temp\tempactu.txt
$conf_diff_rev = Get-Content $Dossier_save_temp\tempdiff.txt

if (Compare-Object -ReferenceObject $conf_actu_rev -DifferenceObject $conf_diff_rev) {
Move-Item \"$Dossier_save\$ipaddress.startup-config\" \"$Dossier_save_change\$ipaddress.$date.startup-config\"
Test-Connection $ipaddress -Count 3 -Quiet
Move-Item $Sortie $Dossier_save
} else {
write-host \"Configurations identiques\"
}

} else {
Move-Item -Path \"$Sortie\" -Destination \"$Dossier_save\$ipaddress.startup-config\"
}
Remove-Item $Dossier_save_temp\tempactu.txt
Remove-Item $Dossier_save_temp\tempdiff.txt
Remove-Item $Dossier_save_temp\$ipaddress.startup-config
Test-Connection $ipaddress -Count 2 -Quiet


Write-Host \"Fin de boucle\"
}

}[/code:1]

Ma première erreur :
[code:1]Move-Item : Le processus ne peut pas accéder au fichier, car il est utilisé par un autre processus.
Au caractère C:\tftp\betatest.ps1:87 : 5
+ Move-Item -Path \"$Sortie\" -Destination \"$Dossier_save\$ipaddress.startup-con ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : WriteError: (\\serv\c$\tft....startup-config:FileInfo) [Move-Item], IOException
+ FullyQualifiedErrorId : MoveFileInfoItemIOError,Microsoft.PowerShell.Commands.MoveItemCommand
[/code:1]

La seconde est que la session PowerShell ne se termine pas sur 1 de mes switchs (Remove-SSHSession en mode verbeux me dit qu'il initialise la cloture mais ne va pas jusqu'au bout du processus).

Avez-vous une idée ?
Merci d'avance ;)

Message édité par: odric88, à: 29/12/15 13:02<br><br>Message édité par: odric88, à: 29/12/15 13:04

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 10 ans 2 mois #21227 par Odric
Bonjour à tous et bonne année surtout.
J'ai réussi à comprendre les 2 erreurs qui apparaissaient.
La première n'était juste qu'une question de permissions insuffisantes ... (Oubli de désactiver l'héritage).

La seconde est que les SmallBusiness ne comprennent pas la commande de déconnexion SSH.
Rester sur l'ID 0 du coup n'était pas le bon choix.

Encore une bonne année à tous :) .
Odric

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.043 secondes
Propulsé par Kunena