Modified registry powershell logic

This commit is contained in:
Brian Warren 2025-04-06 00:51:40 -05:00
parent 26940e0c46
commit 6a0cdaf509
5 changed files with 622 additions and 127 deletions

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,111 @@
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Interface\{17DCFB07-18A9-4FFE-B34D-37B91D809C41}]
@="_IQSRDevEvents"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Interface\{17DCFB07-18A9-4FFE-B34D-37B91D809C41}\ProxyStubClsid32]
@="{00020420-0000-0000-C000-000000000046}"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Interface\{17DCFB07-18A9-4FFE-B34D-37B91D809C41}\TypeLib]
@="{CD886C7B-B61C-49CF-B3B8-90DB303A502A}"
"Version"="1.0"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Interface\{6B15E61A-381F-41E7-8B65-BA386473FE8C}]
@="IQSRDev"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Interface\{6B15E61A-381F-41E7-8B65-BA386473FE8C}\ProxyStubClsid32]
@="{00020424-0000-0000-C000-000000000046}"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Interface\{6B15E61A-381F-41E7-8B65-BA386473FE8C}\TypeLib]
@="{CD886C7B-B61C-49CF-B3B8-90DB303A502A}"
"Version"="1.0"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\QSRDevice.QSRDev]
@="QSRDev Class"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\QSRDevice.QSRDev\CLSID]
@="{35578409-F9F5-43e8-A6BD-8B77199ED854}"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\QSRDevice.QSRDev\CurVer]
@="QSRDevice.QSRDev.1"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\QSRDevice.QSRDev.1]
@="QSRDev Class"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\QSRDevice.QSRDev.1\CLSID]
@="{35578409-F9F5-43e8-A6BD-8B77199ED854}"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{CD886C7B-B61C-49CF-B3B8-90DB303A502A}]
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{CD886C7B-B61C-49CF-B3B8-90DB303A502A}\1.0]
@="QSRDevice 1.0 Type Library"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{CD886C7B-B61C-49CF-B3B8-90DB303A502A}\1.0\0]
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{CD886C7B-B61C-49CF-B3B8-90DB303A502A}\1.0\0\win32]
@="C:\\temp\\UA\\UA-SUITE\\39.11\\UASRDEV\\cupps\\6.0.3\\UASRDEVQ.EXE"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{CD886C7B-B61C-49CF-B3B8-90DB303A502A}\1.0\FLAGS]
@="0"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{CD886C7B-B61C-49CF-B3B8-90DB303A502A}\1.0\HELPDIR]
@="C:\\temp\\UA\\UA-SUITE\\39.11\\UASRDEV\\cupps\\6.0.3\\"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\CLSID\{35578409-F9F5-43e8-A6BD-8B77199ED854}]
@="QSRDev Class"
"AppID"="{C123476B-ABB6-4bcc-B557-2FDC0CDCD6A8}"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\CLSID\{35578409-F9F5-43e8-A6BD-8B77199ED854}\LocalServer32]
@="\"C:\\temp\\UA\\UA-SUITE\\39.11\\UASRDEV\\cupps\\60985B~1.3\\UASRDEVQ.EXE\""
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\CLSID\{35578409-F9F5-43e8-A6BD-8B77199ED854}\ProgID]
@="QSRDevice.QSRDev.1"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\CLSID\{35578409-F9F5-43e8-A6BD-8B77199ED854}\Programmable]
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\CLSID\{35578409-F9F5-43e8-A6BD-8B77199ED854}\TypeLib]
@="{CD886C7B-B61C-49cf-B3B8-90DB303A502A}"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\CLSID\{35578409-F9F5-43e8-A6BD-8B77199ED854}\VersionIndependentProgID]
@="QSRDevice.QSRDev"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\Interface\{17DCFB07-18A9-4FFE-B34D-37B91D809C41}]
@="_IQSRDevEvents"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\Interface\{17DCFB07-18A9-4FFE-B34D-37B91D809C41}\ProxyStubClsid32]
@="{00020420-0000-0000-C000-000000000046}"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\Interface\{17DCFB07-18A9-4FFE-B34D-37B91D809C41}\TypeLib]
@="{CD886C7B-B61C-49CF-B3B8-90DB303A502A}"
"Version"="1.0"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\Interface\{6B15E61A-381F-41E7-8B65-BA386473FE8C}]
@="IQSRDev"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\Interface\{6B15E61A-381F-41E7-8B65-BA386473FE8C}\ProxyStubClsid32]
@="{00020424-0000-0000-C000-000000000046}"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\Interface\{6B15E61A-381F-41E7-8B65-BA386473FE8C}\TypeLib]
@="{CD886C7B-B61C-49CF-B3B8-90DB303A502A}"
"Version"="1.0"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\TypeLib\{CD886C7B-B61C-49CF-B3B8-90DB303A502A}]
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\TypeLib\{CD886C7B-B61C-49CF-B3B8-90DB303A502A}\1.0]
@="QSRDevice 1.0 Type Library"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\TypeLib\{CD886C7B-B61C-49CF-B3B8-90DB303A502A}\1.0\0]
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\TypeLib\{CD886C7B-B61C-49CF-B3B8-90DB303A502A}\1.0\0\win32]
@="C:\\temp\\UA\\UA-SUITE\\39.11\\UASRDEV\\cupps\\6.0.3\\UASRDEVQ.EXE"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\TypeLib\{CD886C7B-B61C-49CF-B3B8-90DB303A502A}\1.0\FLAGS]
@="0"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\TypeLib\{CD886C7B-B61C-49CF-B3B8-90DB303A502A}\1.0\HELPDIR]
@="C:\\temp\\UA\\UA-SUITE\\39.11\\UASRDEV\\cupps\\6.0.3\\"

View File

@ -0,0 +1,94 @@
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\QSRDevice.QSRDev]
@="QSRDev Class"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\QSRDevice.QSRDev\CLSID]
@="{35578409-F9F5-43e8-A6BD-8B77199ED854}"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\QSRDevice.QSRDev\CurVer]
@="QSRDevice.QSRDev.1"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\QSRDevice.QSRDev.1]
@="QSRDev Class"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\QSRDevice.QSRDev.1\CLSID]
@="{35578409-F9F5-43e8-A6BD-8B77199ED854}"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{CD886C7B-B61C-49CF-B3B8-90DB303A502A}]
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{CD886C7B-B61C-49CF-B3B8-90DB303A502A}\1.0]
@="QSRDevice 1.0 Type Library"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{CD886C7B-B61C-49CF-B3B8-90DB303A502A}\1.0\0]
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{CD886C7B-B61C-49CF-B3B8-90DB303A502A}\1.0\0\win32]
@="C:\\temp\\ua\\UA-SUITE\\39.1.2\\UASRDEV\\6.0-cute\\UASRDEVS.EXE"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{CD886C7B-B61C-49CF-B3B8-90DB303A502A}\1.0\FLAGS]
@="0"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{CD886C7B-B61C-49CF-B3B8-90DB303A502A}\1.0\HELPDIR]
@="C:\\temp\\ua\\UA-SUITE\\39.1.2\\UASRDEV\\6.0-cute\\"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\CLSID\{35578409-F9F5-43e8-A6BD-8B77199ED854}]
@="QSRDev Class"
"AppID"="{C123476B-ABB6-4bcc-B557-2FDC0CDCD6A8}"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\CLSID\{35578409-F9F5-43e8-A6BD-8B77199ED854}\LocalServer32]
@="\"C:\\temp\\ua\\UA-SUITE\\391~1.2\\UASRDEV\\6BEB7~1.0-C\\UASRDEVS.EXE\""
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\CLSID\{35578409-F9F5-43e8-A6BD-8B77199ED854}\ProgID]
@="QSRDevice.QSRDev.1"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\CLSID\{35578409-F9F5-43e8-A6BD-8B77199ED854}\Programmable]
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\CLSID\{35578409-F9F5-43e8-A6BD-8B77199ED854}\TypeLib]
@="{CD886C7B-B61C-49cf-B3B8-90DB303A502A}"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\CLSID\{35578409-F9F5-43e8-A6BD-8B77199ED854}\VersionIndependentProgID]
@="QSRDevice.QSRDev"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\Interface\{17DCFB07-18A9-4FFE-B34D-37B91D809C41}]
@="_IQSRDevEvents"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\Interface\{17DCFB07-18A9-4FFE-B34D-37B91D809C41}\ProxyStubClsid32]
@="{00020420-0000-0000-C000-000000000046}"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\Interface\{17DCFB07-18A9-4FFE-B34D-37B91D809C41}\TypeLib]
@="{CD886C7B-B61C-49CF-B3B8-90DB303A502A}"
"Version"="1.0"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\Interface\{6B15E61A-381F-41E7-8B65-BA386473FE8C}]
@="IQSRDev"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\Interface\{6B15E61A-381F-41E7-8B65-BA386473FE8C}\ProxyStubClsid32]
@="{00020424-0000-0000-C000-000000000046}"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\Interface\{6B15E61A-381F-41E7-8B65-BA386473FE8C}\TypeLib]
@="{CD886C7B-B61C-49CF-B3B8-90DB303A502A}"
"Version"="1.0"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\TypeLib\{CD886C7B-B61C-49CF-B3B8-90DB303A502A}]
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\TypeLib\{CD886C7B-B61C-49CF-B3B8-90DB303A502A}\1.0]
@="QSRDevice 1.0 Type Library"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\TypeLib\{CD886C7B-B61C-49CF-B3B8-90DB303A502A}\1.0\0]
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\TypeLib\{CD886C7B-B61C-49CF-B3B8-90DB303A502A}\1.0\0\win32]
@="C:\\temp\\ua\\UA-SUITE\\39.1.2\\UASRDEV\\6.0-cute\\UASRDEVS.EXE"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\TypeLib\{CD886C7B-B61C-49CF-B3B8-90DB303A502A}\1.0\FLAGS]
@="0"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\TypeLib\{CD886C7B-B61C-49CF-B3B8-90DB303A502A}\1.0\HELPDIR]
@="C:\\temp\\ua\\UA-SUITE\\39.1.2\\UASRDEV\\6.0-cute\\"

