Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions CHECKSUMS.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
229B99CB364794905604F3DF1AF743818B87BEF3285AEA2D8F9E2EF7110BEBE6 LICENSE
2758FD3259782144EEB4861E1FE897067C8AD00E03B3AFDB011D2FE2BAD591BA CONTRIBUTING.md
3F0B53A6D0B38D4E0C58E0EB68C7EA7CAA269FE2C40BEDB040CB5F52FBAC9325 TASK-SEQUENCE.md
415808C493F891C25EF97E2C72A9441E1ECBF2E62FEF523FD0A7EF4835ADB20A Invoke-OSDDiskLayout.ps1
415808C493F891C25EF97E2C72A9441E1ECBF2E62FEF523FD0A7EF4835ADB20A Scripts/Invoke-OSDDiskLayout.ps1
C0886CD6AB12CD85B6F59C8DF2B43810C7046E338B691FA43872D51062E6610F Invoke-OSDDiskLayout.ps1
C0886CD6AB12CD85B6F59C8DF2B43810C7046E338B691FA43872D51062E6610F Scripts/Invoke-OSDDiskLayout.ps1
4C72A839E749AEDC6F440F020AF486F0384B7EA7147693ECA91F2A463A2B40D7 Tests/Branding.Tests.ps1
5680E037241C06860FCAC7D8F6FF9AB2BBD6045D01A2E1F6271750222C29D494 _layouts/default.html
65F1921C51C1F3AD2BFF6871DC12CB2E5B8FCBB74C35ABD992EA18EF6CC72EF7 assets/css/style.scss
Expand All @@ -25,7 +25,7 @@ B3FA5B1E4D7F52FEF40C54F52D4B0C6D63EED3F3193E99976D8EDE75DFD87482 PSScriptAnalyz
B4052A8246C92104D479C9760DFC99D79B710AE0EDCA21866585C94CAF2B5B7C assets/banner.svg
B7469B888920F0CC7AFE47067BE298E4FA5576094CACEEEDB44A102E1A9389AD build/Invoke-Validation.ps1
BFE846987094295386DD402ABB9114B5D104C70FAF7615AB48CCA02A9E35BB63 .github/ISSUE_TEMPLATE/bug_report.yml
C95AEE4322473E9562363DE4B6AE6345EB46FB0114114992799296541F6CDAE6 Tests/Invoke-OSDDiskLayout.Tests.ps1
19FE11ED6554E89B636133484C202FDA996EB7FE816984F5BD5272DE996199CD Tests/Invoke-OSDDiskLayout.Tests.ps1
DF3A074261544800B739DEE93B071DE5383EFE796B874D7673AD69A5548F7A4A .github/FUNDING.yml
EE0AE7CB2CDBA1FCE9931C070088CB6111695425DAD8C5EDF42522695B018B05 assets/banner-compact.svg
F0046572EFD5AF68B572580D6B060F552EC6C89EB5BD10143E948FEC67E12C79 _config.yml
8 changes: 4 additions & 4 deletions Invoke-OSDDiskLayout.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -621,8 +621,8 @@ function Test-SameDisk {
}
}

$Drive = @(Get-CimInstance -ClassName Win32_DiskDrive -ErrorAction Stop |
Where-Object { [int]$_.Index -eq $Selection.Number })
$Drive = @(Get-CimInstance -ClassName Win32_DiskDrive `
-Filter "Index = $($Selection.Number)" -ErrorAction Stop)
if ($Selection.WmiFound) {
if (($Drive.Count -ne 1) -or
([string]$Drive[0].PNPDeviceID -ne $Selection.PnpId)) {
Expand Down Expand Up @@ -1160,8 +1160,8 @@ try {
(([string]$ResultDisk.SerialNumber).Trim() -ne $Selected.Serial))) {
throw 'Post-format disk identity or partition-style verification failed.'
}
$PostDevice = @(Get-CimInstance -ClassName Win32_DiskDrive -ErrorAction Stop |
Where-Object { $_.Index -eq $Selected.Number })
$PostDevice = @(Get-CimInstance -ClassName Win32_DiskDrive `
-Filter "Index = $($Selected.Number)" -ErrorAction Stop)
if ($Selected.WmiFound -and
($PostDevice.Count -ne 1 -or
[string]$PostDevice[0].PNPDeviceID -ne $Selected.PnpId)) {
Expand Down
8 changes: 4 additions & 4 deletions Scripts/Invoke-OSDDiskLayout.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -621,8 +621,8 @@ function Test-SameDisk {
}
}

