Skip to content

Commit 6656ff1

Browse files
committed
v1.18.1 — AddressFamily IPv4 scoping, management NIC naming, iSCSI multipath fix
- Remove-NetIPAddress/Remove-NetRoute now specify -AddressFamily IPv4 to avoid stripping IPv6 link-local (09-SET, 45-ConfigExport, 50-EntryPoint) - Standard vSwitch uses $ManagementName variable instead of hardcoded "Management" (09-SET) - iSCSI discovery no longer filters out connected targets, enabling multipath through additional portals (10-iSCSI)
1 parent 2b366f8 commit 6656ff1

9 files changed

Lines changed: 35 additions & 17 deletions

File tree

Changelog.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
# Changelog
22

3+
## v1.18.1
4+
5+
- **Bug Fix:** `Remove-NetIPAddress` and `Remove-NetRoute` calls now specify `-AddressFamily IPv4` — without this flag, IPv6 link-local addresses and routes were stripped unnecessarily during IP reconfiguration (09-SET, 45-ConfigExport, 50-EntryPoint).
6+
- **Bug Fix:** Standard vSwitch creation uses `$ManagementName` variable instead of hardcoded `"Management"` — respects `defaults.json` override for management NIC naming (09-SET).
7+
- **Bug Fix:** iSCSI target discovery no longer filters out already-connected targets — the `IsConnected` filter prevented multipath connections through additional portals since targets connected via the first portal appeared as already connected, blocking MPIO setup. Now attempts connection through each portal and gracefully handles already-connected sessions (10-iSCSI).
8+
- 63 modules, 1854 tests
9+
310
## v1.18.0
411

512
- **New Feature:** Reboot Pending Details — enumerates every registry and WMI source that signals a pending reboot and reports the exact root cause: CBS pending packages, Windows Update completion, pending file rename operations, hostname change (showing old and new names), SCCM/ConfigMgr client reboot requests, and domain join changes. Operations menu option [29] (35-Utilities).

Header.ps1

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,17 @@
3030
7h3 4b1d3r
3131
3232
.VERSION
33-
1.18.0
33+
1.18.1
3434
3535
.LAST UPDATED
3636
03/04/2026
3737
38+
.CHANGELOG v1.18.1
39+
LOGIC BUG FIXES — ADDRESSFAMILY SCOPING + ISCSI MULTIPATH:
40+
- FIX: Remove-NetIPAddress/Remove-NetRoute calls now specify -AddressFamily IPv4 — without this, IPv6 link-local addresses and routes were stripped unnecessarily during IP reconfiguration (09-SET, 45-ConfigExport, 50-EntryPoint)
41+
- FIX: Standard vSwitch creation uses $ManagementName variable instead of hardcoded "Management" — respects defaults.json override for management NIC naming (09-SET)
42+
- FIX: iSCSI target discovery no longer filters out already-connected targets — the IsConnected filter prevented multipath connections through additional portals; now attempts connection through each portal and gracefully handles already-connected sessions (10-iSCSI)
43+
3844
.CHANGELOG v1.18.0
3945
NEW FEATURES — REBOOT DETAILS + MEMORY DIAGNOSTICS:
4046
- NEW: Reboot Pending Details — enumerates every registry/WMI source that signals a pending reboot and shows the exact reason: CBS packages, Windows Update, pending file renames, hostname change, SCCM client, domain join (35-Utilities, 56-OperationsMenu [29])

Modules/00-Initialization.ps1

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ if (-not $script:ModuleRoot) { $script:ModuleRoot = $PSScriptRoot }
135135
if (-not $script:ModuleRoot -and $script:ScriptPath) {
136136
$script:ModuleRoot = [System.IO.Path]::GetDirectoryName($script:ScriptPath)
137137
}
138-
$script:ScriptVersion = "1.18.0"
138+
$script:ScriptVersion = "1.18.1"
139139
$script:ScriptStartTime = Get-Date
140140

141141
# OS version detection (for feature compatibility)

