powershell PowerShell:将GUID转换为Packed / Compressed

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了powershell PowerShell:将GUID转换为Packed / Compressed相关的知识,希望对你有一定的参考价值。

function Convert-GuidToCompressedGuid {
	<#
	.SYNOPSIS
		This converts a GUID to a compressed GUID also known as a product code.	
	.DESCRIPTION
		This function will typically be used to figure out the product code
		that matches up with the product code stored in the 'SOFTWARE\Classes\Installer\Products'
		registry path to a MSI installer GUID.
	.EXAMPLE
		Convert-GuidToCompressedGuid -Guid '{7C6F0282-3DCD-4A80-95AC-BB298E821C44}'
	
		This example would output the compressed GUID '2820F6C7DCD308A459CABB92E828C144'
	.PARAMETER Guid
		The GUID you'd like to convert.
	.LINK http://www.adamtheautomator.com/compressed-guid-with-powershell/
	#>
	[CmdletBinding()]
	[OutputType()]
	param (
		[Parameter(ValueFromPipeline, ValueFromPipelineByPropertyName, Mandatory)]
		[string]$Guid
	)
	begin {
		$Guid = $Guid.Replace('-', '').Replace('{', '').Replace('}', '')
	}
	process {
		try {
			$Groups = @(
				$Guid.Substring(0, 8).ToCharArray(),
				$Guid.Substring(8, 4).ToCharArray(),
				$Guid.Substring(12, 4).ToCharArray(),
				$Guid.Substring(16, 16).ToCharArray()
			)
			$Groups[0..2] | foreach {
				[array]::Reverse($_)
			}
			$CompressedGuid = ($Groups[0..2] | foreach { $_ -join '' }) -join ''
			
			$chararr = $Groups[3]
			for ($i = 0; $i -lt $chararr.count; $i++) {
				if (($i % 2) -eq 0) {
					$CompressedGuid += ($chararr[$i+1] + $chararr[$i]) -join ''
				}
			}
			$CompressedGuid
		} catch {
			Write-Error $_.Exception.Message	
		}
	}
}
function Convert-CompressedGuidToGuid {
   <#
	.SYNOPSIS
		This converts a compressed GUID also known as a product code into a GUID.	
	.DESCRIPTION
		This function will typically be used to figure out the MSI installer GUID
		that matches up with the product code stored in the 'SOFTWARE\Classes\Installer\Products'
		registry path.
	.EXAMPLE
		Convert-CompressedGuidToGuid -CompressedGuid '2820F6C7DCD308A459CABB92E828C144'
	
		This example would output the GUID '{7C6F0282-3DCD-4A80-95AC-BB298E821C44}'
	.PARAMETER CompressedGuid
		The compressed GUID you'd like to convert.
	#>
	[CmdletBinding()]
	[OutputType([System.String])]
	param (
		[Parameter(ValueFromPipeline, ValueFromPipelineByPropertyName, Mandatory)]
		[ValidatePattern('^[0-9a-fA-F]{32}$')]
		[string]$CompressedGuid
	)
	process {
		$Indexes = [ordered]@{
			0 = 8;
			8 = 4;
			12 = 4;
			16 = 2;
			18 = 2;
			20 = 2;
			22 = 2;
			24 = 2;
			26 = 2;
			28 = 2;
			30 = 2
		}
		$Guid = '{'
		foreach ($index in $Indexes.GetEnumerator()) {
			$part = $CompressedGuid.Substring($index.Key, $index.Value).ToCharArray()
			[array]::Reverse($part)
			$Guid += $part -join ''
		}
		$Guid = $Guid.Insert(9,'-').Insert(14, '-').Insert(19, '-').Insert(24, '-')
		$Guid + '}'
	}
}

以上是关于powershell PowerShell:将GUID转换为Packed / Compressed的主要内容,如果未能解决你的问题,请参考以下文章

powershell 从powershell将数据插入表中

powershell PowerShell:将Windows事件另存为XML

powershell PowerShell:将GUID转换为Packed / Compressed

powershell 使用PowerShell将JSON转换为CSV格式

powershell PowerShell:将WMI日期/时间转换为DateTime

powershell 使用PowerShell将JSON转换为CSV格式