> For the complete documentation index, see [llms.txt](https://docs.devolutions.net/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.devolutions.net/powershell-universal/es/automatizacion/scripts.md).

# Scripts

Cree y configure scripts de PowerShell en PowerShell Universal, con información sobre parámetros, credenciales de ejecución, ayuda basada en comentarios y estadísticas de trabajos.

Puede crear scripts de PowerShell en PowerShell Universal para ejecutarlos manualmente, según una programación o cuando se produzcan eventos dentro de la plataforma. Se almacenan en disco y se conservan en un repositorio Git local o remoto.

{% hint style="info" %}
El fichero de configuración `scripts.ps1` almacena las propiedades del script.
{% endhint %}

## Añadir un nuevo script

Para añadir un nuevo script, haga clic en el botón New Script en **Build > Scripts**. Existen varios ajustes que puede proporcionar para el script.

## Opciones del script

### **Name**

Este es el nombre del script tal como se muestra en Universal Automation. También es el nombre utilizado para conservar el script en disco. El nombre debe ser único dentro de la carpeta actual.

### Módulo y comando

Consulte [Módulos y comandos](#modules-and-commands) más abajo.

### **Description**

Esta descripción del script se muestra en varios lugares dentro de la interfaz de usuario de UA y la devuelven los cmdlets de Universal.

### **Disable Manual Invocation**

Esto impide que un script se ejecute manualmente. Se aplica tanto en la interfaz de usuario como en el servidor web y los cmdlets.

### **Max Job History**

El historial máximo de trabajos define la cantidad de trabajos almacenados al ejecutar este script. El valor predeterminado es 100. Los trabajos también se depuran según el ajuste de duración de retención de trabajos de todo el servidor, disponible en **Settings gear > Data**.

### **Error Action**

La acción de error cambia la forma en que el script reacciona cuando se produce un error. De forma predeterminada, los errores terminantes y no terminantes se ignoran y el script siempre se completa correctamente. Puede cambiar este ajuste a stop para que los scripts fallen inmediatamente cuando se produzca un error.

Si desea escribir errores directamente en el panel de errores sin provocar cambios en la forma en que se gestiona el script (por ejemplo, en un controlador de excepciones), utilice `Write-PSUError` para generar el registro de error, que aparecerá en la pestaña de errores del trabajo.

### **Environment**

Esto le permite definir el entorno de PowerShell necesario para el script. De forma predeterminada, utiliza el entorno de PowerShell predeterminado de todo el servidor. Los entornos de PowerShell se localizan automáticamente la primera vez que se inicia Universal Server o se leen del fichero `environments.ps1`. También puede añadir un entorno en **Manage > Environments > Environments**.

### **Timeout**

El número de minutos antes de que el script exceda el tiempo de espera. El valor predeterminado de 0 significa que el script se ejecutará indefinidamente. Cuando un script alcanza su tiempo de espera, se cancela.

### Descartar la canalización

Cuando está marcada, esta opción deshabilita el almacenamiento de la salida de la canalización. Esto reduce considerablemente la sobrecarga de CPU y de almacenamiento de los trabajos, pero el script sigue escribiendo en los flujos de información, advertencia y error.

### **Concurrent Jobs**

Define el número máximo de trabajos simultáneos con los que se puede ejecutar el script. El valor predeterminado es 100.

```powershell
New-PSUScript -Name Script.ps1 -Path Script.Ps1 -ConcurrentJobs 1
```

### Roles de ejecución

Mediante la propiedad Execution Roles, puede establecer qué roles se asignan durante la ejecución del script. De forma predeterminada, el script se ejecutará según los roles del llamante. En algunos escenarios, por ejemplo al utilizar secretos con roles, puede que desee proporcionar roles adicionales que el llamante no posea. Al ejecutar scripts en una programación, no tendrán ningún rol, por lo que proporcionarlos mediante Execution Roles permitirá utilizar variables de secreto con roles en el script programado.

## Ejecutar un script

Puede ejecutar un script en la interfaz de usuario desde **Build > Scripts** haciendo clic en Run o haciendo clic en View y luego en Run. En cada caso, aparece el diálogo Run, que le permite seleccionar varios ajustes para el trabajo.

### Ejecutar un script con parámetros

{% hint style="info" %}
Obtenga más información sobre los parámetros [aquí](/powershell-universal/es/automatizacion/scripts/parameters.md).
{% endhint %}

PowerShell Universal determina automáticamente los parámetros definidos en sus scripts. Aprovecha el análisis estático de código para determinar el tipo, los valores predeterminados y algunas validaciones que después se presentan en la interfaz de usuario.

Por ejemplo, puede tener un script con los siguientes parámetros:

```powershell
param(
    $Test,
    [DateTime]$Time, 
    [int]$Number,
    [PSCredential]$Credential,
    [System.ConsoleColor]$Color
)
```

El resultado es un conjunto de opciones de entrada basadas en los tipos de parámetros.

### Ejecutar un script como otro usuario

{% hint style="info" %}
El [entorno](/powershell-universal/es/config/environments.md) integrado no admite la ejecución con credenciales alternativas.
{% endhint %}

Puede ejecutar scripts como otro usuario configurando [variables de secreto](/powershell-universal/es/plataforma/variables.md#creating-a-secret-variable). PowerShell Universal utiliza el módulo Microsoft Secret Management para integrarse con proveedores de secretos. Consulte las variables para obtener más información sobre los secretos.

1. Cree una nueva variable de secreto PSCredential.

Abra **Manage > Variables & Secrets > Variables**, haga clic en Create Secret y seleccione el tipo de variable PSCredential. Introduzca el nombre de usuario y la contraseña. Asegúrese de que el valor Disable Run As Support esté desmarcado.

2. Ejecute el script y seleccione la credencial

Vuelva a **Build > Scripts** y haga clic en el botón Run Script. Seleccione un entorno distinto del entorno Integrated. De forma predeterminada, será PowerShell 7 o Windows PowerShell 5.1.

Ahora se le solicitará, mediante el menú desplegable Run As, que seleccione la credencial. Desde allí, puede seleccionar la credencial en el diálogo de ejecución.

### Ejecutar un script en otro ordenador

Puede utilizar el menú desplegable Computer para seleccionar otras máquinas en las que ejecutar un script. El valor predeterminado es ejecutarlo en cualquier ordenador disponible.

### Ejecutar un script en todos los ordenadores

Puede ejecutar un script en todos los ordenadores seleccionando la opción All Computers en el menú desplegable Computer.

### Ejecutar un script desde una aplicación con salida

Si desea ejecutar un script desde una aplicación y mostrar la salida a medida que se ejecuta, utilice el siguiente ejemplo. Aprovecha `Invoke-PSUScript` y `Get-PSUJobOutput`.

```powershell
New-UDButton -OnClick {
    $Job = Invoke-PSUScript -Name Script.ps1
    while($Job.Status -eq 'Running' -or $Job.Status -eq 'Queued')
    {
        [array]$Output = Get-PSUJobOutput -Job $Job
        $Job = Get-PSUJob -Id $Job.Id
        $Session:Code = $Output | ForEach-Object { 
            "$_`r`n"
        } | Join-String 
        Sync-UDElement -Id 'code'
        Start-Sleep -Seconds 1
    }
} -Text 'Run Script'

New-UDDynamic -Id 'code' -Content {
    if ($Session:Code)
    {
        New-UDSyntaxHighlighter -Code $Session:Code -Language batch
    }
}
```

### Equilibrio de carga

PowerShell Universal utiliza un algoritmo de equilibrio de carga basado en el servidor menos ocupado. Si más de un servidor es un destino válido para un trabajo, PowerShell Universal seleccionará el servidor con el menor número de trabajos en ejecución.

## Comunicación remota

Puede utilizar la comunicación remota de PowerShell aprovechando `Invoke-Command`. PowerShell Universal no admite el uso de `Enter-PSSession` ni de `Import-PSSession`.

## Ayuda basada en comentarios

Puede utilizar la ayuda basada en comentarios para definir la descripción, una sinopsis, la ayuda de los parámetros y enlaces para sus scripts. Estos elementos se mostrarán en la interfaz de usuario de PowerShell Universal.

```powershell
<#
.SYNOPSIS 

This is a script for pinging other computers. 

.DESCRIPTION

This script can ping other computers. 

.PARAMETER HostName

The host name or address to ping. 

.LINK
https://devolutions.net/powershell-universal/
#>
param($HostName)

Test-NetConnection $HostName
```

Lo anterior genera una interfaz de usuario en la que la sinopsis se muestra como la descripción breve y una descripción más larga se muestra en la sección de descripción. Los enlaces aparecen debajo de la descripción.

## Módulos y comandos

Los comandos y cmdlets incluidos en módulos pueden utilizarse como destino de los scripts, en lugar de escribir el script directamente.

Supongamos que tenemos un módulo llamado `PSUModule` que contiene la siguiente función.

```powershell
function Show-HelloWorld {
    param($Name)
    "Hello, $Name!"
}
```

Es posible exponer esta función como un script utilizando la siguiente sintaxis en `scripts.ps1`.

```powershell
New-PSUScript -Module 'PSUModule' -Command 'Show-HelloWorld'
```

La función aparece igual que otros scripts dentro de la consola de administración. Los parámetros, el texto de ayuda y otras funciones de PSU funcionan igual que con los scripts.

## Estadísticas

A partir del historial de trabajos de un script, PowerShell Universal proporcionará estadísticas básicas sobre su ejecución. Estas incluyen la tasa de éxito, el tiempo medio de ejecución y desgloses de la ejecución por entorno, usuario y ordenador.

## Compatibilidad con Start-Job

Aunque es posible iniciar trabajos mediante Invoke-PSUScript, puede que resulte conveniente iniciar un trabajo con el cmdlet Start-Job de PowerShell. El uso de Start-Job no registra el trabajo en PowerShell Universal y la información de ejecución no estará presente en la tabla de trabajos.

Los entornos Integrated, PowerShell 7 y Windows PowerShell 5.1 no son compatibles con Start-Job porque son hosts personalizados de PowerShell. Para utilizar Start-Job, deberá configurar un entorno de PowerShell personalizado. Abra **Manage > Environments > Environments**, haga clic en Create New Environment, seleccione el tipo de entorno Custom y especifique pwsh.exe como ruta del ejecutable.

Ahora podrá utilizar este entorno para ejecutar el cmdlet Start-Job.

## API

* [New-PSUScript](/powershell-universal/es/comandos-de-powershell/new-psuscript.md)
* [Remove-PSUScript](/powershell-universal/es/comandos-de-powershell/remove-psuscript.md)
* [Set-PSUScript](/powershell-universal/es/comandos-de-powershell/set-psuscript.md)
* [Get-PSUScript](/powershell-universal/es/comandos-de-powershell/get-psuscript.md)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.devolutions.net/powershell-universal/es/automatizacion/scripts.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
