Question [résolu] récuperer 2 ème octet adresse ip

Plus d'informations
il y a 12 ans 1 mois #16924 par lege
bonjour,

je souhaite récupérer le 2 ème octet de l'adresse ip

[code:1]
$ip = ((ipconfig | findstr [0-9].\.)[0]).Split()[-1]
[/code:1]


résultat :

$ip = 10.20.30.1

ce que je souhaite récupérer

$ip = 20

merci pour votre aide<br><br>Message édité par: arsoul, à: 12/02/14 09:53

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

Plus d'informations
il y a 12 ans 1 mois #16928 par lege
Réponse de lege sur le sujet Re:récuperer 2 ème octet adresse ip
j'ai essayé

[code:1]
$ip=((ipconfig | findstr [0-9].\.)[0]).Split()[-1]
$oct=$ip.substring($v_ip.length5,5)

$oct
[/code:1]



résultat

10.20

je ne suis pas loin mais il me manque une info

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

Plus d'informations
il y a 12 ans 1 mois #16931 par Matthew BETTON
Bonjour,

J'avais posté il quelques temps un module qui contient une fonction 'Get-IPConfig', peut être plus adaptée et qui évite d'avoir à rechercher des chaînes de caractères dans la réponse de la commande 'ipconfig' ...

Module IPInfos : 4 Cmdlets : IP, NB, DNS, Ports

[code:1]
Function Get-IPConfig {

&lt;#
.SYNOPSIS
Permet de récupérer la configuration IP de la machine locale ou d'une machine distante, pour chaque carte réseau active.
.DESCRIPTION
La cmdlet Get-IPConfig permet de récupérer la configuration IP d'une machine pour chaque carte réseau active.
Les informations sont récupérées via WMI et les classes Win32_NetworkAdapterConfiguration, Win32_NetworkAdapter,
Win32_ComputerSystem et StdRegProv.

Pour chaque machine joignable et chaque interface réseau active, un objet PowerShell personnalisé (PSObject) est renvoyé.

Pour effectuer un simple \&quot;ipconfig /all\&quot; sur une machine distante, il est également possible d'utiliser les commandes suivantes :

PS C:\&gt; $Credential = Get-Credential
PS C:\&gt; Invoke-Command -ComputerName CATOSV01 -ScriptBlock {ipconfig /all} -Credential $credential

Mais dans ce cas, l'activation de WinRM sur la machine distante est obligatoire.
De plus, cette commande ne revoie pas d'objet personnalisé mais un tableau de 'system.string' correspondant à la sortie de la commande ipconfig
donc plus difficile à exploiter.

.PARAMETER ComputerName
Spécifie l'ordinateur sur lequel vous voulez exécuter l'opération de gestion. La valeur peut être un nom de domaine
complet, un nom NetBIOS ou une adresse IP. Utilisez le nom de l'ordinateur local, localhost ou un point (.) pour
spécifier l'ordinateur local. L'ordinateur local est la valeur par défaut. Lorsque l'ordinateur distant se trouve
dans un domaine différent de l'utilisateur, vous devez utiliser un nom de domaine complet. Ce paramètre peut également
être redirigé vers l'applet de commande.

Ce paramètre ne s'appuie pas sur la communication à distance Windows PowerShell, laquelle utilise le service Gestion
des services Web). Vous pouvez utiliser le paramètre ComputerName de Get-IPConfig même si votre ordinateur n'est
pas configuré pour exécuter des commandes distantes du service Gestion des services Web.
.PARAMETER Credential
Spécifie un compte d'utilisateur qui a l'autorisation d'exécuter cette action. La valeur par défaut est l'utilisateur actuel.
Tapez un nom d'utilisateur, tel que « User01 », « Domain01\User01 » ou « Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser. ». Vous pouvez également entrer un objet
PSCredential, tel qu'un objet qui est retourné par l'applet de commande Get-Credential. Lorsque vous tapez un nom d'utilisateur,
vous êtes invité à entrer un mot de passe.
Si le pramétre '-Credential' n'est pas spécifié, le compte courant est utilisé pour réaliser les opérations via WMI.
.EXAMPLE
PS C:\&gt; Get-IPConfig
PS C:\&gt; Get-IPConfig localhost
PS C:\&gt; Get-IPConfig .

Ces commandes récupèrent la configuration IP de la machine locale, pour toutes les cartes réseau actives.
.EXAMPLE
PS C:\&gt; Get-IPConfig CATOSV01
PS C:\&gt; Get-IPConfig 192.168.1.23

Ces commandes récupèrent la configuration IP de la machine distante, soit par son nom, soit par son adresse IP,
pour toutes les cartes réseau actives.
.EXAMPLE
PS C:\&gt; $Credential = Get-Credential
PS C:\&gt; Get-IPConfig CATOSV01 -Credential $Credential

La première commande récupère un Credential.
La seconde commande récupère la configuration IP de la machine distante pour toutes les cartes réseau actives, en utilisant le Credential
spécifié.
.EXAMPLE
PS C:\&gt; $Credential = Get-Credential
PS C:\&gt; \&quot;CATOSV01\&quot;, \&quot;CATODC01\&quot;, CATOSV03\&quot; | Get-IPConfig -Credential $Credential

La première commande récupère un Credential.
La seconde commande récupère la configuration IP des machines distantes spécifiées par le pipeline, pour toutes les cartes réseau actives et
en utilisant le Credential spécifié.
.EXAMPLE
PS C:\&gt; $Credential = Get-Credential
PS C:\&gt; (1..254) | Get-IPConfig -ComputerName {\&quot;192.168.1.$_\&quot;} -Credential $Credential

La première commande récupère un Credential.
La seconde commande récupère la configuration IP de toutes les machines dont l'adresse IP est comprise entre 192.168.1.1 et 192.168.1.254.
.OUTPUTS
Selected.System.Management.Automation.PSCustomObject
.LINK
msdn.microsoft.com/en-us/library/windows...394217(v=vs.85).aspx
msdn.microsoft.com/en-us/library/windows...394216(v=vs.85).aspx
msdn.microsoft.com/en-us/library/windows...394102(v=vs.85).aspx
msdn.microsoft.com/en-us/library/windows...393664(v=vs.85).aspx
www.via-powershell.fr
www.powershell-scripting.com
#&gt;

[CmdletBinding()]
param(
[Parameter(Position=0,Mandatory=$False,ValueFromPipeline=$True,ValueFromPipelineByPropertyName=$True)]
[Alias(\&quot;Name\&quot;«»)]
[String[]]$ComputerName = \&quot;.\&quot;,
[parameter(Mandatory=$false)]
[System.Management.Automation.PSCredential]$Credential = [System.Management.Automation.PSCredential]::Empty
)

Begin{
Function Get-NetworkAdapterInfos($ComputerName, $ComputerSystemInfos, $Nic, $Configuration, $SearchList){
Write-Debug \&quot;Appel de la fonction 'Get-NetworkAdapterInfos' ...\&quot;
$Index = $Nic.Index
$AdapterType = $Nic.AdapterType
$Connecteur = $Nic.NetConnectionID

Write-Debug \&quot;Création d'un objet PowerShell personnalisé ...\&quot;
$NewConfiguration = New-Object PSObject -Property @{
HostName = $ComputerName
SearchList = $SearchList
Index = $Index
AdaptaterType = $Nic.AdapterType
ConnexionType = $Connecteur
DNSDomain = $ComputerSystemInfos.Domain
Description = $Nic.Description
MACAddress = $Nic.MACAddress
DHCPEnabled = $Configuration.DHCPEnabled
IPAddress = $Configuration.IPAddress
IPSubnet = $Configuration.IPSubnet
DefaultIPGateway = $Configuration.DefaultIPGateway
DNSServers = $Configuration.DNSServerSearchOrder
WINSPrimaryServer = $Configuration.WINSPrimaryServer
WINSSecondaryServer = $Configuration.WINSSecondaryServer
}
if($Configuration.DHCPEnabled){
Write-Debug \&quot;La carte réseau est configurée en DHCP ...\&quot;
try{
$DHCPLeaseObtained = $Configuration.ConvertToDateTime($Configuration.DHCPLeaseObtained)
}
catch{
$DHCPLeaseObtained = \&quot;\&quot;
}
try{
$DHCPLeaseExpires = $Configuration.ConvertToDateTime($Configuration.DHCPLeaseExpires)
}
catch{
$DHCPLeaseExpires = \&quot;\&quot;
}

Add-Member -InputObject $NewConfiguration -MemberType NoteProperty -Name DHCPServer -Value ($Configuration.DHCPServer)
Add-Member -InputObject $NewConfiguration -MemberType NoteProperty -Name DHCPLeaseObtained -Value $DHCPLeaseObtained
Add-Member -InputObject $NewConfiguration -MemberType NoteProperty -Name DHCPLeaseExpires -Value $DHCPLeaseExpires
return $NewConfiguration |
Select-Object Description,Index,AdaptaterType,ConnexionType,HostName,MACAddress,IPAddress,IPSubnet,DefaultIPGateway `
,DNSDomain,SearchList,DNSServers,WINSPrimaryServer,WINSSecondaryServer,DHCPEnabled, DHCPServer, DHCPLeaseObtained, DHCPLeaseExpires
}
else{
Write-Debug \&quot;La carte réseau n'est pas configurée en DHCP ...\&quot;
return $NewConfiguration |
Select-Object Description,Index,AdaptaterType,ConnexionType,HostName,MACAddress,IPAddress,IPSubnet,DefaultIPGateway `
,DNSDomain,SearchList,DNSServers,WINSPrimaryServer,WINSSecondaryServer,DHCPEnabled
}

}

Function GetIPConfig([String]$ComputerName, [System.Management.Automation.PSCredential]$Credential){
Write-Debug \&quot;Récupération des informations de carte réseau via WMI ...\&quot;
try{
$NetworkAdapterConfiguration = Get-WmiObject -Class Win32_NetworkAdapterConfiguration -ComputerName $ComputerName -Credential $Credential -ErrorAction Stop
$NetworkAdapter = Get-WmiObject -Class Win32_NetworkAdapter -ComputerName $ComputerName -Credential $Credential -ErrorAction Stop
$ComputerSystemInfos = Get-WmiObject -Class Win32_ComputerSystem -ComputerName $ComputerName -Credential $Credential -ErrorAction Stop
}
catch{
Write-Error \&quot;Une erreur s'est produite lors de la connexion en WMI sur '$ComputerName' : $($_.Exception.Message)\&quot;
return $null
}

Write-Debug \&quot;Récupération de la liste de recherche de suffixe DNS via WMI / StdRegProv ...\&quot;
try{
$objreg = Get-WmiObject -list -namespace root\default -computerName $ComputerName -credential $Credential -ErrorAction Stop | where-object { $_.name -eq \&quot;StdRegProv\&quot; }
}
catch{
Write-Error \&quot;Une erreur s'est produite lors de la connexion au registre distant de '$ComputerName' via WMI : $($_.Exception.Message)\&quot;
return $null
}

$hklm = 2147483650
$key = \&quot;SOFTWARE\Policies\Microsoft\Windows NT\DNSClient\&quot;
$value = \&quot;SearchList\&quot;
$SearchList = $null

Write-Debug \&quot;Lecture de la valeur du registre 'HKLM\$key\$value' ...\&quot;
try{
$SearchList = ($objreg.GetStringValue($hklm,$key,$value).svalue).split(\&quot;,\&quot;«»)
}
catch{
$SearchList = $null
}

if($SearchList -eq $null){
$key = \&quot;SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\&quot;
Write-Debug \&quot;Pas de stratégie pour la liste de recherche de suffixes DNS : Lecture de la valeur du registre 'HKLM\$key\$value' ...\&quot;
try{
$SearchList = ($objreg.GetStringValue($hklm,$key,$value).svalue).split(\&quot;,\&quot;«»)
}
catch{
$SearchList = \&quot;\&quot;
}
}

$Count = $NetworkAdapter.Count

Write-Debug \&quot;'$Count' interfaces réseau ont été identifiées sur '$ComputerName'\&quot;

For ($i=0 ; $i -lt $Count ; $i++) {
$Nic = $NetworkAdapter[$i]
$Configuration = $NetworkAdapterConfiguration[$i]

If ($Configuration.IPEnabled) {
Write-Debug \&quot;L'interface '$($Nic.Description)' est active\&quot;
Write-Debug \&quot;Récupération des informations IP pour cette interface ...\&quot;
Get-NetworkAdapterInfos $ComputerName $ComputerSystemInfos $Nic $Configuration $SearchList
}
else{
Write-Debug \&quot;L'interface '$($Nic.Description)' n'est pas active\&quot;
}
}
}
}

Process{
foreach($Computer in $ComputerName){
if($Computer -eq \&quot;.\&quot;«»){
$Cpt = $env:COMPUTERNAME
}
else{
$Cpt = $Computer
}
if(Test-Connection -ComputerName $Cpt -Count 1 -Quiet){
GetIPConfig -ComputerName $Computer -Credential $Credential
}
else{
Write-Warning \&quot;'$Computer' est injoignable\&quot;
}
}
}

}
[/code:1]

Elle permet de récupérer la configuration IP de la machine locale ou d'une machine distante.

Tout comme dans la réponse de 'ipconfig', en fonction du nombre de périphérique réseau disposant d'un adressage IP, la réponse sera différente d'une machine à l'autre. Aussi il y a la possibilité de récupérer plusieurs adresses IP.

[code:1]
@(Get-IPConfig)[0]

# Description : Carte Ethernet virtuelle Hyper-V
# Index : 9
# AdaptaterType : Ethernet 802.3
# ConnexionType : vEthernet (Réseau externe)
# HostName : .
# MACAddress : 14:«»DA:E9:BF:54:7A
# IPAddress : {192.168.1.99, fe80::6db4:5394:bc29:ee7e}
# IPSubnet : {255.255.255.0, 64}
# DefaultIPGateway : {192.168.1.1}
# DNSDomain : WORKGROUP
# SearchList : {}
# DNSServers : {192.168.1.1}
# WINSPrimaryServer :
# WINSSecondaryServer :
# DHCPEnabled : True
# DHCPServer : 192.168.1.1
# DHCPLeaseObtained : 11/02/2014 09:39:23
# DHCPLeaseExpires : 12/02/2014 09:39:23

@(Get-IPConfig)[0].ipaddress
# 192.168.1.99
# fe80::6db4:5394:bc29:ee7e

@(@(Get-IPConfig)[0].ipaddress)[0]
# 192.168.1.99

[ipaddress]@(@(Get-IPConfig)[0].ipaddress)[0]


# Address : 1661053120
# AddressFamily : InterNetwork
# ScopeId :
# IsIPv6Multicast : False
# IsIPv6LinkLocal : False
# IsIPv6SiteLocal : False
# IsIPv6Teredo : False
# IsIPv4MappedToIPv6 : False
# IPAddressToString : 192.168.1.99


([ipaddress]@(@(Get-IPConfig)[0].ipaddress)[0]).GetAddressBytes()
# 192
# 168
# 1
# 99

(([ipaddress]@(@(Get-IPConfig)[0].ipaddress)[0]).GetAddressBytes())[1]
# 168

[/code:1]

Sans passer par la fonction mais directement via WMI :

[code:1]
(([ipaddress]@(@(gwmi -query \&quot;select * from Win32_NetworkAdapterConfiguration where ipenabled = 'True'\&quot;«»)[0].IPAddress)[0]).GetAddressBytes())[1]

# 168
[/code:1]

@ +

Matthew<br><br>Message édité par: Matthew BETTON, à: 11/02/14 18:34

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

Plus d'informations
il y a 12 ans 1 mois #16932 par Matthew BETTON
Pour en revenir à ta solution :

[code:1] $ip = ((ipconfig | findstr [0-9].\.)[0]).Split()[-1]
$ip
# 169.254.172.14

([ipaddress]$ip).GetAddressBytes()[1]
# 254
[/code:1]


Le résultat n'est pas le même car je dispose de 2 configuration réseau dont une est en apipa ....

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

Plus d'informations
il y a 12 ans 1 mois #16933 par Philippe
salut arsoul

essai avec ce code

par contre il aussi gère le cas ou il y a plus d'une adresse
[code:1]$colItems = Get-WmiObject Win32_NetworkAdapterConfiguration -Namespace \&quot;root\CIMV2\&quot; -ComputerName '.' | where{$_.IPEnabled -eq “True”}

foreach($objItem in $colItems) {
Write-Host “IP Address:” $objItem.IPAddress \&quot;le 2eme octet : \&quot; ($objItem.IPAddress -split \&quot;^[0-9][0-9][0-9]\.([0-9][0-9][0-9])\&quot;«»)[1]
$oct = ($objItem.IPAddress -split \&quot;^[0-9][0-9][0-9]\.([0-9][0-9][0-9])\&quot;«»)[1]
}

$oct

IP Address: 192.166.1.54 le 2eme octet : 166
IP Address: 192.167.5.54 le 2eme octet : 167
IP Address: 192.168.11.54 le 2eme octet : 168

168

[/code:1]

si c'est pas le cas $oct contient le sous reseau sinon il te faudra trouver une solution


edit : bonjour matthew deux réponses pour le prix d'une<br><br>Message édité par: 6ratgus, à: 11/02/14 17:57

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

Plus d'informations
il y a 12 ans 1 mois #16935 par lege
Réponse de lege sur le sujet Re:récuperer 2 ème octet adresse ip
merci pour vos réponse à tout les deux

je cherchais la réponse depuis un bout de temps

encore merci

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

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