$Drive = @(Get-CimInstance -ClassName Win32_DiskDrive -ErrorAction Stop |
Where-Object { [int]$_.Index -eq $Selection.Number })
$Drive = @(Get-CimInstance -ClassName Win32_DiskDrive `
-Filter "Index = $($Selection.Number)" -ErrorAction Stop)
if ($Selection.WmiFound) {
if (($Drive.Count -ne 1) -or
([string]$Drive[0].PNPDeviceID -ne $Selection.PnpId)) {
Expand Down Expand Up @@ -1160,8 +1160,8 @@ try {
(([string]$ResultDisk.SerialNumber).Trim() -ne $Selected.Serial))) {
throw 'Post-format disk identity or partition-style verification failed.'
}
$PostDevice = @(Get-CimInstance -ClassName Win32_DiskDrive -ErrorAction Stop |
Where-Object { $_.Index -eq $Selected.Number })
$PostDevice = @(Get-CimInstance -ClassName Win32_DiskDrive `
-Filter "Index = $($Selected.Number)" -ErrorAction Stop)
if ($Selected.WmiFound -and
($PostDevice.Count -ne 1 -or
[string]$PostDevice[0].PNPDeviceID -ne $Selected.PnpId)) {
Expand Down
65 changes: 65 additions & 0 deletions Tests/Invoke-OSDDiskLayout.Tests.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ BeforeAll {
'Select-OSDTargetDisk',
'Assert-OSDFirmwareDiskGeometry',
'Assert-OSDDiskState',
'Test-SameDisk',
'New-OSDPartitionPlan',
'New-OSDDiskPartCommands',
'Assert-OSDPartitionStructure',
Expand Down Expand Up @@ -416,6 +417,70 @@ Describe 'Final disk recheck (no hardware writes)' {
}
}

Describe 'Targeted WMI disk recheck (no hardware writes)' {
It 'queries only the selected disk and still verifies its identity' {
$Selection = New-FixtureDisk -Number 3 -Serial 'APPROVED'
$Current = [pscustomobject]@{
Size = $Selection.SizeBytes
LogicalSectorSize = $Selection.LogicalSectorSize
BusType = $Selection.BusType
FriendlyName = $Selection.Model
SerialNumber = $Selection.Serial
UniqueId = $Selection.UniqueId
HealthStatus = $Selection.HealthStatus
IsOffline = $Selection.IsOffline
IsReadOnly = $Selection.IsReadOnly
IsClustered = $Selection.IsClustered
}
$Device = [pscustomobject]@{
Index = $Selection.Number
PNPDeviceID = $Selection.PnpId
InterfaceType = $Selection.WmiInterface
MediaType = $Selection.WmiMedia
Status = $Selection.WmiStatus
}
Mock Get-Disk { $Current }
Mock Get-CimInstance { $Device } -ParameterFilter {
$ClassName -eq 'Win32_DiskDrive' -and $Filter -eq 'Index = 3'
}

{ Test-SameDisk -Selection $Selection } | Should -Not -Throw
Should -Invoke Get-CimInstance -Exactly 1 -ParameterFilter {
$ClassName -eq 'Win32_DiskDrive' -and $Filter -eq 'Index = 3'
}
}

It 'rejects a selected disk whose WMI device identity changed' {
$Selection = New-FixtureDisk -Number 3 -Serial 'APPROVED'
$Current = [pscustomobject]@{
Size = $Selection.SizeBytes
LogicalSectorSize = $Selection.LogicalSectorSize
BusType = $Selection.BusType
FriendlyName = $Selection.Model
SerialNumber = $Selection.Serial
UniqueId = $Selection.UniqueId
HealthStatus = $Selection.HealthStatus
IsOffline = $Selection.IsOffline
IsReadOnly = $Selection.IsReadOnly
IsClustered = $Selection.IsClustered
}
$Device = [pscustomobject]@{
Index = $Selection.Number
PNPDeviceID = 'SCSI\\DISK&VEN_CHANGED'
InterfaceType = $Selection.WmiInterface
MediaType = $Selection.WmiMedia
Status = $Selection.WmiStatus
}
Mock Get-Disk { $Current }
Mock Get-CimInstance { $Device } -ParameterFilter {
$ClassName -eq 'Win32_DiskDrive' -and $Filter -eq 'Index = 3'
}

{ Test-SameDisk -Selection $Selection } |
Should -Throw 'Disk device identity changed since selection; refusing to erase it.'
}
}

Describe 'Partition calculation and DiskPart plan' {
It 'keeps the complete <FirmwareMode> command sequence with Data=<DataMiB>' -Tag 'Cleanup' -ForEach @(
@{ FirmwareMode = 'UEFI'; DataMiB = 0 }
Expand Down