View File

@ -147,23 +147,18 @@ try {
} }
$progId = "$versionIndependentProgId.1"; $progId = "$versionIndependentProgId.1";
$proxyStubClsid = '00020420-0000-0000-C000-000000000046' $proxyStubClsid32 = '00020420-0000-0000-C000-000000000046'
$proxyStubClsid32 = $proxyStubClsid
$typeLibVersion = '1.0' $typeLibVersion = '1.0'
if ($env:PROCESSOR_ARCHITECTURE -eq 'AMD64') { function Get-ClsidKeys {
$architectureSeparator = '\Wow6432Node' param(
} else { [Parameter(Mandatory=$true)]
$architectureSeparator = '\' [string]
} $architectureNode
)
$template = New-Object System.Collections.Generic.List[System.Object]; return @(
# CLSID keys
$template.AddRange(
@(
@{ @{
Key = "$($registryHive):\SOFTWARE\Classes$($architectureSeparator)\CLSID\{$clsid}" Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)CLSID\{$clsid}"
Values = @( Values = @(
@{ @{
Name = '(default)' Name = '(default)'
@ -176,7 +171,7 @@ $template.AddRange(
) )
}, },
@{ @{
Key = "$($registryHive):\SOFTWARE\Classes$($architectureSeparator)\CLSID\{$clsid}\LocalServer32" Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)CLSID\{$clsid}\LocalServer32"
Values = @( Values = @(
@{ @{
Name = '(default)' Name = '(default)'
@ -185,7 +180,7 @@ $template.AddRange(
) )
}, },
@{ @{
Key = "$($registryHive):\SOFTWARE\Classes$($architectureSeparator)\CLSID\{$clsid}\ProgID" Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)CLSID\{$clsid}\ProgID"
Values = @( Values = @(
@{ @{
Name = '(default)' Name = '(default)'
@ -194,11 +189,11 @@ $template.AddRange(
) )
}, },
@{ @{
Key = "$($registryHive):\SOFTWARE\Classes$($architectureSeparator)\CLSID\{$clsid}\Programmable" Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)CLSID\{$clsid}\Programmable"
Values = @() Values = @()
}, },
@{ @{
Key = "$($registryHive):\SOFTWARE\Classes$($architectureSeparator)\CLSID\{$clsid}\TypeLib" Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)CLSID\{$clsid}\TypeLib"
Values = @( Values = @(
@{ @{
Name = '(default)' Name = '(default)'
@ -207,17 +202,21 @@ $template.AddRange(
) )
}, },
@{ @{
Key = "$($registryHive):\SOFTWARE\Classes$($architectureSeparator)\CLSID\{$clsid}\VersionIndependentProgID" Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)CLSID\{$clsid}\VersionIndependentProgID"
Values = @() Values = @()
} }
) )
); }
# Interface keys function Get-InterfaceKeys {
$template.AddRange( param(
@( [Parameter(Mandatory=$true)]
[string]
$architectureNode
)
return @(
@{ @{
Key = "$($registryHive):\SOFTWARE\Classes$($architectureSeparator)\Interface\{$interfaceId}" Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)Interface\{$interfaceId}"
Values = @( Values = @(
@{ @{
Name = '(default)' Name = '(default)'
@ -226,25 +225,16 @@ $template.AddRange(
) )
}, },
@{ @{
Key = "$($registryHive):\SOFTWARE\Classes$($architectureSeparator)\Interface\{$interfaceId}\ProxyStubClsid" Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)Interface\{$interfaceId}\ProxyStubClsid32"
Values = @( Values = @(
@{ @{
Name = '(default)' Name = '(default)'
Value = "{$proxyStubClsid}" Value = "{$proxyStubClsid32}"
} }
) )
}, },
@{ @{
Key = "$($registryHive):\SOFTWARE\Classes$($architectureSeparator)\Interface\{$interfaceId}\ProxyStubClsid32" Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)Interface\{$interfaceId}\TypeLib"
Values = @(
@{
Name = '(default)'
Value = "{$proxyStubClsid}"
}
)
},
@{
Key = "$($registryHive):\SOFTWARE\Classes$($architectureSeparator)\Interface\{$interfaceId}\TypeLib"
Values = @( Values = @(
@{ @{
Name = '(default)' Name = '(default)'
@ -256,7 +246,7 @@ $template.AddRange(
) )
}, },
@{ @{
Key = "$($registryHive):\SOFTWARE\Classes$($architectureSeparator)\Interface\{$eventInterfaceId}" Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)Interface\{$eventInterfaceId}"
Values = @( Values = @(
@{ @{
Name = '(default)' Name = '(default)'
@ -265,16 +255,7 @@ $template.AddRange(
) )
}, },
@{ @{
Key = "$($registryHive):\SOFTWARE\Classes$($architectureSeparator)\Interface\{$eventInterfaceId}\ProxyStubClsid" Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)Interface\{$eventInterfaceId}\ProxyStubClsid32"
Values = @(
@{
Name = '(default)'
Value = "{$proxyStubClsid}"
}
)
},
@{
Key = "$($registryHive):\SOFTWARE\Classes$($architectureSeparator)\Interface\{$eventInterfaceId}\ProxyStubClsid32"
Values = @( Values = @(
@{ @{
Name = '(default)' Name = '(default)'
@ -283,7 +264,7 @@ $template.AddRange(
) )
}, },
@{ @{
Key = "$($registryHive):\SOFTWARE\Classes$($architectureSeparator)\Interface\{$eventInterfaceId}\TypeLib" Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)Interface\{$eventInterfaceId}\TypeLib"
Values = @( Values = @(
@{ @{
Name = '(default)' Name = '(default)'
@ -296,11 +277,10 @@ $template.AddRange(
) )
} }
) )
) }
# Prog ID keys function Get-ProgIdKeys {
$template.AddRange( return @(
@(
@{ @{
Key = "$($registryHive):\SOFTWARE\Classes\$progId" Key = "$($registryHive):\SOFTWARE\Classes\$progId"
Values = @( Values = @(
@ -347,97 +327,407 @@ $template.AddRange(
) )
} }
) )
)
# TypeLib keys (add to both standard and Wow6432Node if architecture is x64)
if ($architectureSeparator -eq '\') {
$typeLibIterations = 1
} else {
$typeLibIterations = 2
}
for ($i = 0; $i -lt $typeLibIterations; $i++) {
if ($i -eq 1) {
$architectureSeparator = '\'
}
$template.AddRange(
@(
@{
Key = "$($registryHive):\SOFTWARE\Classes$($architectureSeparator)\TypeLib\{$typeLibId}"
Values = @()
},
@{
Key = "$($registryHive):\SOFTWARE\Classes$($architectureSeparator)\TypeLib\{$typeLibId}\$typeLibVersion"
Values = @(
@{
Name = '(default)'
Value = $typeLibLabel
}
)
},
@{
Key = "$($registryHive):\SOFTWARE\Classes$($architectureSeparator)\TypeLib\{$typeLibId}\$typeLibVersion\0"
Values = @()
},
@{
Key = "$($registryHive):\SOFTWARE\Classes$($architectureSeparator)\TypeLib\{$typeLibId}\$typeLibVersion\0\win32"
Values = @(
@{
Name = '(default)'
Value = $comServerNetworkPath
}
)
},
@{
Key = "$($registryHive):\SOFTWARE\Classes$($architectureSeparator)\TypeLib\{$typeLibId}\$typeLibVersion\FLAGS"
Values = @(
@{
Name = '(default)'
Value = '0'
}
)
},
@{
Key = "$($registryHive):\SOFTWARE\Classes$($architectureSeparator)\TypeLib\{$typeLibId}\$typeLibVersion\HELPDIR"
Values = @(
@{
Name = '(default)'
Value = "$comServerDir\"
}
)
}
)
)
} }
function DoAction { function Get-TypeLibKeys {
param( param(
[Parameter(Mandatory=$true)] [Parameter(Mandatory=$true)]
[array] [string]
$template $architectureNode
) )
foreach ($keyEl in $template) { return @(
if ($action -eq 'import') { @{
#Write-Debug $keyEl.Key Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)TypeLib\{$typeLibId}"
Values = @()
},
@{
Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)TypeLib\{$typeLibId}\$typeLibVersion"
Values = @(
@{
Name = '(default)'
Value = $typeLibLabel
}
)
},
@{
Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)TypeLib\{$typeLibId}\$typeLibVersion\0"
Values = @()
},
@{
Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)TypeLib\{$typeLibId}\$typeLibVersion\0\win32"
Values = @(
@{
Name = '(default)'
Value = $comServerNetworkPath
}
)
},
@{
Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)TypeLib\{$typeLibId}\$typeLibVersion\FLAGS"
Values = @(
@{
Name = '(default)'
Value = '0'
}
)
},
@{
Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)TypeLib\{$typeLibId}\$typeLibVersion\HELPDIR"
Values = @(
@{
Name = '(default)'
Value = "$comServerDir\"
}
)
}
)
}
# $template = New-Object System.Collections.Generic.List[System.Object];
# # CLSID keys
# $template.AddRange(
# @(
# @{
# Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)\CLSID\{$clsid}"
# Values = @(
# @{
# Name = '(default)'
# Value = $classLabel
# },
# @{
# Name = 'AppID'
# Value = "{$appId}"
# }
# )
# },
# @{
# Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)\CLSID\{$clsid}\LocalServer32"
# Values = @(
# @{
# Name = '(default)'
# Value = $comServerPath
# }
# )
# },
# @{
# Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)\CLSID\{$clsid}\ProgID"
# Values = @(
# @{
# Name = '(default)'
# Value = $progId
# }
# )
# },
# @{
# Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)\CLSID\{$clsid}\Programmable"
# Values = @()
# },
# @{
# Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)\CLSID\{$clsid}\TypeLib"
# Values = @(
# @{
# Name = '(default)'
# Value = $typeLibId
# }
# )
# },
# @{
# Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)\CLSID\{$clsid}\VersionIndependentProgID"
# Values = @()
# }
# )
# );
# # Interface keys
# $template.AddRange(
# @(
# @{
# Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)\Interface\{$interfaceId}"
# Values = @(
# @{
# Name = '(default)'
# Value = $interfaceName
# }
# )
# },
# @{
# Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)\Interface\{$interfaceId}\ProxyStubClsid"
# Values = @(
# @{
# Name = '(default)'
# Value = "{$proxyStubClsid}"
# }
# )
# },
# @{
# Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)\Interface\{$interfaceId}\ProxyStubClsid32"
# Values = @(
# @{
# Name = '(default)'
# Value = "{$proxyStubClsid}"
# }
# )
# },
# @{
# Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)\Interface\{$interfaceId}\TypeLib"
# Values = @(
# @{
# Name = '(default)'
# Value = "{$typeLibId}"
# },
# @{
# Name = 'Version'
# Value = $typeLibVersion }
# )
# },
# @{
# Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)\Interface\{$eventInterfaceId}"
# Values = @(
# @{
# Name = '(default)'
# Value = $eventInterfaceName
# }
# )
# },
# @{
# Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)\Interface\{$eventInterfaceId}\ProxyStubClsid"
# Values = @(
# @{
# Name = '(default)'
# Value = "{$proxyStubClsid}"
# }
# )
# },
# @{
# Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)\Interface\{$eventInterfaceId}\ProxyStubClsid32"
# Values = @(
# @{
# Name = '(default)'
# Value = "{$proxyStubClsid32}"
# }
# )
# },
# @{
# Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)\Interface\{$eventInterfaceId}\TypeLib"
# Values = @(
# @{
# Name = '(default)'
# Value = "{$typeLibId}"
# }
# @{
# Name = 'Version'
# Value = $typeLibVersion
# }
# )
# }
# )
# )
# # Prog ID keys
# $template.AddRange(
# @(
# @{
# Key = "$($registryHive):\SOFTWARE\Classes\$progId"
# Values = @(
# @{
# Name = '(default)'
# Value = $classLabel
# }
# )
# },
# @{
# Key = "$($registryHive):\SOFTWARE\Classes\$progId\CLSID"
# Values = @(
# @{
# Name = '(default)'
# Value = "{$clsid}"
# }
# )
# },
# @{
# Key = "$($registryHive):\SOFTWARE\Classes\$progId\CurVer"
# Values = @(
# @{
# Name = '(default)'
# Value = $versionIndependentProgId
# }
# )
# },
# @{
# Key = "$($registryHive):\SOFTWARE\Classes\$versionIndependentProgId"
# Values = @(
# @{
# Name = '(default)'
# Value = $classLabel
# }
# )
# },
# @{
# Key = "$($registryHive):\SOFTWARE\Classes\$versionIndependentProgId\CLSID"
# Values = @(
# @{
# Name = '(default)'
# Value = "{$clsid}"
# }
# )
# }
# )
# )
# # TypeLib keys (add to both standard and Wow6432Node if architecture is x64)
# if ($architectureNode -eq '\') {
# $typeLibIterations = 1
# } else {
# $typeLibIterations = 2
# }
# for ($i = 0; $i -lt $typeLibIterations; $i++) {
# if ($i -eq 1) {
# $architectureNode = '\'
# }
# $template.AddRange(
# @(
# @{
# Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)\TypeLib\{$typeLibId}"
# Values = @()
# },
# @{
# Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)\TypeLib\{$typeLibId}\$typeLibVersion"
# Values = @(
# @{
# Name = '(default)'
# Value = $typeLibLabel
# }
# )
# },
# @{
# Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)\TypeLib\{$typeLibId}\$typeLibVersion\0"
# Values = @()
# },
# @{
# Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)\TypeLib\{$typeLibId}\$typeLibVersion\0\win32"
# Values = @(
# @{
# Name = '(default)'
# Value = $comServerNetworkPath
# }
# )
# },
# @{
# Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)\TypeLib\{$typeLibId}\$typeLibVersion\FLAGS"
# Values = @(
# @{
# Name = '(default)'
# Value = '0'
# }
# )
# },
# @{
# Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)\TypeLib\{$typeLibId}\$typeLibVersion\HELPDIR"
# Values = @(
# @{
# Name = '(default)'
# Value = "$comServerDir\"
# }
# )
# }
# )
# )
# }
function Get-Keys {
param(
[Parameter(Mandatory=$false)]
[switch]
$bothArchitectures = $false
)
if ($env:PROCESSOR_ARCHITECTURE -eq 'AMD64') {
$wow6432Node = '\Wow6432Node\'
} else {
$wow6432Node = '\'
}
$keys = New-Object System.Collections.Generic.List[System.Object]
$keys.AddRange((Get-ProgIdKeys))
$keys.AddRange((Get-ClsidKeys -architectureNode $wow6432Node))
$keys.AddRange((Get-InterfaceKeys -architectureNode $wow6432Node))
$keys.AddRange((Get-TypeLibKeys -architectureNode $wow6432Node))
if ($wow6432Node -ne '\') {
if ($bothArchitectures) {
$keys.AddRange((Get-ClsidKeys -architectureNode $wow6432Node))
}
$keys.AddRange((Get-InterfaceKeys -architectureNode '\'))
$keys.AddRange((Get-TypeLibKeys -architectureNode '\'))
}
return $keys
}
switch ($action) {
'delete' {
$keys = Get-Keys -bothArchitectures
foreach ($key in $keys) {
try { try {
$key = New-Item -Path $keyEl.Key -Force Write-Debug "Deleting key: $($key.Key)"
Write-Host "Created registry key: $($key.PSPath)" # Remove-Item -Path $key.Key -Recurse -Force
# Write-Host "Deleted registry key: $($key.Key)"
} }
catch { catch {
Write-Error "Failed to create registry key: $($keyEl.Key)" Write-Error "Failed to delete key: $($key.Key)"
continue continue
} }
foreach ($valueEl in $keyEl.Values) { }
}
'import' {
$keys = Get-Keys
foreach ($key in $keys) {
try {
Write-Debug "Importing key: $($key.Key)"
# $newKey = New-Item -Path $keyEl.Key -Force
# Write-Host "Created registry key: $($newKey.PSPath)"
}
catch {
Write-Error "Failed to create key: $($key.Key)"
continue
}
foreach ($value in $key.Values) {
try { try {
New-ItemProperty -Path $keyEl.Key -Name $valueEl.Name -Value $valueEl.Value -PropertyType 'String' -Force Write-Debug "Importing value: $($value.Name):$($value.Value)"
Write-Host "Created registry value: $($valueEl.Name) in $($keyEl.Key)" #New-ItemProperty -Path $key.Key -Name $value.Name -Value $value.Value -PropertyType 'String' -Force
#Write-Host "Created registry value: $($value.Name) in $($key.Key)"
} }
catch { catch {
Write-Error "Failed to create registry value: $($valueEl.Name) in $($keyEl.Key)" Write-Error "Failed to create registry value: $($value.Name) in $($key.Key)"
continue
}
}
}
}
default {
$keys = Get-Keys -bothArchitectures
foreach ($key in $keys) {
try {
Write-Debug "Querying key: $($key.Key)"
# $key = Get-Item -Path $keyEl.Key -ErrorAction Stop
$foundKey = Get-Item -Path $key.Key -ErrorAction Stop
Write-Host "[$($foundKey.Key)]"
}
catch {
Write-Debug "Failed to find registry key: $($key.Key)"
continue
}
foreach ($value in $foundKey.Values) {
try {
# $foundValue = Get-ItemPropertyValue -Path $key.Key -Name $value.Name -ErrorAction Stop
#$foundValue = Get-ItemPropertyValue -Path $key.Key -Name $value.Name -ErrorAction Stop
Write-Host "$($foundValue.Name)=$($foundValue.Value)"
}
catch {
Write-Debug "Failed to find registry value: $($valueEl.Name) in $($key.Key)"
continue continue
} }
} }
} }
} }
} }
DoAction $template