es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Obteniendo un error al ejecutar un script de PowerShell desde PowerShell.

Estoy obteniendo el siguiente error al ejecutar el siguiente código:
Código:

$localScriptPath= “C:\AshishG\powershell\script12.ps1”
$ëncodedResonse = “77u/V3JpdGUtSG9zdCAnc2NyaXB0IGlzIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseScNCg0KcmV0dXJuICdUaGlzIGlzIHNjcmlwdCBvdXRwdXQn”
Write-Output “ëncodedResonse used is $ëncodedResonse”

[System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($ëncodedResonse)) | Out-File $localScriptPath -Force
$Content2 = get-content $localScriptPath
Write-Host “DECODED: ” $Content2

$output =Invoke-Expression “"$localScriptPath“”
Write-Host “scriptPath” used is $output

Explicación del código:
1. Asigna la ruta del script a una variable.
2. Asigna la cadena codificada a una variable.
3. Decodifica la cadena y la copia en un archivo.
4. Ejecuta el script PowerShell y obtiene el error.

Error:

Write-Host : El término ‘Write-Host’ no se reconoce como el nombre de un cmdlet, función, archivo de script o programa operable. Comprueba la ortografía del
nombre o, si se incluyó una ruta de acceso, comprueba que la ruta de acceso es correcta e inténtalo de nuevo.
En C:\AshishG\powershell\script12.ps1:1 caracter:1
+ Write-Host ‘script is executed successfully’
+ ~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (Write-Host:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException

Por favor, vea los siguientes puntos.
1. Estoy obteniendo el error al ejecutar el script de PowerShell (C:\AshishG\powershell\script12.ps1).
2. La cadena está en formato codificado y puedo decodificarla y veo que la cadena decodificada también es correcta.
3. Observo que el script12.ps1 está generado en formato UTF-16 LE BOM. ¿Está generando el problema?

He escrito el código completo porque no estoy seguro cuál es el problema.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que el problema está en el uso del comando ‘Write-Host’ en el script que se está llamando ($localScriptPath). ‘Write-Host’ no es reconocido como un cmdlet en algunas versiones de PowerShell, incluyendo PowerShell Core 6.0 y superiores.

    Para solucionar esto, puedes reemplazar ‘Write-Host’ por ‘Write-Output’ en el script que se está llamando.

    Además, es posible que el formato UTF-16 LE BOM del script generado ($localScriptPath) esté causando problemas. Puedes intentar cambiar la codificación del script generado a UTF-8 sin BOM utilizando el cmdlet ‘Set-Content’ en lugar de ‘Out-File’ en la línea 4.

    Código con los cambios sugeridos:

    $localScriptPath= "C:\AshishG\powershell\script12.ps1"
    $encodedResponse = "77u/V3JpdGUtSG9zdCAnc2NyaXB0IGlzIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseScNCg0KcmV0dXJuICdUaGlzIGlzIHNjcmlwdCBvdXRwdXQn"
    Write-Output "Se utiliza encodedResponse $encodedResponse"
    
    [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($encodedResponse)) | Set-Content -Path $localScriptPath -Encoding UTF8
    $Content2 = Get-Content -Path $localScriptPath
    Write-Output "DECODIFICADO: $Content2"
    
    $output = Invoke-Expression "& `"$localScriptPath`""
    Write-Output "Se utiliza scriptPath $output"
    

Comments are closed.