elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Powershell no toma los datos correctamente.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Powershell no toma los datos correctamente.  (Leído 791 veces)
**Aincrad**


Desconectado Desconectado

Mensajes: 682



Ver Perfil WWW
Powershell no toma los datos correctamente.
« en: 22 Agosto 2024, 22:56 pm »

Hola tengo un problema , que ni con IA he podido solucionar, el siguiente codigo lo hice para obtener los diferentes usuarios de diferentes distribuciones WSL , en powershell :

Código
  1.  
  2. function Invoke-CmdCommand {
  3.    param (
  4.        [string]$Command
  5.    )
  6.    Write-Host "Command: $Command"
  7.    # Configurar el proceso
  8.    $process = New-Object System.Diagnostics.Process
  9.    $process.StartInfo.FileName = "cmd.exe"
  10.    $process.StartInfo.Arguments = "/c $Command"
  11.    $process.StartInfo.RedirectStandardOutput = $true
  12.    $process.StartInfo.RedirectStandardError = $true
  13.    $process.StartInfo.UseShellExecute = $false
  14.    $process.StartInfo.CreateNoWindow = $true  # Ocultar la ventana del proceso
  15.  
  16.    # Iniciar el proceso
  17.    $process.Start() | Out-Null
  18.  
  19.    # Capturar la salida y el error
  20.    $output = $process.StandardOutput.ReadToEnd()
  21.    #$errors = $process.StandardError.ReadToEnd()
  22.  
  23.    # Esperar a que el proceso termine
  24.    $process.WaitForExit()
  25.  
  26.    # Comprobar si hay errores y manejar la salida
  27.    #if ($process.ExitCode -ne 0) {
  28.    #    throw "El comando falló con el código de salida $($process.ExitCode). Error: $errors"
  29.    #}
  30.  
  31.    return $output
  32. }
  33.  
  34. function IsWSLInstalled {
  35.    $wslStatus = wsl --list --verbose 2>&1
  36.    if ($wslStatus -match "The term 'wsl' is not recognized") {
  37.        return $false
  38.    }
  39.    return $true
  40. }
  41.  
  42. function GetWSL {
  43.    # Get the list of WSL instances
  44.    $wslInstances = wsl --list --quiet | Where-Object { $_ -ne '' }
  45.    Write-Host "WSL instances: $($wslInstances -join ', ')"
  46.  
  47.    # Select instance using Out-GridView
  48.    $selectedInstance = $wslInstances | Out-GridView -Title "Select WSL Instance" -PassThru
  49.    if (-not $selectedInstance) {
  50.        Write-Error "No WSL instance selected."
  51.        return $null
  52.    }
  53.  
  54.    return $selectedInstance
  55. }
  56.  
  57. function Main {
  58.    # Check if WSL is installed
  59.    if (-not (IsWSLInstalled)) {
  60.        Write-Error "WSL is not installed. Please install WSL to proceed."
  61.        exit
  62.    }
  63.  
  64.    # Call the GetWSL function
  65.    $instance = Read-Host "Enter the name of the WSL instance" #GetWSL
  66.  
  67.    # Check if an instance was selected
  68.    if ($null -eq $instance) {
  69.        Write-Error "No WSL instance was selected."
  70.        exit
  71.    }
  72.    else {
  73.        Write-Host "Selected WSL instance: $instance"
  74.    }
  75.  
  76.    try {
  77.        $wslHomeCommand = "ls -d /home/*"  
  78.        $command = "wsl -d $instance -- bash -c `"$wslHomeCommand`""
  79.        $Users = Invoke-CmdCommand -Command $command
  80.        Write-Host "Output: $Users"
  81.        Read-Host "Press Enter to exit"
  82.    }
  83.    catch {
  84.        Write-Error "Error: $_"
  85.    }
  86. }
  87.  
  88. Main
  89.  
  90.  

bien el error lo tengo en esta parte del codigo :

Código
  1. $instance = Read-Host "Enter the name of the WSL instance" #GetWSL
  2.  

asi lo tengo para meter el nombre de la distribucion manualmente , en este caso yo introduzco "Ubuntu-20.04" el codigo funciona perfectamente.

pero si uso la funcion que comente : "GetWSL" el desplega la siguiente interfaz :



Se lecciono el primer item y he mostrado en consola el resultado , en este caso devuelve lo mismo que yo escribo manualmente  "Ubuntu-20.04" , pero en este caso , a pesar de que es el mismo string q yo escribo manualmente, por alguna razon me da este error : "No hay ninguna distribuci¾n con el nombre proporcionado."

Apesar de que los datos son los mismo , solo que en uno yo lo introduzco manualmente y en el otro lo selecciono con una UI, y he imprimido los datos introducidos en ambos casos y es : "Ubuntu-20.04" , por lo que deberia funcionar igualmente el script, pero no lo hace.

Agradeceria cualquier ayuda! gracias.



En línea



Danielㅤ


Desconectado Desconectado

Mensajes: 1.825


🔵🔵🔵🔵🔵🔵🔵


Ver Perfil
Re: Powershell no toma los datos correctamente.
« Respuesta #1 en: 23 Agosto 2024, 02:02 am »

Hola, interesante ese problema, yo en mis años de programador me he topado con ese mismo problema o casi igual, en éstos casos donde es muy rara la falla, que por alguna razón, existe ese problema, lo que vas a probar es lo siguiente.

Primero es hacer un print del tipo de variable dónde se guarda el item del combo box (desplegable) para asegurarte que realmente esa variable sea del tipo string y no por ejemplo un objeto, ésto lo tenés que hacer para estar bien seguro, por ejemplo print type(variableContenidoDesplegable);, las variables además de ser string's, también pueden ser del tipo objeto o similares y almacenar cadenas de texto.

Si probando eso comprobas que el valor del item del combo box es realmente un string, entonces vas a probar a depurarlo, es decir codificarlo en char/valor ASCII, te tiene que dar estos valores separados por espacio:

Código:
85 98 117 110 116 117 45 50 48 46 48 52 

Ya que esos valores son del texto Ubuntu-20.04, uno puede ver que los textos o el contenido son exactamente iguales, pero... por alguna razón puede haber algún símbolo o caracter no visible que puede estar en el texto, te lo digo porque me ha pasado, aquí hay unas páginas para obtener los valores ASCII:

https://www.browserling.com/tools/text-to-ascii

https://onlinestringtools.com/convert-string-to-ascii

Prueba lo anterior y nos comentas las novedades.


Saludos


« Última modificación: 23 Agosto 2024, 02:08 am por Danielㅤ » En línea

**Aincrad**


Desconectado Desconectado

Mensajes: 682



Ver Perfil WWW
Re: Powershell no toma los datos correctamente.
« Respuesta #2 en: 23 Agosto 2024, 17:36 pm »

Si parece que el problema era de caracteres invisibles, lo solucione añadiendo :

Código
  1. -replace '[^\x20-\x7E]', ''


a la funcion GetWSL , esto basicamente es:

-replace es un operador en PowerShell que se utiliza para buscar un patrón en una cadena y reemplazarlo con otro valor.

En este caso, el patrón de búsqueda es '[^\x20-\x7E]', que significa "cualquier carácter que no esté en el rango de códigos ASCII \x20 a \x7E".

Gracias por responder.  ;D
En línea



Danielㅤ


Desconectado Desconectado

Mensajes: 1.825


🔵🔵🔵🔵🔵🔵🔵


Ver Perfil
Re: Powershell no toma los datos correctamente.
« Respuesta #3 en: 23 Agosto 2024, 22:09 pm »

Muy bien compañero me alegro que lo hayas solucionado y de haberte ayudado.

Perfecto con ésta instrucción usando el operador de reemplazo:

Código
  1. -replace '[^\x20-\x7E]', ''

reemplazas ese caracter invisible, que al tener como valor de reemplazo nulo, entonces simplemente lo eliminas.


Saludos
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
No me lee correctamente datos de un archivo, ayuda!
Programación C/C++
k3r00t 4 3,030 Último mensaje 6 Julio 2011, 01:21 am
por rir3760
Conoce las compañías de Internet que cifran tus datos correctamente
Noticias
wolfbcn 0 1,426 Último mensaje 24 Noviembre 2013, 13:01 pm
por wolfbcn
C + Powershell
Programación C/C++
Poyoncio 7 4,709 Último mensaje 1 Agosto 2016, 20:30 pm
por JavierScars
Guardar datos correctamente en un archivo
Scripting
Meta 2 2,719 Último mensaje 11 Marzo 2022, 18:31 pm
por Serapis
[RESUELTO][PowerShell] Ejecución de código PowerShell dentro de archivo Batch
Scripting
reconFito 2 2,813 Último mensaje 23 Abril 2024, 07:06 am
por reconFito
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines