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 :
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 :
$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.