2016-08-23 1 views
1

Je suis en train de créer un script qui comparera la dernière version des adresses IPv4 en cours d'utilisation, avec tous les octets disponibles (2 à 254).Sortie de l'objet de comparaison dans la variable

Je suis déjà si loin que j'obtiens un résultat en comparant les tableaux, mais mon résultat final est aussi un tableau, et je n'arrive pas à obtenir seulement le nombre.

Mon script:

$guestIP = @("192.168.31.200","192.168.31.31","192.168.31.90","192.168.31.25","192.168.31.100") 

$AllLastOcted = $("2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31","32","33","34","35","36","37","38","39","40","41","42","43","44","45","46","47","48","49","50","51","52","53","54","55","56","57","58","59","60","61","62","63","64","65","66","67","68","69","70","71","72","73","74","75","76","77","78","79","80","81","82","83","84","85","86","87","88","89","90","91","92","93","94","95","96","97","98","99","100","101","102","103","104","105","106","107","108","109","110","111","112","113","114","115","116","117","118","119","120","121","122","123","124","125","126","127","128","129","130","131","132","133","134","135","136","137","138","139","140","141","142","143","144","145","146","147","148","149","150","151","152","153","154","155","156","157","158","159","160","161","162","163","164","165","166","167","168","169","170","171","172","173","174","175","176","177","178","179","180","181","182","183","184","185","186","187","188","189","190","191","192","193","194","195","196","197","198","199","200","201","202","203","204","205","206","207","208","209","210","211","212","213","214","215","216","217","218","219","220","221","222","223","224","225","226","227","228","229","230","231","232","233","234","235","236","237","238","239","240","241","242","243","244","245","246","247","248","249","250","251","252","253","254") 

$guestIP = $guestIP | sort -Property {$_-replace '[\d]'},{$_-replace '[a-zA-Z\p{P}]'-as [int]} 
$AllLastOcted = $AllLastOcted | sort -Property {$_-replace '[\d]'},{$_-replace '[a-zA-Z\p{P}]'-as [int]} 

$guestIP = $guestIP -replace('192.168.31.','') 

Compare-Object -ReferenceObject ($AllLastOcted) -DifferenceObject ($guestIP) | select -Property InputObject -First 1 | set-Variable AvailableOcted -PassThru 

$AvailableOcted 

Mon but est, est que j'ai comme résultat la première disponible octed que je peux utiliser. comme:

write-host "IP that can be used is 192.168.31.$AvailableOcted" 
PS > IP that can used is 192.168.31.2 
+0

Utilisation -ExpandProperty au lieu de -Property dans votre instruction Select-Object vers la fin. –

Répondre

1

Vous pouvez simplifier beaucoup. Au lieu de définir tous les nombres compris entre 2 et 254, vous pouvez utiliser l'opérateur pour créer la matrice. Vous n'avez pas non plus besoin des moulages [int]. Au lieu d'utiliser l'applet de commande Compare-Object pour filtrer les octeds, vous pouvez utiliser l'applet de commande Where-Object:

$guestIP = @("192.168.31.200","192.168.31.31","192.168.31.90","192.168.31.25","192.168.31.100") 

$AllLastOcted = 2 .. 254 
$usedOcted = $guestIP -replace '.*\.' 
$nextAvailableOcted = $AllLastOcted | Where { $_ -NotIn $usedOcted } | select -first 1 

write-host "IP that can be used is 192.168.31.$nextAvailableOcted" 

Sortie:

IP that can be used is 192.168.31.2 
+1

Merde qui est vraiment simplifié .. merci beaucoup ... faire ce script m'a pris beaucoup de temps:) ... encore apprendre powershell. –

+0

Vous êtes les bienvenus. Continue! –

1

Eh bien, aussi simple que:

$AvailableOcted.InputObject 

ne revenait que la valeur.

Il ressemblerait à ceci:

write-host ("IP that can be used is 192.168.31." + $AvailableOcted.InputObject)