Código
function Invoke-CmdCommand { param ( [string]$Command ) Write-Host "Command: $Command" # Configurar el proceso $process = New-Object System.Diagnostics.Process $process.StartInfo.FileName = "cmd.exe" $process.StartInfo.Arguments = "/c $Command" $process.StartInfo.RedirectStandardOutput = $true $process.StartInfo.RedirectStandardError = $true $process.StartInfo.UseShellExecute = $false $process.StartInfo.CreateNoWindow = $true # Ocultar la ventana del proceso # Iniciar el proceso $process.Start() | Out-Null # Capturar la salida y el error $output = $process.StandardOutput.ReadToEnd() #$errors = $process.StandardError.ReadToEnd() # Esperar a que el proceso termine $process.WaitForExit() # Comprobar si hay errores y manejar la salida #if ($process.ExitCode -ne 0) { # throw "El comando falló con el código de salida $($process.ExitCode). Error: $errors" #} return $output } function IsWSLInstalled { $wslStatus = wsl --list --verbose 2>&1 if ($wslStatus -match "The term 'wsl' is not recognized") { return $false } return $true } function GetWSL { # Get the list of WSL instances $wslInstances = wsl --list --quiet | Where-Object { $_ -ne '' } Write-Host "WSL instances: $($wslInstances -join ', ')" # Select instance using Out-GridView $selectedInstance = $wslInstances | Out-GridView -Title "Select WSL Instance" -PassThru if (-not $selectedInstance) { Write-Error "No WSL instance selected." return $null } return $selectedInstance } function Main { # Check if WSL is installed if (-not (IsWSLInstalled)) { Write-Error "WSL is not installed. Please install WSL to proceed." exit } # Call the GetWSL function $instance = Read-Host "Enter the name of the WSL instance" #GetWSL # Check if an instance was selected if ($null -eq $instance) { Write-Error "No WSL instance was selected." exit } else { Write-Host "Selected WSL instance: $instance" } try { $wslHomeCommand = "ls -d /home/*" $command = "wsl -d $instance -- bash -c `"$wslHomeCommand`"" $Users = Invoke-CmdCommand -Command $command Write-Host "Output: $Users" Read-Host "Press Enter to exit" } catch { Write-Error "Error: $_" } } Main
bien el error lo tengo en esta parte del codigo :
Código
$instance = Read-Host "Enter the name of the WSL instance" #GetWSL
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.