Auteur de questions
Par défaut Une solution de script Shell sous Win pour tester les ping et telnet sur multi_site

Question
-
Bonjour,
Je me permet de vous écrire suite a un blocage de plusieurs jour pour résoudre le problème pour mon script je viens de commencer sur shell :
Le principe de ce code est de faire un :
- Test sur :
* ping GOOGLE.FR et test.FR
* telnet test 10050
* telnet localhost 20150
- et afficher le hostname et le SID(Security Identifiers) de la machine windows.
>> Résultat souhaité : pour le ping et telnet : résultat doit afficher si le test de ping est bon alors afficher "success" sinon afficher "failed", même prince pour telnet .
Une fois mon code s’exécute doit m'envoyer des fichiers de log à un chemin précis à déclarer, ainsi doit m'envoyer un rapport de résultat par email si c'est possible.
Je demande un retour d'expérience svp Merci pour vos retour.# récuperer hostname $env:computername # test connectivité google et code42 $ServerName = "www.google.fr","www.code42.fr" ##### Script Starts Here ###### foreach ($Server in $ServerName) { if (test-Connection $Server -Count 2 -Quiet ) { write-Host "$Server succes " -ForegroundColor Green } else { Write-Warning "$Server failed" } }
Toutes les réponses
-
Bonjour,
Pour améliorer ton code tu peux tout d'abord créer une fonction et utiliser un parametre de fonction pour passer le nom ou les noms de poste à ta fonction.
Si tu veux créer un log il y a une méthode très simple qui te permet de stocker les erreurs dans une variable puis d'en exporter le tout dans un fichier à la fin de ton traitement.
test-connection -ErrorVariable $Global:ErrorLogs
Passer le périmètre de ta variable en global te permettra de recuperer son contenu hors de celle-ci.
Voici le code complet j'éspère que cela t'aidera car ma réponse est un peu tardive :
Function Test-ComputerConnection { [cmdletbinding()] Param( [Parameter(mandatory=$False,HelpMessage ="Saisir le(s) nom(s) d'ordinateur(s) séparé(s) par des virgules")] [ValidateNotNullOrEmpty()] [String[]]$ComputerName ) Begin{ # Create date string $date= Get-date -Format "dd.MM.yyyy hh.mm" # Check if report folder exist $reportfolder=test-path -path $date # Create report folder if does not exist if(!$reportfolder) { New-Item -ItemType directory -Name "$date"} } Process{ foreach($computer in $ComputerName) { $icmp=test-connection -ComputerName $computer -count1 -Quiet -ErrorVariable +Global:ErrorLogs; if(!$icmp) { Write ($output="$computerrépondu au ping en date du $date") $Log_Nok=$output|Out-File./$date/report_network.txt-Append-ErrorVariable+Global:ErrorLogs} else { Write ($output="$computera répondu au ping en date du $date") $Log_OK= $output | out-file ./$date/report_network.txt -Append -ErrorVariable +Global:ErrorLogs } } } End{ # Check if error variable is empty If($ErrorLogs) { $ErrorLogs | Out-File./$date/global_function_errors.txt Write-Host "La variable contient quelque erreurs : $ErrorLogs.count" Write-Host 'Vous pouvez utiliser la commande suivante : "$strerror.Message.Exception"'} # Report that error variable is empty to host Else{ Write-Host"La fonction c'est executée sans erreur" } } }
Kévin KISOKA - MCITP Entreprise Messaging Administrator, MCTS Hyper-V Server Virtualization I do not represent the organisation I work for, all the opinions expressed here, are my own. This posting is provided AS IS with no warranties or guarantees and confers no rights.
- Modifié KISOKA Kévin vendredi 29 mai 2015 08:12
-
Function Do-Nmap { Param( [Parameter(Mandatory=$True)] [string]$ComputerName=$(throw 'ComputerName is mandatory, please provide a value.'), [string]$Ports=$(throw 'Port number is mandatory, please provide a value.') ) foreach ($Computer in $ComputerName) { foreach ($Port in $Ports) { # Create a Net.Sockets.TcpClient object to use for # checking for open TCP ports. $Socket = New-Object Net.Sockets.TcpClient # Suppress error messages $ErrorActionPreference = 'SilentlyContinue' # Try to connect $Socket.Connect($Computer, $Port) # Make error messages visible again $ErrorActionPreference = 'Continue' # Determine if we are connected. if ($Socket.Connected) { "${Computer}: Port $Port is open" $Socket.Close() } else { "${Computer}: Port $Port is closed or filtered" } # Apparently resetting the variable between iterations is necessary. $Socket = $null } } }
- Modifié KISOKA Kévin vendredi 29 mai 2015 09:42
-
-
Bonjour Laurent ,
il n'y a pas d'erreur de typo ou d'algo dans le code que j'ai copié ceci est dû à la mise en forme un peu bancale du forum je vais l'insérer différemment merci pour ta remarque.
Kévin KISOKA - MCITP Entreprise Messaging Administrator, MCTS Hyper-V Server Virtualization I do not represent the organisation I work for, all the opinions expressed here, are my own. This posting is provided AS IS with no warranties or guarantees and confers no rights.