En reprenant le fichier SQUID et la suite de cet article, nous allons dorénavant voir comment créer un tableau.
La syntaxe est la suivante pour créer un :
$variable = @(1,2,3)
Nous voyons également que lorsque $tableau est appelé, il renvoie l'ensemble des valeurs contenues dans la variable. Pour obtenir une valeur en particulier, il suffit d'appeler la variable, suivi de son emplacement dans le tableau (la première valeur portant l'index 0). Dans notre exemple, $tableau[1] renvoie donc la seconde valeur : 2.
Pour appeler la dernière valeur d'un tableau, il est possible de se servir d'une autre syntaxe, dans notre exemple il s'agit de $tableau[-1]. En mettant des valeurs négatives, on remonte dans le tableau, ainsi la valeur [-3] renvoie l'avant-avant-dernière valeur du tableau!
Et bien... Toutes! Peu importe ce que vous avez à déclarer, le tableau accepte TOUT! La preuve ci-dessous...
J'ai créé un tableau contenant 3 types de données différentes. Le première est de type System.String, le second System.Int32 et le dernier System.Byte...
Mais tout cela est très bien, mais COMMENT faire pour obtenir une vue "tableau", comme on l'entends de ce terme (comme sur la capture d'écran ci-dessous).
La réponse est simple et tient en un seul mot : Objets!
Au lieu d'entrer systématiquement une valeur par une valeur, nous allons créer des objets correspondant à des lignes. La syntaxe de tout cela est assez simple, une fois assimilé le principe.
Nous avons déjà notre tableau de créé, de la manière classique à savoir :
$variable = @()
Nous avons ensuite notre source de données, ici, le journal Squid, que nous enregistrons dans un fichier :
$file = get-content C:\Users\admin\Desktop\access.log.6
Un petit travail d'harmonisation sera à faire, dans le cadre de la relecture de logs squid. En effet, ils contiennent bon nombre de caractères "parasites" (des espaces multiples et des -), et doivent donc être retirés. Pour cela, une méthode nommée "-replace" sera utilisée.
$file = $file -replace(" "," ")
$file = $file -replace(" "," ")
$file = $file -replace(" - "," ")
Après ces quelques lignes, le contenu de $file est "propre", sans espaces ou traits superflus. Il faut donc traiter chaque ligne à l'aide d'une boucle Foreach, la découper par espace à l'aide de "-split" (puisque c'est dorénavant le séparateur de chaque colonne) et ajouter chaque partie découpée dans un objet à l'aide de la commande Add-Member, et ajouter cet objet au tableau en suivant la manière suivante.
$objet = new-object Psobject #Creation de l'objet qui servira de ligne
$objet | Add-member -Name "Nom de colonne" -Membertype "Noteproperty" -Value $valeur #ajout dans l'objet $objet d'une valeur $valeur avec pour nom de colonne "Nom de colonne" et de type Noteproperty
$tableau = @()
$file = get-content C:\Users\admin\Desktop\access.log.6
$file = $file -replace(" "," ")
$file = $file -replace(" "," ")
$file = $file -replace(" "," ")
$file = $file -replace(" - "," ")
[datetime]$posix = "01/01/1970 00:00:00.00"
foreach ($ligne in $file)
{
$lignetrait = $ligne -split(" ")
#Enregistre dans $lignetrait chaque entrée séparée d'espaces
[datetime]$temps = $posix.AddSeconds($lignetrait[0])
#Les explications de cette commande sont sur cet article
$tempsnorma = get-date $temps -Format "dd/MM/yy hh:mm:ss.fff"
#Formate la date afin d'afficher les millisecondes
$obj = New-Object Psobject
#Crée un nouvel objet
$obj | Add-Member -Name "Date" -membertype Noteproperty -Value $tempsnorma
#Ajoute à l'objet en propriété nommée "Date" et contenant la variable $tempsnorma
$obj | Add-Member -Name "Port source" -membertype Noteproperty -value $lignetrait[1]
#Ajoute à l'objet en propriété nommée "Port Source" et contenant la deuxième valeur de la variable $lignetrait
$obj | add-member -name "Ip source" -membertype Noteproperty -value $lignetrait[2]
$obj | add-member -name "Code de statut Squid" -membertype Noteproperty -value $lignetrait[3]
$obj | add-member -name "Taille" -membertype Noteproperty -value $lignetrait[4]
$obj | add-member -name "Requete" -membertype Noteproperty -value $lignetrait[5]
$obj | add-member -name "URL" -membertype Noteproperty -value $lignetrait[6]
$tableau += $obj
}
$tableau | ft -AutoSize```