Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

329
Views
Cómo utilizar [Microsoft.Win32.RegistryValueKind]::TryParse

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.

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

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.

  • El primer parámetro es el valor de cadena que desea analizar convertido a uno de los tipos de enumeración RegistryValueKind .
  • El último parámetro es la variable que contiene el tipo de elección RegistryValueKind.
    Luego, el método intenta convertir el valor de cadena dado a ese tipo de registro.
  • Opcionalmente, hay una sobrecarga con un segundo parámetro en el medio que puede establecer en $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.

over 4 years ago · Santiago Trujillo Report

0

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'

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!