From a270522a6df9211c11667e30503e0fe3c04b9037 Mon Sep 17 00:00:00 2001 From: Katsuhiro Watanabe Date: Thu, 12 Jun 2025 16:28:13 +0900 Subject: [PATCH 1/5] Check HTTP Header before download in Save-WebFile.ps1 Prevent mistakenly downloading http contents indicating 404 error --- Public/Functions/Other/Save-WebFile.ps1 | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/Public/Functions/Other/Save-WebFile.ps1 b/Public/Functions/Other/Save-WebFile.ps1 index a8764a0f..8ee8d9e5 100644 --- a/Public/Functions/Other/Save-WebFile.ps1 +++ b/Public/Functions/Other/Save-WebFile.ps1 @@ -116,13 +116,17 @@ function Save-WebFile { else { Write-Verbose "cURL Source: $SourceUrl" Write-Verbose "Destination: $DestinationFullName" - - if ($host.name -match 'ConsoleHost') { - Invoke-Expression "& curl.exe --insecure --location --output `"$DestinationFullName`" --url `"$SourceUrl`"" - } - else { - #PowerShell ISE will display a NativeCommandError, so progress will not be displayed - $Quiet = Invoke-Expression "& curl.exe --insecure --location --output `"$DestinationFullName`" --url `"$SourceUrl`" 2>&1" + $Headers = Invoke-Expression "& curl.exe --head --silent --insecure --location --url `"$SourceUrl`"" + if ($Headers[0] -match "200.+OK") { + if ($host.name -match 'ConsoleHost') { + Invoke-Expression "& curl.exe --insecure --location --output `"$DestinationFullName`" --url `"$SourceUrl`"" + } + else { + #PowerShell ISE will display a NativeCommandError, so progress will not be displayed + $Quiet = Invoke-Expression "& curl.exe --insecure --location --output `"$DestinationFullName`" --url `"$SourceUrl`" 2>&1" + } + } else { + Write-Warning "Header status: $($headers[0])" } } #================================================= From 5427b834ec2e96dbbd8a09ecad5b962e9afc33bf Mon Sep 17 00:00:00 2001 From: Katsuhiro Watanabe Date: Thu, 12 Jun 2025 16:35:37 +0900 Subject: [PATCH 2/5] Import offline driver catalog in OSDCloud.DriverPack.ps1 --- Public/OSDCloudDriverPack/OSDCloud.DriverPack.ps1 | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/Public/OSDCloudDriverPack/OSDCloud.DriverPack.ps1 b/Public/OSDCloudDriverPack/OSDCloud.DriverPack.ps1 index 5576d6e3..edb01c7a 100644 --- a/Public/OSDCloudDriverPack/OSDCloud.DriverPack.ps1 +++ b/Public/OSDCloudDriverPack/OSDCloud.DriverPack.ps1 @@ -67,7 +67,17 @@ function Get-OSDCloudDriverPacks { #> [CmdletBinding()] param () - $Results = Import-Clixml -Path "$(Get-OSDModulePath)\cache\driverpack-catalogs\build-driverpacks.xml" + $DriverCatalogXML = Get-PSDrive -PSProvider FileSystem | Where-Object {$_.Name -ne 'C'} | ForEach-Object { + Get-ChildItem "$($_.Root)OSDCloud\Catalogs" -Include "build-driverpacks.xml" -File -Force -Recurse -ErrorAction Ignore + } + if ($DriverCatalogXML) { + foreach ($Item in $DriverCatalogXML) { + Write-Warning "$($Item.FullName) is imported instead of the cache under $(Get-OSDModulePath)." + $Results = Import-Clixml -Path $Item.FullName + } + } else { + $Results = Import-Clixml -Path "$(Get-OSDModulePath)\cache\driverpack-catalogs\build-driverpacks.xml" + } $Results } function Save-OSDCloudDriverPack { From 183dddf80737e6aca44efd842fd317a7c7365c84 Mon Sep 17 00:00:00 2001 From: Katsuhiro Watanabe Date: Thu, 12 Jun 2025 16:37:18 +0900 Subject: [PATCH 3/5] Import offline OS catalog in Get-OSDCloudOperatingSystems.ps1 --- .../OSDCloudTS/Get-OSDCloudOperatingSystems.ps1 | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/Public/OSDCloudTS/Get-OSDCloudOperatingSystems.ps1 b/Public/OSDCloudTS/Get-OSDCloudOperatingSystems.ps1 index 377e6370..3973b801 100644 --- a/Public/OSDCloudTS/Get-OSDCloudOperatingSystems.ps1 +++ b/Public/OSDCloudTS/Get-OSDCloudOperatingSystems.ps1 @@ -16,12 +16,18 @@ function Get-OSDCloudOperatingSystems { [System.String] $OSArch = 'x64' ) - $FullResults = Get-Content -Path "$(Get-OSDModulePath)\cache\archive-cloudoperatingsystems\CloudOperatingSystems.json" | ConvertFrom-Json - if ($OSArch -eq 'x64'){ - $Results = $FullResults | Where-Object {$_.Architecture -eq "x64"} + $OfflineCatalog = Get-PSDrive -PSProvider FileSystem | Where-Object {$_.Name -ne 'C'} | ForEach-Object { + Get-ChildItem "$($_.Root)OSDCloud\Catalogs" -Include "CloudOperatingSystems.json" -File -Force -Recurse -ErrorAction Ignore } - elseif ($OSArch -eq "arm64"){ - $Results = Get-Content -Path "$(Get-OSDModulePath)\cache\archive-cloudoperatingsystems\CloudOperatingSystemsARM64.json" | ConvertFrom-Json + if ($OfflineCatalog) { + foreach ($Item in $OfflineCatalog) { + Write-Warning "$($Item.FullName) is imported instead of the cache under $(Get-OSDModulePath)." + $FullResults = Get-Content -Path "$($Item.FullName)" | ConvertFrom-Json -ErrorAction "Stop" + } + $Results = $FullResults | Where-Object {$_.Architecture -eq $OSArch} + } else { + $FullResults = Get-Content -Path "$(Get-OSDModulePath)\cache\archive-cloudoperatingsystems\CloudOperatingSystems.json" | ConvertFrom-Json + $Results = $FullResults | Where-Object {$_.Architecture -eq $OSArch} } $Results } \ No newline at end of file From 4727d2a07a114a03ea449bea7aac801ebf2dc047 Mon Sep 17 00:00:00 2001 From: Katsuhiro Watanabe Date: Thu, 12 Jun 2025 16:38:18 +0900 Subject: [PATCH 4/5] Import offline OS catalog in Get-OSDCloudOperatingSystemsIndexMap.ps1 Fix bug in the previous version. Use UTF8 for tentative workaround. --- .../Get-OSDCloudOperatingSystemsIndexMap.ps1 | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/Public/OSDCloudTS/Get-OSDCloudOperatingSystemsIndexMap.ps1 b/Public/OSDCloudTS/Get-OSDCloudOperatingSystemsIndexMap.ps1 index 8897ee09..28dbfa13 100644 --- a/Public/OSDCloudTS/Get-OSDCloudOperatingSystemsIndexMap.ps1 +++ b/Public/OSDCloudTS/Get-OSDCloudOperatingSystemsIndexMap.ps1 @@ -21,9 +21,19 @@ function Get-OSDCloudOperatingSystemsIndexMap { $OSArch = 'x64' ) - $indexMapPath = "$(Get-OSDModulePath)\cache\archive-cloudoperatingindexmap\CloudOperatingIndexMap.json" - $Results = Get-Content -Path $indexMapPath | ConvertFrom-Json + $OfflineCatalog = Get-PSDrive -PSProvider FileSystem | Where-Object {$_.Name -ne 'C'} | ForEach-Object { + Get-ChildItem "$($_.Root)OSDCloud\Catalogs" -Include "CloudOperatingIndexMap.json" -File -Force -Recurse -ErrorAction Ignore + } + if ($OfflineCatalog) { + foreach ($Item in $OfflineCatalog) { + Write-Warning "$($Item.FullName) is imported instead of the cache under $(Get-OSDModulePath)." + $indexMapPath = (Get-Item -Path "$($Item.FullName)").FullName + } + } else { + $indexMapPath = "$(Get-OSDCachePath)\archive-cloudoperatingindexmap\CloudOperatingIndexMap.json" + } + $Results = Get-Content -Path $indexMapPath -Encoding UTF8 | ConvertFrom-Json # as of OSD 25.6.10.1 encoding of the json is UTF8 $Results = $Results | Where-Object { $_.Architecture -eq $OSArch } return $Results -} \ No newline at end of file +} From d408f929dd1ff11b40eee3c68643a0d71e77c672 Mon Sep 17 00:00:00 2001 From: Katsuhiro Watanabe Date: Thu, 12 Jun 2025 16:40:06 +0900 Subject: [PATCH 5/5] Import offline OS catalog in Get-OSDCloudOperatingSystemsIndexes.ps1 --- .../Get-OSDCloudOperatingSystemsIndexes.ps1 | 24 +++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/Public/OSDCloudTS/Get-OSDCloudOperatingSystemsIndexes.ps1 b/Public/OSDCloudTS/Get-OSDCloudOperatingSystemsIndexes.ps1 index 5ca1b0f6..37c73f9c 100644 --- a/Public/OSDCloudTS/Get-OSDCloudOperatingSystemsIndexes.ps1 +++ b/Public/OSDCloudTS/Get-OSDCloudOperatingSystemsIndexes.ps1 @@ -19,10 +19,30 @@ function Get-OSDCloudOperatingSystemsIndexes { ) if ($OSArch -eq 'x64') { - $Results = Get-Content -Path "$(Get-OSDModulePath)\cache\archive-cloudoperatingsystems\CloudOperatingSystemsIndexes.json" | ConvertFrom-Json + $OfflineCatalog = Get-PSDrive -PSProvider FileSystem | Where-Object {$_.Name -ne 'C'} | ForEach-Object { + Get-ChildItem "$($_.Root)OSDCloud\Catalogs" -Include "CloudOperatingSystemsIndexes.json" -File -Force -Recurse -ErrorAction Ignore + } + if ($OfflineCatalog) { + foreach ($Item in $OfflineCatalog) { + Write-Warning "$($Item.FullName) is imported instead of the cache under $(Get-OSDModulePath)." + $Results = Get-Content -Path "$($Item.FullName)" | ConvertFrom-Json -ErrorAction "Stop" + } + } else { + $Results = Get-Content -Path "$(Get-OSDCachePath)\archive-cloudoperatingsystems\CloudOperatingSystemsIndexes.json" | ConvertFrom-Json + } } elseif ($OSArch -eq "ARM64") { - $Results = Get-Content -Path "$(Get-OSDModulePath)\cache\archive-cloudoperatingsystems\CloudOperatingSystemsARM64Indexes.json" | ConvertFrom-Json + $OfflineCatalog = Get-PSDrive -PSProvider FileSystem | Where-Object {$_.Name -ne 'C'} | ForEach-Object { + Get-ChildItem "$($_.Root)OSDCloud\Catalogs" -Include "CloudOperatingSystemsARM64Indexes.json" -File -Force -Recurse -ErrorAction Ignore + } + if ($OfflineCatalog) { + foreach ($Item in $OfflineCatalog) { + Write-Warning "$($Item.FullName) is imported instead of the cache under $(Get-OSDModulePath)." + $Results = Get-Content -Path "$($Item.FullName)" | ConvertFrom-Json -ErrorAction "Stop" + } + } else { + $Results = Get-Content -Path "$(Get-OSDCachePath)\archive-cloudoperatingsystems\CloudOperatingSystemsARM64Indexes.json" | ConvertFrom-Json + } } return $Results