Das ist extrem dumm, aber meine Schleife wird beendet, bevor es zur zweiten Schleife offenbar kommt.Powershell-Schleife beendet früh
Was das Skript macht, zählt die Hardware-Bus- und Funktionsnummer von Ethernet-Karten auf einem Server (normalerweise mindestens 2 oder mehr Ports). Der Bus entspricht normalerweise einem Chip/Karte im Server und die Funktionsnummer normalerweise dem spezifischen Port.
Beispielszenario - ein Server mit zwei Dual-Port-Ethernet-Karten könnte so aussehen, wenn Sie get-netadapterhardwareinfo laufen:
name Bus Function
---- --- --------
PORT4 2 1
PORT3 2 0
B1 Port2 1 1
B1 Port1 1 0
Sie das Skript auf „Bus 1“ läuft sehen, aber dann wird die Schleife beendet bevor "Bus 2" bearbeitet werden kann.
Diese Leitung soll es
for($i = 1; $i -le $buscount.Maximum; $i++)
und die „kleiner oder gleich“ Auswerten für die zweite Schleife als wahr sollte zu handhaben. Ich gebe am Ende einige Write-Hosts ein, um die Schleife zu debuggen, sie scheint zu beenden.
FULL SCRIPT:
#BEGIN
#collect hardware information, determine ports.
$allnicinfo = Get-NetAdapterHardwareInfo | Select Name, InstanceID, InterfaceDescription, BusNumber, FunctionNumber
#determine how many adapters exist
$buscount = Get-NetAdapterHardwareInfo | select -ExpandProperty busnumber | measure-object -maximum | select Maximum
#improve the bus count method
for($i = 1; $i -le $buscount.Maximum; $i++)
{
$bus = $i
$funccount= @()
$funccount = $allnicinfo | where-object {$_.busnumber -eq $i} | select -expandproperty functionnumber | measure-object -Maximum | select Maximum
for($i = 0; $i -le $funccount.Maximum; $i++)
{
$nic = Get-NetAdapterHardwareInfo | where {($_.busnumber -eq $bus) -and ($_.functionnumber -eq $i)}
$port = $i + 1
Rename-NetAdapter $nic.Name "B$bus Port$port"
}
write-host $bus
write-host $i
}
Wo existiert 'BusNumber'? Ich sehe in Ihrem Beispiel, dass es eine 'Bus'-Eigenschaft gibt, aber keine' BusNumber'. Außerdem sollte Ihre '$ allnicinfo' -Variable eine' .Count'-Eigenschaft haben, da es sich um ein Array handelt. – TheIncorrigible1
$ Dies ist eine Eigenschaft des Cmdlets get-netadapterhardwareinfo. Scheint nicht zu zählen, warum bin ich mir nicht sicher. Sie haben wahrscheinlich recht, dass ich es als Array speichern sollte, ich glaube aber nicht, dass es mein Loop-Problem lösen wird. – Brink
Warum verwenden Sie 'For' anstelle von' ForEach' Loops? Scheint ein wenig gewunden zu folgen. Alles, was Sie tun, ist das Umbenennen von Adaptern – TheIncorrigible1