Question Aide variable automatique

Plus d'informations
il y a 5 ans 3 semaines #28617 par dimshell
Aide variable automatique a été créé par dimshell
Bonjour,

Je ne comprends pas bien le but des variables automatique.

Je souhaites réaliser une sorte de prérequis avant le lancement de mon script.

[code:1]
$name=[system.environment]::MachineName


# Permets de lister les cartes réseau connectées


$eth = Invoke-Expression \"$env:USERPROFILE\Desktop\Windump.exe -ArgumentList -D\"

# Parcours les cartes et si il y a intel dedans stock le premier caractére donc le numéro de la carte pour notre commande Windump de la varaible $argum
foreach($item in $eth){

if ($item -match 'intel'){

$newitem =$item.Substring(0,1)
}
else {
$newitem=1
}
}
# Variable contenant des variables d'environnementspour le chemin d'accès au différents fichiers
$path=\"$($env:USERPROFILE)\Documents\"
$pathexec=\"$($env:USERPROFILE)\Desktop\"

# Commande WinDump
$argum=\"-i $newitem -q -n -t -c 500 tcp\"

# Contenant le résultat du WinDump
$fichier = \"$path\Windump.txt\"

# Contenant le résultat après modifiction de la variable $fichier
$newcontenu = \"$path\WindumpTri.txt\"

# Colonne du CSV
$Header = \"c1\",\"ipsrc\", \"portsrc\", \"ipdest\", \"portdest\", \"c6\"

# Lancement d'une application Windump.exe avec l'argument une variable contenant la commande WinDump et écrit dans le fichier fournit
$process=Start-Process $pathexec\Windump.exe -PassThru -ArgumentList $argum -RedirectStandardOutput $fichier

# Attends la fin d'execution du processus pour continuer le script
$process.WaitForExit()

# Lecture du fichier comme ci celui-ci été un CSV
$dump = Import-Csv $fichier -Header $Header -Delimiter \" \"


# Remplace après l'ip de destination le : par du vide (parcours l'ensemble des objets)
$dump | foreach {
$_.ipdest = $_.ipdest -replace \":\",\" \"
}
# Remplace par du vide l'élément bad-len
$dump | foreach {
$_.ipsrc = $_.ipsrc -replace \"bad-len\",\" \"
}
# Remplace via une regex les differentes colonnes (parcours l'ensemble des objets)
$result = $dump | foreach {
$portsrc = $_.ipsrc -replace [regex]\"([0-9]{1,3}\.){3}[0-9]{1,3}(\.)\",\"\"
$ipsrc = ($_.ipsrc -split [regex]\"([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})\"«»)[1]
$portdest = $_.ipdest -replace [regex]\"([0-9]{1,3}\.){3}[0-9]{1,3}(\.)\", \"\"
$ipdest = ($_.ipdest -split [regex]\"([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})\"«»)[1]
$_ | select @{n=\"ipsrc\";e={$ipsrc}},@{n=\"portsrc\";e={$portsrc}},@{n=\"ipdest\";e={$ipdest}},@{n=\"portdest\";e={$portdest}}
}

# écrit dans le résultat dans le fichier $newcontenu et ajoute entre l'ip dest/ source / port un ; (parcours l'ensemble des objets) dans la colonne ipsrc si elle est vide la supprimer
$result |where {$_.ipsrc -ne $null}| foreach {
\"$($_.ipsrc);$($_.portsrc);$($_.ipdest);$($_.portdest)\"
} | Set-Content $newcontenu



# export en CSV sans doublons
$result| select ipsrc, portsrc, ipdest, portdest -Unique | export-csv $path\Windump$name.csv \";\" -NoTypeInformation[/code:1]

J'aimerais pas exemple que le script s’exécute si le export-csv possède bien le bon nom.

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

Plus d'informations
il y a 5 ans 3 semaines #28623 par Sinjk
Réponse de Sinjk sur le sujet Re:Aide variable automatique
Salut Dimshell,

Ton csv à déjà un nom predéfini ? Sera t'il amené a changer souvent ?

Dans tous les cas je pense qu'un if en début de script pour déterminer l'existence ou non du CSV serait le plus simple à mettre en place
[code:1]if (Test-Path -Path \"pathverstoncsv\toncsv.csv\"«»){
#Tu déroules ton script

}else{
#Message d'erreur ou autre puis tu quittes le script

exit
}
[/code:1]

Bon courage

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

Plus d'informations
il y a 5 ans 3 semaines #28625 par dimshell
Réponse de dimshell sur le sujet Re:Aide variable automatique
Merci pour ta réponse.

Les CSV sont différents pour chaque serveur qui possède le script.

Ce n'est pas vraiment l'existence que je veux c'est une vérification par exemple.

ServeurParis.csv

$name =[system.environment]::MachineName (ServeurParis)
[code:1]$result| select ipsrc, portsrc, ipdest, portdest -Unique | export-csv $path\Windump$name.csv \";\" -NoTypeInformation[/code:1]

Je veux vérifier que le export-csv possède bien ServeurParis.

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

Plus d'informations
il y a 5 ans 3 semaines #28626 par Sinjk
Réponse de Sinjk sur le sujet Re:Aide variable automatique
Je te suggère deux choix:


- Vérifier ta variable $name avant ton export et réctifier sa valeur si elle ne correspond pas à tes attentes (pourquoi pas stocké le nom attendu en sortie).

- Reprendre l'exemple du Test-Path mais le mettre à la fin suivi d'une condition dans le cas où le nom ne correspond pas et renommer le CSV.


Bon courage<br><br>Message édité par: Sinjk, à: 2/04/19 13:10

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

Plus d'informations
il y a 5 ans 3 semaines #28628 par dimshell
Réponse de dimshell sur le sujet Re:Aide variable automatique
Merci pour ta réponse.

Je vais faire ça cela. je poste le résultat dès que j'ai fini.

Après c'est un peu bête ce que je fais non ? car avec ma variable $name je suis sûr du nom.

Mais il n'existe pas un moyen de définir des paramètres obligatoires en début de script ?
Exemple :

l'export doit être de se format avec ce nom là.

Message édité par: dimshell, à: 3/04/19 08:51

Message édité par: dimshell, à: 3/04/19 09:18<br><br>Message édité par: dimshell, à: 3/04/19 09:20

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

Plus d'informations
il y a 5 ans 3 semaines #28631 par Arnaud Petitjean
Bonjour à tous !

Je ne comprends pas bien le but des variables automatique.


Les variables automatiques sont des variables qui sont gérées automatiquement par PowerShell.
Ce qui fait qu'en tant que scripteur, on ne se préoccupe que d'utiliser ces variables; on ne les modifie jamais.

Par exemple la variable Error est une variable automatique qui contient toutes les erreurs générées depuis le lancement de la console PowerShell.

Il existe une rubrique d'aide qui explique tout ça très bien :
[code:1]
Help about_automatic_variables
[/code:1]

Mais il n'existe pas un moyen de définir des paramètres obligatoires en début de script ?

Oui bien sûr c'est prévu par PowerShell !

Il te suffit de déclarer un bloc Param (en tout début du script, 1ere ligne) et de nommer chacun des paramètres comme si tu déclarais des variables.
Ensuite, tu peux \&quot;décorer\&quot; ces paramètres à l'intérieur de ton bloc Param pour les rendre obligatoires si tu le souhaites.

Arnaud

MVP PowerShell et créateur de ce magnifique forum :-)
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?

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

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