Parece que no puedo hacer que [Microsoft.Win32.RegistryValueKind]::TryParse funcione correctamente. Cada solución que intento siempre devuelve Cannot find an overload for "TryParse" and the argument count: "2". (or "3") a pesar de que muestra lo siguiente.
PS C:\Windows\system32> [Microsoft.Win32.RegistryValueKind]::TryParse OverloadDefinitions ------------------- static bool TryParse[TEnum](string value, [ref] TEnum result) static bool TryParse[TEnum](string value, bool ignoreCase, [ref] TEnum result)En mi experiencia, cualquiera de los siguientes normalmente debería funcionar bien.
[Microsoft.Win32.RegistryValueKind]::TryParse('dword',[ref]$Null) [Microsoft.Win32.RegistryValueKind]::TryParse('dword',$true,[ref]$Null) Mientras tanto, puedo convertir la cadena como [Microsoft.Win32.RegistryValueKind] pero tengo curiosidad por saber qué estoy haciendo mal.
El método [Microsoft.Win32.RegistryValueKind]::TryParse() por sí solo devolverá $true o $false , dependiendo de si el análisis se realizó correctamente o no.
$true para que funcione sin distinción entre mayúsculas y minúsculas en el valor de cadena dado.ejemplo:
[Microsoft.Win32.RegistryValueKind]::TryParse('12345', [ref][Microsoft.Win32.RegistryValueKind]::DWord)devuelve True porque '12345' se puede convertir en un tipo de valor DWord entero.
También puede leer el valor analizado de esta manera
$result = [Microsoft.Win32.RegistryValueKind]::DWord # 4 if ([Microsoft.Win32.RegistryValueKind]::TryParse('12345', [ref]$result)) { Write-Host "The value can be stored as $result (DWord)" }De todos modos, si su intención es leer los valores del registro y tratar de determinar si el RegistryKind de esa entrada es correcto, creo que el método RegistryKey.GetValueKind() sería más fácil de usar.
TryParse en realidad está implementado por System.Enum y es un método genérico. Devuelve un bool si el análisis tuvo éxito, y el segundo parámetro es una out con el resultado real del análisis.
Tiene una serie de problemas si desea utilizar TryParse .
En primer lugar, no puede llamar a un método genérico directamente en Powershell a menos que esté usando PS 7.3 o superior
[System.Enum]::TryParse<Microsoft.Win32.RegistryValueKind>('DWord', [ref]$prm) Para las versiones de Powershell que usan .Net Core o .Net 5 (no sé si hay alguno), también puede usar la versión no genérica de TryParse
[System.Enum]::TryParse([Microsoft.Win32.RegistryValueKind], 'DWord', [ref]$prm)Sea como fuere, en versiones anteriores es necesario utilizar la reflexión.
$arrParams = @('DWord', $null) $method = ([System.Enum].GetMethods() | where {($_.Name -eq "TryParse") -and ($_.GetParameters().Length -eq 2) })[0].MakeGenericMethod(@([Microsoft.Win32.RegistryValueKind])) $method.Invoke($null, $arrParams); $arrParams[1] Tenga en cuenta que el parámetro de cadena distingue entre mayúsculas y minúsculas y, por lo tanto, debe ser 'DWord'