Question
convertir Info » en type « System.int32
- callac
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 15
- Remerciements reçus 0
il y a 12 ans 4 mois #16262
par callac
convertir Info » en type « System.int32 a été créé par callac
Bonjour a tous et a toutes,
Restant dans l'apprentissage de Powershell, et par besoin personnel, je me heurt à une difficulté dans mon code.
Je sélectionne via un Regex et un select-string la valeur du MTU que je récupère par un ping chargé ( Le ping est écrit sur un fichier).
Je n'arrive pas à effectuer l'opération + à ma variable qui est du type « Microsoft.PowerShell.Commands.MatchInfo »
La partie du code code :
## En fonction du ping DF on récupère le MTU
# On selectionne la ligne précédent la ligne comportant le caractère DF (non-fragmenté)
$line0 = select-string -path \"$TmpPathtxt\" -pattern \"DF\" -context 1, 0
# On utilise la propriété count pour afficher le nombre de correspondance (1 dans notre cas)
$line0.count | Out-Null
# $chaine contiendra la 1er correspondance[0] de la propriété context de $lines
$chaine = ($lines)[0].context
# On affiche le résultat du MTU
if (($lineany? -match $pattern) -eq \"True\")
{
[int]$match = $Matches.values
$MTU = $match + \"28\"
echo $MTU
}
else
{
echo \"La valeur du MTU est de 1500\"
}
Le message d'erreur:
Impossible de convertir la valeur « System.Collections.Hashtable+ValueCollection » du type « System.Colle
ctions.Hashtable+ValueCollection » en type « System.Int32 ».
Au niveau de C:\Users\pc\Desktop\Sauvegarde clé USB\PING\PINGCHARGE.ps1 : 79 Caractère : 16
+ [int]$match <<<< = $Matches.values
+ CategoryInfo : MetadataError: (
[], ArgumentTransformationMetadataException
+ FullyQualifiedErrorId : RuntimeException
J'ai essayé via une écriture sur un fichier en réutilisant le select-string mais je n'arrive pas à transformer l'objet en Int
Pouvez-vous m'aider ?
Restant dans l'apprentissage de Powershell, et par besoin personnel, je me heurt à une difficulté dans mon code.
Je sélectionne via un Regex et un select-string la valeur du MTU que je récupère par un ping chargé ( Le ping est écrit sur un fichier).
Je n'arrive pas à effectuer l'opération + à ma variable qui est du type « Microsoft.PowerShell.Commands.MatchInfo »
La partie du code code :
## En fonction du ping DF on récupère le MTU
# On selectionne la ligne précédent la ligne comportant le caractère DF (non-fragmenté)
$line0 = select-string -path \"$TmpPathtxt\" -pattern \"DF\" -context 1, 0
# On utilise la propriété count pour afficher le nombre de correspondance (1 dans notre cas)
$line0.count | Out-Null
# $chaine contiendra la 1er correspondance[0] de la propriété context de $lines
$chaine = ($lines)[0].context
# On affiche le résultat du MTU
if (($lineany? -match $pattern) -eq \"True\")
{
[int]$match = $Matches.values
$MTU = $match + \"28\"
echo $MTU
}
else
{
echo \"La valeur du MTU est de 1500\"
}
Le message d'erreur:
Impossible de convertir la valeur « System.Collections.Hashtable+ValueCollection » du type « System.Colle
ctions.Hashtable+ValueCollection » en type « System.Int32 ».
Au niveau de C:\Users\pc\Desktop\Sauvegarde clé USB\PING\PINGCHARGE.ps1 : 79 Caractère : 16
+ [int]$match <<<< = $Matches.values
+ CategoryInfo : MetadataError: (
+ FullyQualifiedErrorId : RuntimeException
J'ai essayé via une écriture sur un fichier en réutilisant le select-string mais je n'arrive pas à transformer l'objet en Int
Pouvez-vous m'aider ?
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 12 ans 4 mois #16265
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:convertir Info » en type « System.int32
Salut,
pccindo écrit:
pccindo écrit:
Communique-nous stp 4-5 lignes d'exemple du texte à parser.Pouvez-vous m'aider ?
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- callac
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 15
- Remerciements reçus 0
il y a 12 ans 4 mois #16271
par callac
Réponse de callac sur le sujet Re:convertir Info » en type « System.int32
Voici les lignes à parser
:
Envoi d'une requˆte 'Ping' 192.168.0.254 avec 1473 octets de donn‚esÿ:
Le paquet doit ˆtre fragment‚ mais param‚tr‚ DF.
Le paquet doit ˆtre fragment‚ mais param‚tr‚ DF.
Envoi d'une requˆte 'Ping' 192.168.0.254 avec 1473 octets de donn‚esÿ:
Le paquet doit ˆtre fragment‚ mais param‚tr‚ DF.
Le paquet doit ˆtre fragment‚ mais param‚tr‚ DF.
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 12 ans 4 mois #16273
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:convertir Info » en type « System.int32
Une solution, mais comme le code que tu cites me semble incomplet, je n'en suis pas certains :
[code:1]
$TmpPathtxt='c:\temp\testMTU.txt'
@\"
Envoi d'une requˆte 'Ping' 192.168.0.254 avec 1473 octets de donn‚esÿ:
Le paquet doit ˆtre fragment‚ mais param‚tr‚ DF.
Le paquet doit ˆtre fragment‚ mais param‚tr‚ DF.
\"@ > $TmpPathtxt
## En fonction du ping DF on récupère le MTU
# On selectionne la ligne précédent la ligne comportant le caractère DF (non-fragmenté)
$line0 = select-string -path \"$TmpPathtxt\" -pattern \"DF\" -context 1,0
# On utilise la propriété count pour afficher le nombre de correspondance (1 dans notre cas)
#$line0.count | Out-Null
# $chaine contiendra la 1er correspondance[0] de la propriété context de $lines
$chaine = $line0[0].Context.PreContext[0]
$MtuPattern=\"'Ping' (?<IP>.*?) avec (?<MTU>.*?) \"
# On affiche le résultat du MTU
if ($Chaine -match $MtuPattern)
{
$MTU = ($Matches.MTU -as [int]) + 28
echo $MTU
}
else
{
echo \"La valeur du MTU est de 1500\"
}
[/code:1]
Suppose que le texte analysé est tjr en Français.<br><br>Message édité par: Laurent Dardenne, à: 4/11/13 18:33
[code:1]
$TmpPathtxt='c:\temp\testMTU.txt'
@\"
Envoi d'une requˆte 'Ping' 192.168.0.254 avec 1473 octets de donn‚esÿ:
Le paquet doit ˆtre fragment‚ mais param‚tr‚ DF.
Le paquet doit ˆtre fragment‚ mais param‚tr‚ DF.
\"@ > $TmpPathtxt
## En fonction du ping DF on récupère le MTU
# On selectionne la ligne précédent la ligne comportant le caractère DF (non-fragmenté)
$line0 = select-string -path \"$TmpPathtxt\" -pattern \"DF\" -context 1,0
# On utilise la propriété count pour afficher le nombre de correspondance (1 dans notre cas)
#$line0.count | Out-Null
# $chaine contiendra la 1er correspondance[0] de la propriété context de $lines
$chaine = $line0[0].Context.PreContext[0]
$MtuPattern=\"'Ping' (?<IP>.*?) avec (?<MTU>.*?) \"
# On affiche le résultat du MTU
if ($Chaine -match $MtuPattern)
{
$MTU = ($Matches.MTU -as [int]) + 28
echo $MTU
}
else
{
echo \"La valeur du MTU est de 1500\"
}
[/code:1]
Suppose que le texte analysé est tjr en Français.<br><br>Message édité par: Laurent Dardenne, à: 4/11/13 18:33
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Matthew BETTON
- Hors Ligne
- Membre platinium
-
Réduire
Plus d'informations
- Messages : 968
- Remerciements reçus 0
il y a 12 ans 4 mois #16275
par Matthew BETTON
Réponse de Matthew BETTON sur le sujet Re:convertir Info » en type « System.int32
Bonsoir,
Au passage et juste pour information.
Sous PowerShell il existe la Cmdlet 'Test-Connection' :
[code:1]
PS > Get-Help Test-Connection
NAME
Test-Connection
SYNOPSIS
Sends ICMP echo request packets (\"pings\"«») to one or more computers.
SYNTAX
Test-Connection [-ComputerName] <String[]> [-AsJob] [-Authentication {Default | None | Connect | Call | Packet |
PacketIntegrity | PacketPrivacy | Unchanged}] [-BufferSize <Int32>] [-Count <Int32>] [-Delay <Int32>]
[-Impersonation {Default | Anonymous | Identify | Impersonate | Delegate}] [-ThrottleLimit <Int32>] [-TimeToLive
<Int32>] [<CommonParameters>]
Test-Connection [-ComputerName] <String[]> [-Source] <String[]> [-AsJob] [-Authentication {Default | None |
Connect | Call | Packet | PacketIntegrity | PacketPrivacy | Unchanged}] [-BufferSize <Int32>] [-Count <Int32>]
[-Credential <PSCredential>] [-Delay <Int32>] [-Impersonation {Default | Anonymous | Identify | Impersonate |
Delegate}] [-ThrottleLimit <Int32>] [-TimeToLive <Int32>] [<CommonParameters>]
Test-Connection [-ComputerName] <String[]> [-Authentication {Default | None | Connect | Call | Packet |
PacketIntegrity | PacketPrivacy | Unchanged}] [-BufferSize <Int32>] [-Count <Int32>] [-Delay <Int32>]
[-Impersonation {Default | Anonymous | Identify | Impersonate | Delegate}] [-Quiet] [-TimeToLive <Int32>]
[<CommonParameters>]
DESCRIPTION
The Test-Connection cmdlet sends Internet Control Message Protocol (ICMP) echo request packets (\"pings\"«») to one or
more remote computers and returns the echo response replies. You can use this cmdlet to determine whether a
particular computer can be contacted across an Internet Protocol (IP) network.
You can use the parameters of Test-Connection to specify both the sending and receiving computers, to run the
command as a background job, to set a timeout and number of pings, and to configure the connection and
authentication.
Unlike the traditional \"ping\" command, Test-Connection returns a Win32_PingStatus object that you can investigate
in Windows PowerShell, but you can use the Quiet parameter to force it to return only a Boolean value.
RELATED LINKS
Online Version: go.microsoft.com/fwlink/p/?linkid=293926
Add-Computer
Restart-Computer
Stop-Computer
REMARKS
To see the examples, type: \"get-help Test-Connection -examples\".
For more information, type: \"get-help Test-Connection -detailed\".
For technical information, type: \"get-help Test-Connection -full\".
For online help, type: \"get-help Test-Connection -online\"
[/code:1]
Quelques exemples d'utilisation :
[code:1]
# Ping d'une machine avec une taille buffer de 1473 octets (4 paquets)
PS > Test-Connection 127.0.0.1 -BufferSize 1473
Source Destination IPV4Address IPV6Address Bytes Time(ms)
TORONTO 127.0.0.1 127.0.0.1 1473 0
TORONTO 127.0.0.1 127.0.0.1 1473 0
TORONTO 127.0.0.1 127.0.0.1 1473 0
TORONTO 127.0.0.1 127.0.0.1 1473 0
# Récupération du résultat dans une variable
PS > $result = Test-Connection 127.0.0.1 -BufferSize 1473
# Nous récupérons une collection d'objets issus de WMI : System.Management.ManagementObject#root\cimv2\Win32_PingStatus
PS > $result | Get-Member
TypeName : System.Management.ManagementObject#root\cimv2\Win32_PingStatus
Name MemberType Definition
----
PSComputerName AliasProperty PSComputerName = __SERVER
Address Property string Address {get;set;}
BufferSize Property uint32 BufferSize {get;set;}
NoFragmentation Property bool NoFragmentation {get;set;}
PrimaryAddressResolutionStatus Property uint32 PrimaryAddressResolutionStatus {get;set;}
ProtocolAddress Property string ProtocolAddress {get;set;}
ProtocolAddressResolved Property string ProtocolAddressResolved {get;set;}
RecordRoute Property uint32 RecordRoute {get;set;}
ReplyInconsistency Property bool ReplyInconsistency {get;set;}
ReplySize Property uint32 ReplySize {get;set;}
ResolveAddressNames Property bool ResolveAddressNames {get;set;}
ResponseTime Property uint32 ResponseTime {get;set;}
ResponseTimeToLive Property uint32 ResponseTimeToLive {get;set;}
RouteRecord Property string[] RouteRecord {get;set;}
RouteRecordResolved Property string[] RouteRecordResolved {get;set;}
SourceRoute Property string SourceRoute {get;set;}
SourceRouteType Property uint32 SourceRouteType {get;set;}
StatusCode Property uint32 StatusCode {get;set;}
Timeout Property uint32 Timeout {get;set;}
TimeStampRecord Property uint32[] TimeStampRecord {get;set;}
TimeStampRecordAddress Property string[] TimeStampRecordAddress {get;set;}
TimeStampRecordAddressResolved Property string[] TimeStampRecordAddressResolved {get;set;}
TimestampRoute Property uint32 TimestampRoute {get;set;}
TimeToLive Property uint32 TimeToLive {get;set;}
TypeofService Property uint32 TypeofService {get;set;}
__CLASS Property string __CLASS {get;set;}
__DERIVATION Property string[] __DERIVATION {get;set;}
__DYNASTY Property string __DYNASTY {get;set;}
__GENUS Property int __GENUS {get;set;}
__NAMESPACE Property string __NAMESPACE {get;set;}
__PATH Property string __PATH {get;set;}
__PROPERTY_COUNT Property int __PROPERTY_COUNT {get;set;}
__RELPATH Property string __RELPATH {get;set;}
__SERVER Property string __SERVER {get;set;}
__SUPERCLASS Property string __SUPERCLASS {get;set;}
ConvertFromDateTime ScriptMethod System.Object ConvertFromDateTime();
ConvertToDateTime ScriptMethod System.Object ConvertToDateTime();
IPV4Address ScriptProperty System.Object IPV4Address {get=$iphost = [System.Net.Dns]::GetHostEntr...
IPV6Address ScriptProperty System.Object IPV6Address {get=$iphost = [System.Net.Dns]::GetHostEntr...
PS > $result[0]
Source Destination IPV4Address IPV6Address Bytes Time(ms)
TORONTO 127.0.0.1 127.0.0.1 1473 0
PS > $result[0].replysize
1473
# Ping par défaut : 32 octets
PS > @(Test-Connection 127.0.0.1)[0].BufferSize
32
PS > @(Test-Connection 127.0.0.1)[0].ReplySize
32
# On peut aussi spécifier le paramètre '-count' pour n'envoyer qu'un seul paquet
PS > @(Test-Connection 127.0.0.1 -count 1)[0].BufferSize
32
[/code:1]
@ +
Matthew<br><br>Message édité par: Matthew BETTON, à: 4/11/13 19:36
Au passage et juste pour information.
Sous PowerShell il existe la Cmdlet 'Test-Connection' :
[code:1]
PS > Get-Help Test-Connection
NAME
Test-Connection
SYNOPSIS
Sends ICMP echo request packets (\"pings\"«») to one or more computers.
SYNTAX
Test-Connection [-ComputerName] <String[]> [-AsJob] [-Authentication {Default | None | Connect | Call | Packet |
PacketIntegrity | PacketPrivacy | Unchanged}] [-BufferSize <Int32>] [-Count <Int32>] [-Delay <Int32>]
[-Impersonation {Default | Anonymous | Identify | Impersonate | Delegate}] [-ThrottleLimit <Int32>] [-TimeToLive
<Int32>] [<CommonParameters>]
Test-Connection [-ComputerName] <String[]> [-Source] <String[]> [-AsJob] [-Authentication {Default | None |
Connect | Call | Packet | PacketIntegrity | PacketPrivacy | Unchanged}] [-BufferSize <Int32>] [-Count <Int32>]
[-Credential <PSCredential>] [-Delay <Int32>] [-Impersonation {Default | Anonymous | Identify | Impersonate |
Delegate}] [-ThrottleLimit <Int32>] [-TimeToLive <Int32>] [<CommonParameters>]
Test-Connection [-ComputerName] <String[]> [-Authentication {Default | None | Connect | Call | Packet |
PacketIntegrity | PacketPrivacy | Unchanged}] [-BufferSize <Int32>] [-Count <Int32>] [-Delay <Int32>]
[-Impersonation {Default | Anonymous | Identify | Impersonate | Delegate}] [-Quiet] [-TimeToLive <Int32>]
[<CommonParameters>]
DESCRIPTION
The Test-Connection cmdlet sends Internet Control Message Protocol (ICMP) echo request packets (\"pings\"«») to one or
more remote computers and returns the echo response replies. You can use this cmdlet to determine whether a
particular computer can be contacted across an Internet Protocol (IP) network.
You can use the parameters of Test-Connection to specify both the sending and receiving computers, to run the
command as a background job, to set a timeout and number of pings, and to configure the connection and
authentication.
Unlike the traditional \"ping\" command, Test-Connection returns a Win32_PingStatus object that you can investigate
in Windows PowerShell, but you can use the Quiet parameter to force it to return only a Boolean value.
RELATED LINKS
Online Version: go.microsoft.com/fwlink/p/?linkid=293926
Add-Computer
Restart-Computer
Stop-Computer
REMARKS
To see the examples, type: \"get-help Test-Connection -examples\".
For more information, type: \"get-help Test-Connection -detailed\".
For technical information, type: \"get-help Test-Connection -full\".
For online help, type: \"get-help Test-Connection -online\"
[/code:1]
Quelques exemples d'utilisation :
[code:1]
# Ping d'une machine avec une taille buffer de 1473 octets (4 paquets)
PS > Test-Connection 127.0.0.1 -BufferSize 1473
Source Destination IPV4Address IPV6Address Bytes Time(ms)
TORONTO 127.0.0.1 127.0.0.1 1473 0
TORONTO 127.0.0.1 127.0.0.1 1473 0
TORONTO 127.0.0.1 127.0.0.1 1473 0
TORONTO 127.0.0.1 127.0.0.1 1473 0
# Récupération du résultat dans une variable
PS > $result = Test-Connection 127.0.0.1 -BufferSize 1473
# Nous récupérons une collection d'objets issus de WMI : System.Management.ManagementObject#root\cimv2\Win32_PingStatus
PS > $result | Get-Member
TypeName : System.Management.ManagementObject#root\cimv2\Win32_PingStatus
Name MemberType Definition
----
PSComputerName AliasProperty PSComputerName = __SERVER
Address Property string Address {get;set;}
BufferSize Property uint32 BufferSize {get;set;}
NoFragmentation Property bool NoFragmentation {get;set;}
PrimaryAddressResolutionStatus Property uint32 PrimaryAddressResolutionStatus {get;set;}
ProtocolAddress Property string ProtocolAddress {get;set;}
ProtocolAddressResolved Property string ProtocolAddressResolved {get;set;}
RecordRoute Property uint32 RecordRoute {get;set;}
ReplyInconsistency Property bool ReplyInconsistency {get;set;}
ReplySize Property uint32 ReplySize {get;set;}
ResolveAddressNames Property bool ResolveAddressNames {get;set;}
ResponseTime Property uint32 ResponseTime {get;set;}
ResponseTimeToLive Property uint32 ResponseTimeToLive {get;set;}
RouteRecord Property string[] RouteRecord {get;set;}
RouteRecordResolved Property string[] RouteRecordResolved {get;set;}
SourceRoute Property string SourceRoute {get;set;}
SourceRouteType Property uint32 SourceRouteType {get;set;}
StatusCode Property uint32 StatusCode {get;set;}
Timeout Property uint32 Timeout {get;set;}
TimeStampRecord Property uint32[] TimeStampRecord {get;set;}
TimeStampRecordAddress Property string[] TimeStampRecordAddress {get;set;}
TimeStampRecordAddressResolved Property string[] TimeStampRecordAddressResolved {get;set;}
TimestampRoute Property uint32 TimestampRoute {get;set;}
TimeToLive Property uint32 TimeToLive {get;set;}
TypeofService Property uint32 TypeofService {get;set;}
__CLASS Property string __CLASS {get;set;}
__DERIVATION Property string[] __DERIVATION {get;set;}
__DYNASTY Property string __DYNASTY {get;set;}
__GENUS Property int __GENUS {get;set;}
__NAMESPACE Property string __NAMESPACE {get;set;}
__PATH Property string __PATH {get;set;}
__PROPERTY_COUNT Property int __PROPERTY_COUNT {get;set;}
__RELPATH Property string __RELPATH {get;set;}
__SERVER Property string __SERVER {get;set;}
__SUPERCLASS Property string __SUPERCLASS {get;set;}
ConvertFromDateTime ScriptMethod System.Object ConvertFromDateTime();
ConvertToDateTime ScriptMethod System.Object ConvertToDateTime();
IPV4Address ScriptProperty System.Object IPV4Address {get=$iphost = [System.Net.Dns]::GetHostEntr...
IPV6Address ScriptProperty System.Object IPV6Address {get=$iphost = [System.Net.Dns]::GetHostEntr...
PS > $result[0]
Source Destination IPV4Address IPV6Address Bytes Time(ms)
TORONTO 127.0.0.1 127.0.0.1 1473 0
PS > $result[0].replysize
1473
# Ping par défaut : 32 octets
PS > @(Test-Connection 127.0.0.1)[0].BufferSize
32
PS > @(Test-Connection 127.0.0.1)[0].ReplySize
32
# On peut aussi spécifier le paramètre '-count' pour n'envoyer qu'un seul paquet
PS > @(Test-Connection 127.0.0.1 -count 1)[0].BufferSize
32
[/code:1]
@ +
Matthew<br><br>Message édité par: Matthew BETTON, à: 4/11/13 19:36
Connexion ou Créer un compte pour participer à la conversation.
- callac
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 15
- Remerciements reçus 0
il y a 12 ans 4 mois #16276
par callac
Réponse de callac sur le sujet Re:convertir Info » en type « System.int32
Voici tout mon code, autant en faire profiter à la collectivité
. J'ai enlevé des lignes inutiles. Dans l'idée pour être clair je veux pouvoir connaitre la valeur du MTU d'un routeur ou switch ou box ADSL qui est par défaut 1500 octets or le ping utilise 28 octets. Donc lors de son utilisation la taille maximum du MTU dans le script $MaxSize sera 1472 ( et oui (taille MTUmax + ICMP(ping)) :: 1472 + 28 = 1500 ). Mais pour l’instant je triche je prend en taille max 1473 pour que lors du ping chargé je puisse tester le déroulement du script.
Je testé sans succès, néanmoins je tiens pour le passé, présent et futur de te remercier pour ton énorme contribution (tutos, aide à la personne (d'ou moi même) à aider de contrôler nos machines Windows.
clear
# Directory pour le Ping
$root = \"D:\PingStime\"
# Résultat Ping
$TmpPingDir = \"$root\"
# Variables contenant le directory des fichiers Log
$TmpPath = \"$root\PingResult\"
$TmpPathtxt = \"$TmpPath\PingCharge.txt\"
$TmpHorodatagetxt = \"$TmpPath\PingChargeHorodate.txt\"
$MTUtxt = \"$TmpPath\MTUtxt.txt\"
# Création du directory \"D:\PingStime\PingResult\"
if(!(test-path $TmpPingDir)) {new-item -path $root -name \"PingResult\" -type directory -ErrorAction silentlycontinue | out-null}
# Création du fichier Log \"PingCharge.txt\"
if(test-path $TmpPath) {new-item \"$TmpPathtxt\" –type file -force -ErrorAction silentlycontinue | out-null}
# Création du fichier Log \"PingChargeHorodate.txt\"
if(test-path $TmpPath) {new-item \"$TmpHorodatagetxt\" –type file -force -ErrorAction silentlycontinue | out-null}
# Création du fichier Log \"MTU.txt\"
if(test-path $TmpPath) {new-item \"$MTUtxt\" –type file -force -ErrorAction silentlycontinue | out-null}
# Création du fichier batch pour éxécuter la commande Ping
$Batch = \"$root\Pingcharge.cmd\"
# Paramètres PING
$Ip = \"192.168.0.254\"
$Nbecho = 2
$PingTimeOut = 5
## Définir paramètres par défaut mais avec une possibilité de les modifier
$MaxSize = 1473
$MinSize = 1470
# Définition de la valeur de la Regex pour le MTU d'un nombre d'au moins 4 à 5 chiffres
$pattern = '\d{4,5}'
### Ecriture des commandes du Batch ###
# Affichage de la fenêtre DOS
\"@echo on\" | out-file $Batch -encoding ASCII
# Le nombre de répition d'echo de la requête ICMP
\"set n=$Nbecho\" | out-file $Batch -append -encoding ASCII
# Le temps d'execution entre chaque ping
\"set w=$PingTimeOut\" | out-file $Batch -append -encoding ASCII
# Obligatoire, permet d'attendre la fin de l'exécution des commandes passées dans l'interval setlocal / endlocal
'setlocal enableDelayedExpansion' | out-file $Batch -append -encoding ASCII
# Le ping non défragmenté ayant une valeur MTU décrémenté
\"For /L %%l IN ($MaxSize, -1, $MinSize) DO ping -l %%l $Ip -n %n% -w %w% -f >> $TmpPathtxt\" | out-file $Batch -append -encoding ASCII
#'pause' | out-file $Batch -append -encoding ASCII
'@endlocal' | out-file $Batch -append -encoding ASCII
# Execution du Batch avec mesure du temps d'éxécution écrit dans PingChargeHorodate.txt
Measure-Command {$p = start-process -FilePath \"$Batch\" -Wait } | out-file -FilePath \"$TmpHorodatagetxt\"
### Si l'on trouve le caractère DF (condition) on garde la ligne précédente #####
### on ne garde que le MTU (regex), on lui ajoute les 28 octets de ICMP #####
### et on l'affiche #####
### Sinon on affiche que le MTU est de 1500 #####
## En fonction du ping DF on récupère le MTU
# On selectionne la ligne précédent la ligne comportant le caractère DF
$line0 = select-string -path \"$TmpPathtxt\" -pattern \"DF\" -context 1, 0
# $chaine contiendra la 1er correspondance[0] de la propriété context de $lines
$chaine = ($lines)[0].context.Precontext[0]
echo $chaine
# On affiche le résultat du MTU
if (($chaine -match $pattern) -eq \"True\")
{
$MTU = ($Matches.values -as [int]) + 28
echo $Matches.values
echo $MTU
}
<#else
#{
echo \"La valeur du MTU est de 1500\"
}
#>
Je testé sans succès, néanmoins je tiens pour le passé, présent et futur de te remercier pour ton énorme contribution (tutos, aide à la personne (d'ou moi même) à aider de contrôler nos machines Windows.
clear
# Directory pour le Ping
$root = \"D:\PingStime\"
# Résultat Ping
$TmpPingDir = \"$root\"
# Variables contenant le directory des fichiers Log
$TmpPath = \"$root\PingResult\"
$TmpPathtxt = \"$TmpPath\PingCharge.txt\"
$TmpHorodatagetxt = \"$TmpPath\PingChargeHorodate.txt\"
$MTUtxt = \"$TmpPath\MTUtxt.txt\"
# Création du directory \"D:\PingStime\PingResult\"
if(!(test-path $TmpPingDir)) {new-item -path $root -name \"PingResult\" -type directory -ErrorAction silentlycontinue | out-null}
# Création du fichier Log \"PingCharge.txt\"
if(test-path $TmpPath) {new-item \"$TmpPathtxt\" –type file -force -ErrorAction silentlycontinue | out-null}
# Création du fichier Log \"PingChargeHorodate.txt\"
if(test-path $TmpPath) {new-item \"$TmpHorodatagetxt\" –type file -force -ErrorAction silentlycontinue | out-null}
# Création du fichier Log \"MTU.txt\"
if(test-path $TmpPath) {new-item \"$MTUtxt\" –type file -force -ErrorAction silentlycontinue | out-null}
# Création du fichier batch pour éxécuter la commande Ping
$Batch = \"$root\Pingcharge.cmd\"
# Paramètres PING
$Ip = \"192.168.0.254\"
$Nbecho = 2
$PingTimeOut = 5
## Définir paramètres par défaut mais avec une possibilité de les modifier
$MaxSize = 1473
$MinSize = 1470
# Définition de la valeur de la Regex pour le MTU d'un nombre d'au moins 4 à 5 chiffres
$pattern = '\d{4,5}'
### Ecriture des commandes du Batch ###
# Affichage de la fenêtre DOS
\"@echo on\" | out-file $Batch -encoding ASCII
# Le nombre de répition d'echo de la requête ICMP
\"set n=$Nbecho\" | out-file $Batch -append -encoding ASCII
# Le temps d'execution entre chaque ping
\"set w=$PingTimeOut\" | out-file $Batch -append -encoding ASCII
# Obligatoire, permet d'attendre la fin de l'exécution des commandes passées dans l'interval setlocal / endlocal
'setlocal enableDelayedExpansion' | out-file $Batch -append -encoding ASCII
# Le ping non défragmenté ayant une valeur MTU décrémenté
\"For /L %%l IN ($MaxSize, -1, $MinSize) DO ping -l %%l $Ip -n %n% -w %w% -f >> $TmpPathtxt\" | out-file $Batch -append -encoding ASCII
#'pause' | out-file $Batch -append -encoding ASCII
'@endlocal' | out-file $Batch -append -encoding ASCII
# Execution du Batch avec mesure du temps d'éxécution écrit dans PingChargeHorodate.txt
Measure-Command {$p = start-process -FilePath \"$Batch\" -Wait } | out-file -FilePath \"$TmpHorodatagetxt\"
### Si l'on trouve le caractère DF (condition) on garde la ligne précédente #####
### on ne garde que le MTU (regex), on lui ajoute les 28 octets de ICMP #####
### et on l'affiche #####
### Sinon on affiche que le MTU est de 1500 #####
## En fonction du ping DF on récupère le MTU
# On selectionne la ligne précédent la ligne comportant le caractère DF
$line0 = select-string -path \"$TmpPathtxt\" -pattern \"DF\" -context 1, 0
# $chaine contiendra la 1er correspondance[0] de la propriété context de $lines
$chaine = ($lines)[0].context.Precontext[0]
echo $chaine
# On affiche le résultat du MTU
if (($chaine -match $pattern) -eq \"True\")
{
$MTU = ($Matches.values -as [int]) + 28
echo $Matches.values
echo $MTU
}
<#else
#{
echo \"La valeur du MTU est de 1500\"
}
#>
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.055 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- convertir Info » en type « System.int32