This commit is contained in:
Brian Warren 2025-04-07 19:18:38 -05:00
parent a0c8a19a72
commit d636da7e6a
4 changed files with 116 additions and 117 deletions

View File

@ -9,7 +9,7 @@ param (
$comType,
[Parameter(Mandatory=$true)]
[ValidateSet('export', 'import', 'delete', 'createRegFiles')]
[ValidateSet('query', 'import', 'delete', 'generate')]
[string]
$action,
@ -95,11 +95,11 @@ $progId = "$versionIndependentProgId.1";
switch ($action) {
'createRegFiles' {
'generate' {
}
'delete' {
}
'export' {
'query' {
}
'import' {
if (!$comDir) {
@ -163,16 +163,16 @@ try {
Write-Error "An error occurred trying to discover network path to COM server at $comPath"
}
function Get-ClsidPaths {
function Get-ClsidData {
param(
[Parameter(Mandatory=$true)]
[Parameter(Mandatory=$false)]
[string]
$architectureNode
$architectureNode = '\'
)
return @(
@{
Key = "\SOFTWARE\Classes$($architectureNode)CLSID\{$clsid}"
Values = @(
ValueItems = @(
@{
Name = '(default)'
Value = $classLabel
@ -185,7 +185,7 @@ function Get-ClsidPaths {
},
@{
Key = "\SOFTWARE\Classes$($architectureNode)CLSID\{$clsid}\LocalServer32"
Values = @(
ValueItems = @(
@{
Name = '(default)'
Value = $comPath
@ -194,7 +194,7 @@ function Get-ClsidPaths {
},
@{
Key = "\SOFTWARE\Classes$($architectureNode)CLSID\{$clsid}\ProgID"
Values = @(
ValueItems = @(
@{
Name = '(default)'
Value = $progId
@ -203,11 +203,11 @@ function Get-ClsidPaths {
},
@{
Key = "\SOFTWARE\Classes$($architectureNode)CLSID\{$clsid}\Programmable"
Values = @()
ValueItems = @()
},
@{
Key = "\SOFTWARE\Classes$($architectureNode)CLSID\{$clsid}\TypeLib"
Values = @(
ValueItems = @(
@{
Name = '(default)'
Value = "{$typeLibId}"
@ -216,7 +216,7 @@ function Get-ClsidPaths {
},
@{
Key = "\SOFTWARE\Classes$($architectureNode)CLSID\{$clsid}\VersionIndependentProgID"
Values = @(
ValueItems = @(
@{
Name = '(default)'
Value = $versionIndependentProgId
@ -226,16 +226,16 @@ function Get-ClsidPaths {
)
}
function Get-InterfacePaths {
function Get-InterfaceData {
param(
[Parameter(Mandatory=$true)]
[Parameter(Mandatory=$false)]
[string]
$architectureNode
$architectureNode = '\'
)
return @(
@{
Key = "\SOFTWARE\Classes$($architectureNode)Interface\{$interfaceId}"
Values = @(
ValueItems = @(
@{
Name = '(default)'
Value = $interfaceName
@ -244,7 +244,7 @@ function Get-InterfacePaths {
},
@{
Key = "\SOFTWARE\Classes$($architectureNode)Interface\{$interfaceId}\ProxyStubClsid32"
Values = @(
ValueItems = @(
@{
Name = '(default)'
Value = "{$interfaceStubClsid}"
@ -253,7 +253,7 @@ function Get-InterfacePaths {
},
@{
Key = "\SOFTWARE\Classes$($architectureNode)Interface\{$interfaceId}\TypeLib"
Values = @(
ValueItems = @(
@{
Name = '(default)'
Value = "{$typeLibId}"
@ -266,7 +266,7 @@ function Get-InterfacePaths {
},
@{
Key = "\SOFTWARE\Classes$($architectureNode)Interface\{$eventInterfaceId}"
Values = @(
ValueItems = @(
@{
Name = '(default)'
Value = $eventInterfaceName
@ -275,7 +275,7 @@ function Get-InterfacePaths {
},
@{
Key = "\SOFTWARE\Classes$($architectureNode)Interface\{$eventInterfaceId}\ProxyStubClsid32"
Values = @(
ValueItems = @(
@{
Name = '(default)'
Value = "{$eventInterfaceStubClsid}"
@ -284,7 +284,7 @@ function Get-InterfacePaths {
},
@{
Key = "\SOFTWARE\Classes$($architectureNode)Interface\{$eventInterfaceId}\TypeLib"
Values = @(
ValueItems = @(
@{
Name = '(default)'
Value = "{$typeLibId}"
@ -298,11 +298,11 @@ function Get-InterfacePaths {
)
}
function Get-ProgIdPaths {
function Get-ProgIdData {
return @(
@{
Key = "\SOFTWARE\Classes\$versionIndependentProgId"
Values = @(
ValueItems = @(
@{
Name = '(default)'
Value = $classLabel
@ -311,7 +311,7 @@ function Get-ProgIdPaths {
},
@{
Key = "\SOFTWARE\Classes\$versionIndependentProgId\CLSID"
Values = @(
ValueItems = @(
@{
Name = '(default)'
Value = "{$clsid}"
@ -320,7 +320,7 @@ function Get-ProgIdPaths {
},
@{
Key = "\SOFTWARE\Classes\$versionIndependentProgId\CurVer"
Values = @(
ValueItems = @(
@{
Name = '(default)'
Value = $progId
@ -329,7 +329,7 @@ function Get-ProgIdPaths {
}
@{
Key = "\SOFTWARE\Classes\$progId"
Values = @(
ValueItems = @(
@{
Name = '(default)'
Value = $classLabel
@ -338,7 +338,7 @@ function Get-ProgIdPaths {
},
@{
Key = "\SOFTWARE\Classes\$progId\CLSID"
Values = @(
ValueItems = @(
@{
Name = '(default)'
Value = "{$clsid}"
@ -348,20 +348,20 @@ function Get-ProgIdPaths {
)
}
function Get-TypeLibPaths {
function Get-TypeLibData {
param(
[Parameter(Mandatory=$true)]
[Parameter(Mandatory=$false)]
[string]
$architectureNode
$architectureNode = '\'
)
return @(
@{
Key = "\SOFTWARE\Classes$($architectureNode)TypeLib\{$typeLibId}"
Values = @()
ValueItems = @()
},
@{
Key = "\SOFTWARE\Classes$($architectureNode)TypeLib\{$typeLibId}\$typeLibVersion"
Values = @(
ValueItems = @(
@{
Name = '(default)'
Value = $typeLibLabel
@ -370,11 +370,11 @@ function Get-TypeLibPaths {
},
@{
Key = "\SOFTWARE\Classes$($architectureNode)TypeLib\{$typeLibId}\$typeLibVersion\0"
Values = @()
ValueItems = @()
},
@{
Key = "\SOFTWARE\Classes$($architectureNode)TypeLib\{$typeLibId}\$typeLibVersion\0\win32"
Values = @(
ValueItems = @(
@{
Name = '(default)'
Value = $comNetworkPath
@ -383,7 +383,7 @@ function Get-TypeLibPaths {
},
@{
Key = "\SOFTWARE\Classes$($architectureNode)TypeLib\{$typeLibId}\$typeLibVersion\FLAGS"
Values = @(
ValueItems = @(
@{
Name = '(default)'
Value = '0'
@ -392,7 +392,7 @@ function Get-TypeLibPaths {
},
@{
Key = "\SOFTWARE\Classes$($architectureNode)TypeLib\{$typeLibId}\$typeLibVersion\HELPDIR"
Values = @(
ValueItems = @(
@{
Name = '(default)'
Value = "$comDir\"
@ -402,11 +402,11 @@ function Get-TypeLibPaths {
)
}
function Get-Paths {
function Get-Data {
param(
[Parameter(Mandatory=$false)]
[switch]
$bothArchitectures = $false
$includeWrongArchitecturePaths = $false
)
if ($env:PROCESSOR_ARCHITECTURE -eq 'x86') {
@ -416,53 +416,30 @@ function Get-Paths {
}
$paths = New-Object System.Collections.Generic.List[System.Object]
$paths.AddRange((Get-ProgIdPaths))
$paths.AddRange((Get-ClsidPaths -architectureNode $wow6432Node))
$paths.AddRange((Get-InterfacePaths -architectureNode $wow6432Node))
$paths.AddRange((Get-TypeLibPaths -architectureNode $wow6432Node))
$paths.AddRange((Get-ProgIdData))
$paths.AddRange((Get-ClsidData -architectureNode $wow6432Node))
if ($includeWrongArchitecturePaths -and $wow6432Node -ne '\') {
$paths.AddRange((Get-ClsidData))
}
$paths.AddRange((Get-InterfaceData -architectureNode $wow6432Node))
if ($wow6432Node -ne '\') {
if ($bothArchitectures) {
$paths.AddRange((Get-ClsidPaths -architectureNode $wow6432Node))
}
$paths.AddRange((Get-InterfacePaths -architectureNode '\'))
$paths.AddRange((Get-TypeLibPaths -architectureNode '\'))
$paths.AddRange((Get-InterfaceData))
}
$paths.AddRange((Get-TypeLibData -architectureNode $wow6432Node))
if ($wow6432Node -ne '\') {
$paths.AddRange((Get-TypeLibData))
}
return $paths
}
function Read-Registry {
$paths = Get-Paths -bothArchitectures
foreach ($path in $paths) {
$path = "$($hiveShort):\$($path.Key)"
try {
$foundKey = Get-Item -Path $path -ErrorAction Stop
}
catch {
Write-Warning "Failed to find $path"
continue
}
$pathShort = $foundKey.PSPath -replace '^.*::', ''
Write-Host
Write-Host $pathShort
$itemProperty = Get-ItemProperty -Path $foundKey.PSPath
if (!$itemProperty) {
continue
}
foreach ($property in $itemProperty.PSObject.Properties) {
Write-Host "$($property.Name)=$property.Value"
}
}
}
switch ($action) {
'delete' {
$paths = Get-Paths -bothArchitectures
foreach ($path in $paths) {
$path = "$($hiveShort):\$($path.Key)"
$data = Get-Data -includeWrongArchitecturePaths
foreach ($dataEntry in $data) {
$path = "$($hiveShort):\$($dataEntry.Key)"
try {
$foundKey = Get-Item -Path $path -ErrorAction Stop
#Remove-Item -Path $path -Recurse -Force
Write-Information "Deleted registry key: $foundKey"
Remove-Item -Path $path -Recurse -Force -ErrorAction Stop
Write-Information "Deleted registry key: $path"
}
catch {
Write-Error "Failed to find $path"
@ -471,38 +448,59 @@ switch ($action) {
}
}
'import' {
$paths = Get-Paths
foreach ($path in $paths) {
$path = "$($hiveShort):\$($path.Key)"
$data = Get-Data
foreach ($dataEntry in $data) {
$path = "$($hiveShort):\$($dataEntry.Key)"
try {
# $newKey = New-Item -Path $keyEl.Key -Force
$newKey = Get-Item -Path $path -ErrorAction Stop
Write-Information "Imported key: $newKey"
New-Item -Path $path -Force -ErrorAction Stop
Write-Information "Imported key: $path"
}
catch {
Write-Error "Failed to import key: $path"
continue
}
foreach ($value in $key.Values) {
foreach ($valueItem in $dataEntry.ValueItems) {
try {
#$newItem = New-ItemProperty -Path $key.Key -Name $value.Name -Value $value.Value -PropertyType 'String' -Force
#Write-Information "Imported value: $newItem"
Write-Information "Imported value: $($value.Name) in $($key.Key)"
New-ItemProperty -Path $path -Name $valueItem.Name -Value $valueItem.Value -PropertyType 'String' -Force -ErrorAction Stop
Write-Information "Imported value: $($valueItem.Name) in $path"
}
catch {
Write-Error "Failed to create entry: $($value.Name) in $($key.Key)"
Write-Error "Failed to create entry: $($valueItem.Name) in $path"
continue
}
}
}
}
'export' {
Read-Registry
'query' {
$data = Get-Data -includeWrongArchitecturePaths
foreach ($dataEntry in $data) {
$path = "$($hiveShort):\$($dataEntry.Key)"
try {
$foundKey = Get-Item -Path $path -ErrorAction Stop
}
catch {
Write-Warning "Failed to find $path"
continue
}
$pathShort = $foundKey.PSPath -replace '^.*::', ''
Write-Host
Write-Host $pathShort
$itemProperty = Get-ItemProperty -Path $path
if (!$itemProperty) {
continue
}
foreach ($property in $itemProperty.PSObject.Properties) {
if ($property.Name.StartsWith('PS')) {
continue
}
Write-Host "$($property.Name)=$($property.Value)"
}
}
}
'createRegFiles' {
'generate' {
$outFileAdd = "$appName-add.reg"
$outFileDel = "$appName-del.reg"
$paths = Get-Paths
$data = Get-Data
if (Test-Path $outFileAdd) {
try {
Remove-Item -Path $outFileAdd -ErrorAction Stop
@ -514,12 +512,12 @@ switch ($action) {
}
Write-Output 'Windows Registry Editor Version 5.00' > $outFileAdd
Write-Output 'Windows Registry Editor Version 5.00' > $outFileDel
foreach ($pathItem in $paths) {
$path = "$($hive)$($pathItem.Key)"
foreach ($dataEntry in $data) {
$path = "$($hive)$($dataEntry.Key)"
Write-Output '' >> $outFileAdd
Write-Output "[$path]" >> $outFileAdd
Write-Output "[-$path]" >> $outFileDel
foreach ($valueItem in $pathItem.Values) {
foreach ($valueItem in $dataEntry.ValueItems) {
if ($valueItem.Name -eq '(default)') {
$name = '@'
} else {

View File

@ -53,22 +53,6 @@ Windows Registry Editor Version 5.00
@="{FB2C3447-9D8D-4AD0-9234-A163505FC3AE}"
"Version"="1.0"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\TypeLib\{FB2C3447-9D8D-4AD0-9234-A163505FC3AE}]
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\TypeLib\{FB2C3447-9D8D-4AD0-9234-A163505FC3AE}\1.0]
@="QWDevice 1.0 Type Library"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\TypeLib\{FB2C3447-9D8D-4AD0-9234-A163505FC3AE}\1.0\0]
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\TypeLib\{FB2C3447-9D8D-4AD0-9234-A163505FC3AE}\1.0\0\win32]
@="C:\\temp\\ua\\UA-SUITE\\39.1.3\\UAGRDEV\\6.0-cute\\uagrdevs.exe"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\TypeLib\{FB2C3447-9D8D-4AD0-9234-A163505FC3AE}\1.0\FLAGS]
@="0"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\TypeLib\{FB2C3447-9D8D-4AD0-9234-A163505FC3AE}\1.0\HELPDIR]
@="C:\\temp\\ua\\UA-SUITE\\39.1.3\\UAGRDEV\\6.0-cute\\"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Interface\{D178FEAC-4969-45B4-92BF-4582EA5C6F47}]
@="IQWDev"
@ -89,6 +73,22 @@ Windows Registry Editor Version 5.00
@="{FB2C3447-9D8D-4AD0-9234-A163505FC3AE}"
"Version"="1.0"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\TypeLib\{FB2C3447-9D8D-4AD0-9234-A163505FC3AE}]
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\TypeLib\{FB2C3447-9D8D-4AD0-9234-A163505FC3AE}\1.0]
@="QWDevice 1.0 Type Library"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\TypeLib\{FB2C3447-9D8D-4AD0-9234-A163505FC3AE}\1.0\0]
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\TypeLib\{FB2C3447-9D8D-4AD0-9234-A163505FC3AE}\1.0\0\win32]
@="C:\\temp\\ua\\UA-SUITE\\39.1.3\\UAGRDEV\\6.0-cute\\uagrdevs.exe"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\TypeLib\{FB2C3447-9D8D-4AD0-9234-A163505FC3AE}\1.0\FLAGS]
@="0"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\TypeLib\{FB2C3447-9D8D-4AD0-9234-A163505FC3AE}\1.0\HELPDIR]
@="C:\\temp\\ua\\UA-SUITE\\39.1.3\\UAGRDEV\\6.0-cute\\"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{FB2C3447-9D8D-4AD0-9234-A163505FC3AE}]
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{FB2C3447-9D8D-4AD0-9234-A163505FC3AE}\1.0]

View File

@ -16,18 +16,18 @@ Windows Registry Editor Version 5.00
[-HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\Interface\{FDE206D5-EB3E-4DB1-AC3E-6CF314417443}]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\Interface\{FDE206D5-EB3E-4DB1-AC3E-6CF314417443}\ProxyStubClsid32]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\Interface\{FDE206D5-EB3E-4DB1-AC3E-6CF314417443}\TypeLib]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\TypeLib\{FB2C3447-9D8D-4AD0-9234-A163505FC3AE}]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\TypeLib\{FB2C3447-9D8D-4AD0-9234-A163505FC3AE}\1.0]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\TypeLib\{FB2C3447-9D8D-4AD0-9234-A163505FC3AE}\1.0\0]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\TypeLib\{FB2C3447-9D8D-4AD0-9234-A163505FC3AE}\1.0\0\win32]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\TypeLib\{FB2C3447-9D8D-4AD0-9234-A163505FC3AE}\1.0\FLAGS]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\TypeLib\{FB2C3447-9D8D-4AD0-9234-A163505FC3AE}\1.0\HELPDIR]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Interface\{D178FEAC-4969-45B4-92BF-4582EA5C6F47}]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Interface\{D178FEAC-4969-45B4-92BF-4582EA5C6F47}\ProxyStubClsid32]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Interface\{D178FEAC-4969-45B4-92BF-4582EA5C6F47}\TypeLib]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Interface\{FDE206D5-EB3E-4DB1-AC3E-6CF314417443}]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Interface\{FDE206D5-EB3E-4DB1-AC3E-6CF314417443}\ProxyStubClsid32]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Interface\{FDE206D5-EB3E-4DB1-AC3E-6CF314417443}\TypeLib]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\TypeLib\{FB2C3447-9D8D-4AD0-9234-A163505FC3AE}]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\TypeLib\{FB2C3447-9D8D-4AD0-9234-A163505FC3AE}\1.0]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\TypeLib\{FB2C3447-9D8D-4AD0-9234-A163505FC3AE}\1.0\0]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\TypeLib\{FB2C3447-9D8D-4AD0-9234-A163505FC3AE}\1.0\0\win32]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\TypeLib\{FB2C3447-9D8D-4AD0-9234-A163505FC3AE}\1.0\FLAGS]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\TypeLib\{FB2C3447-9D8D-4AD0-9234-A163505FC3AE}\1.0\HELPDIR]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{FB2C3447-9D8D-4AD0-9234-A163505FC3AE}]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{FB2C3447-9D8D-4AD0-9234-A163505FC3AE}\1.0]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{FB2C3447-9D8D-4AD0-9234-A163505FC3AE}\1.0\0]

View File

@ -1,4 +1,5 @@
Windows Registry Editor Version 5.00
[-HKEY_LOCAL_MACHINE\SOFTWARE\Classes\QSRDevice.QSRDev]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Classes\QSRDevice.QSRDev\CLSID]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Classes\QSRDevice.QSRDev\CurVer]