Modules/09-SET.ps1

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -481,8 +481,8 @@ function Add-CustomVNIC {
481481
$cidr = $ipResult[1]
482482
$adapterAlias = "vEthernet ($vnicName)"
483483
try {
484-
Remove-NetIPAddress -InterfaceAlias $adapterAlias -Confirm:$false -ErrorAction SilentlyContinue
485-
Remove-NetRoute -InterfaceAlias $adapterAlias -Confirm:$false -ErrorAction SilentlyContinue
484+
Remove-NetIPAddress -InterfaceAlias $adapterAlias -AddressFamily IPv4 -Confirm:$false -ErrorAction SilentlyContinue
485+
Remove-NetRoute -InterfaceAlias $adapterAlias -AddressFamily IPv4 -Confirm:$false -ErrorAction SilentlyContinue
486486
New-NetIPAddress -InterfaceAlias $adapterAlias -IPAddress $ipAddress -PrefixLength $cidr -ErrorAction Stop
487487
Write-OutputColor " IP $ipAddress/$cidr set on '$vnicName'." -color "Success"
488488
}
@@ -646,7 +646,7 @@ function New-StandardVSwitch {
646646
Start-Sleep -Seconds 1
647647
}
648648
if ($vnicReady) {
649-
Rename-VMNetworkAdapter -ManagementOS -Name $SwitchName -NewName "Management" -ErrorAction SilentlyContinue
649+
Rename-VMNetworkAdapter -ManagementOS -Name $SwitchName -NewName $ManagementName -ErrorAction SilentlyContinue
650650
}
651651

652652
Write-OutputColor " External switch '$SwitchName' created!" -color "Success"

Modules/10-iSCSI.ps1

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -923,10 +923,10 @@ function Connect-iSCSITargets {
923923
Write-OutputColor " Portal already registered." -color "Info"
924924
}
925925

926-
# Discover targets
927-
$targets = Get-IscsiTarget -ErrorAction Stop | Where-Object { $_.IsConnected -eq $false }
926+
# Discover targets (include already-connected targets for multipath via additional portals)
927+
$targets = @(Get-IscsiTarget -ErrorAction Stop)
928928

929-
if ($targets) {
929+
if ($targets.Count -gt 0) {
930930
foreach ($target in $targets) {
931931
Write-OutputColor " Connecting to target: $($target.NodeAddress)..." -color "Info"
932932
try {
@@ -935,12 +935,17 @@ function Connect-iSCSITargets {
935935
Write-OutputColor " Connected successfully!" -color "Success"
936936
}
937937
catch {
938-
Write-OutputColor " Failed to connect: $_" -color "Warning"
938+
if ($_.Exception.Message -match 'already.*connect|session.*exist') {
939+
Write-OutputColor " Already connected through this portal." -color "Info"
940+
}
941+
else {
942+
Write-OutputColor " Failed to connect: $_" -color "Warning"
943+
}
939944
}
940945
}
941946
}
942947
else {
943-
Write-OutputColor " No disconnected targets found for this portal." -color "Info"
948+
Write-OutputColor " No targets discovered." -color "Info"
944949
}
945950
}
946951
catch {

Modules/45-ConfigExport.ps1

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -606,8 +606,8 @@ function Import-ConfigurationProfile {
606606
Write-OutputColor " [2/13] Configuring network..." -color "Info"
607607
try {
608608
$adapterName = $configProfile.Network.AdapterName
609-
Remove-NetIPAddress -InterfaceAlias $adapterName -Confirm:$false -ErrorAction SilentlyContinue
610-
Remove-NetRoute -InterfaceAlias $adapterName -Confirm:$false -ErrorAction SilentlyContinue
609+
Remove-NetIPAddress -InterfaceAlias $adapterName -AddressFamily IPv4 -Confirm:$false -ErrorAction SilentlyContinue
610+
Remove-NetRoute -InterfaceAlias $adapterName -AddressFamily IPv4 -Confirm:$false -ErrorAction SilentlyContinue
611611

612612
New-NetIPAddress -InterfaceAlias $adapterName -IPAddress $configProfile.Network.IPAddress `
613613
-PrefixLength $configProfile.Network.SubnetCIDR -DefaultGateway $configProfile.Network.Gateway -ErrorAction Stop

Modules/50-EntryPoint.ps1

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -490,8 +490,8 @@ function Start-BatchMode {
490490
$oldDNS = (Get-DnsClientServerAddress -InterfaceAlias $adapterName -AddressFamily IPv4 -ErrorAction SilentlyContinue).ServerAddresses
491491

492492
# Clear existing config
493-
Remove-NetIPAddress -InterfaceAlias $adapterName -Confirm:$false -ErrorAction SilentlyContinue
494-
Remove-NetRoute -InterfaceAlias $adapterName -Confirm:$false -ErrorAction SilentlyContinue
493+
Remove-NetIPAddress -InterfaceAlias $adapterName -AddressFamily IPv4 -Confirm:$false -ErrorAction SilentlyContinue
494+
Remove-NetRoute -InterfaceAlias $adapterName -AddressFamily IPv4 -Confirm:$false -ErrorAction SilentlyContinue
495495

496496
# Set IP
497497
New-NetIPAddress -InterfaceAlias $adapterName -IPAddress $Config.IPAddress `
@@ -519,7 +519,7 @@ function Start-BatchMode {
519519
$undoOldPrefix = if ($oldIP) { $oldIP.PrefixLength } else { 24 }
520520
$undoOldGW = $oldGW
521521
$undoOldDNS = $oldDNS
522-
$script:BatchUndoStack.Add(@{ Step = $stepNum; Description = "Restore network config on $undoAdapter"; Reversible = $true; UndoScript = [scriptblock]::Create("Remove-NetIPAddress -InterfaceAlias '$undoAdapterEsc' -Confirm:`$false -ErrorAction SilentlyContinue; Remove-NetRoute -InterfaceAlias '$undoAdapterEsc' -Confirm:`$false -ErrorAction SilentlyContinue; if ('$undoOldIP') { New-NetIPAddress -InterfaceAlias '$undoAdapterEsc' -IPAddress '$undoOldIP' -PrefixLength $undoOldPrefix $(if($undoOldGW){"-DefaultGateway '$undoOldGW'"}) -ErrorAction SilentlyContinue }") })
522+
$script:BatchUndoStack.Add(@{ Step = $stepNum; Description = "Restore network config on $undoAdapter"; Reversible = $true; UndoScript = [scriptblock]::Create("Remove-NetIPAddress -InterfaceAlias '$undoAdapterEsc' -AddressFamily IPv4 -Confirm:`$false -ErrorAction SilentlyContinue; Remove-NetRoute -InterfaceAlias '$undoAdapterEsc' -AddressFamily IPv4 -Confirm:`$false -ErrorAction SilentlyContinue; if ('$undoOldIP') { New-NetIPAddress -InterfaceAlias '$undoAdapterEsc' -IPAddress '$undoOldIP' -PrefixLength $undoOldPrefix $(if($undoOldGW){"-DefaultGateway '$undoOldGW'"}) -ErrorAction SilentlyContinue }") })
523523
}
524524
catch {
525525
Write-OutputColor " Failed: $_" -color "Error"

RackStack.ps1

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
Environment-specific settings are configured via defaults.json.
1414
1515
.VERSION
16-
1.18.0
16+
1.18.1
1717
1818
.NOTES
1919
- Requires Windows Server 2012 R2 or later (or Windows 10/11 for testing)

Tests/Run-Tests.ps1

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<#
22
.SYNOPSIS
3-
Automated Test Runner for RackStack v1.18.0
3+
Automated Test Runner for RackStack v1.18.1
44
55
.DESCRIPTION
66
Comprehensive non-interactive test suite covering:

0 commit comments

Comments
 (0)