# Entrenamiento de PowerShell

PowerShell es un poderoso lenguaje de scripting y una consola de comandos versátil, ampliamente utilizada para automatizar y simplificar tareas en el entorno de Windows. Las expresiones en las propiedades de los bloques de Sherpa Designer se escriben en un lenguaje modificado de PowerShell y los propios bloques (su código interno) están escritos en PowerShell. Para el uso No-Code (sin código) de Sherpa Designer, no se requiere conocimiento del lenguaje PowerShell. Sin embargo, para un enfoque Low-Code, es deseable dominar algunos conocimientos básicos de este lenguaje, lo que le permitirá crear diagramas más concisos y resolver tareas no estándar.

***

## 1. Fundamentos de PowerShell y comparación con C# y VB

PowerShell cuenta con un rico conjunto de herramientas para trabajar con objetos y sus métodos. Permite trabajar con todas las clases y métodos de Microsoft .NET Framework. La diferencia entre el uso de PowerShell y otros lenguajes de programación .NET, como C# y VB, radica en la sintaxis.

Por ejemplo, para C# la línea para obtener información sobre el idioma y la configuración regional se puede ejecutar con el comando:

```
var cultureInfo = System.Globalization.CultureInfo.GetCultureInfo("ru-RU")
```

En PowerShell, tal comando se vería así:

```
$cultureInfo = [System.Globalization.CultureInfo]::GetCultureInfo("ru-RU")
```

En Visual Basic .NET:

```
Dim cultureInfo As System.Globalization.CultureInfo = System.Globalization.CultureInfo.GetCultureInfo("ru-RU")
```

o

```
Dim cultureInfo As New System.Globalization.CultureInfo("ru-RU")
```

## 2. Operadores de comparación en PowerShell

La interacción efectiva con los datos en PowerShell se basa en el uso de operadores de comparación. Estas herramientas están integradas en Sherpa RPA, ampliando las capacidades de automatización.

Trabajo con operadores de comparación y patrones:

* `*-c..` — distingue entre mayúsculas y minúsculas;
* `-eq` — verifica si dos valores son iguales;
* `-ne` — verifica si dos valores no son iguales;
* `-gt` — verifica si el primer número es mayor que el segundo;
* `-ge` — verifica si el primer número es mayor o igual que el segundo;
* `-lt` — verifica si el primer número es menor que el segundo;
* `-le` — verifica si el primer número es menor o igual que el segundo;
* `-like` — verifica si el texto contiene una palabra o patrón específico. Se pueden usar `?` y `*` para buscar patrones (por ejemplo, `*.txt` — todos los archivos con la extensión `.txt`);
* `-notlike "#find text#"` — verifica que el texto NO contenga una palabra o patrón específico;
* `-match "#pattern#"` — utiliza expresiones regulares para buscar patrones complejos en el texto;
* `-is [type]` — verifica qué tipo tiene un objeto (por ejemplo, cadena, número);
* `-isnot [type]` — verifica que el objeto NO sea de ese tipo.

Estos operadores ayudan a crear scripts más claros y convenientes para el análisis y procesamiento de datos.

## 3. Trabajo con colecciones y operaciones básicas

PowerShell es excelente para trabajar con diversas estructuras de datos, como arreglos, listas, diccionarios, tablas de datos y cadenas. Por ejemplo, para filtrar los adjuntos en un mensaje:

<pre class="language-powershell"><code class="lang-powershell"><strong>($Mail.Attachments | Where-Object {$_.DisplayName -Contains "текст"}).Length > 0
</strong></code></pre>

Este ejemplo muestra cómo filtrar los adjuntos por nombre y verificar si existen tales adjuntos.

## 4. Declaración de variables y conversión de tipos

Ejemplos de expresiones y comandos para trabajar con variables y conversión de tipos:

* conversión de tipo al primer argumento:
  * `'1' + 1` da `'11'` — concatenación de cadenas, ya que el primer argumento es una cadena, el número también se convierte en cadena, y luego se realiza la concatenación;
  * `1 + '1'` da `2` — suma numérica, porque en este caso se convierte el segundo argumento al tipo numérico, y ambos sumandos se convierten en números;
* `"5/7/07" -as [DateTime]` y `[datetime]"5/7/07"` — formas de convertir una cadena con una fecha (por ejemplo, "5/7/07") en un tipo de datos especial "Fecha y hora";
* `[Convert]::ToDateTime("5/7/07")` — otra forma de convertir una cadena con una fecha (por ejemplo, "5/7/07") en un tipo de datos especial "Fecha y hora";
* `(1+12).ToString()` — expresión que realiza una operación matemática y luego cambia el tipo de datos a cadena: `'13'` ;
* `Ctrl+Space` — comando que completa automáticamente el código o muestra sugerencias útiles para continuar escribiendo el script;
* `$null` — "valor nulo" (null), se utiliza para indicar que una variable o resultado está ausente;
* `[string]::IsNullOrEmpty()` — comando que verifica si una cadena está vacía o es igual a null. Si es así, devuelve `true`, de lo contrario — `false`.

PowerShell admite trabajar con cualquier tipo de datos, similar a C#:

* cree una variable `$MyListInList` con el tipo `Object` (para almacenar cualquier tipo de datos);
* use el comando presentado a continuación para crear una lista:

`$script:MyListInList = New-Object Collections.Generic.List[Collections.Generic.List[string]];`

* agregue dos listas vacías a la lista.

Primera lista:

`$MyListInList.Add((New-Object Collections.Generic.List[string]));`

Segunda lista:

`$MyListInList.Add((New-Object Collections.Generic.List[string]));`

* agregue datos a las listas anidadas, por ejemplo, la cadena `"myval1"` en la primera lista y `"myval2"` en la segunda:

`$MyListInList[0].Add("myval1"); $MyListInList[1].Add("myval2");`<br>

Tenga en cuenta que en el sistema puede estar habilitada la opción "Variables locales y globales":

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXcooC2c0QDvaI4YaM67tASAUl-zq2I1jRHfgTvkhGx2uLwBR98dtFQFZXzgB9W8_4TnNEOhAZTdohYVTlQYF0pi4hX0SdCW9wimuGQwqX3lQg4ANX2lr2GoKdpBeS3KQ8CvLPHyLg?key=lj_Rcgf7GmeThGb8eC0j_g" alt=""><figcaption></figcaption></figure>

Si esta opción está activada, las variables creadas dentro de un bloque se consideran "locales" por defecto y solo son visibles dentro de ese bloque. Si se activa la opción "Todas las variables son globales", las variables pueden estar disponibles y ser utilizadas en cualquier parte del programa o script, independientemente del bloque de código o función en la que fueron creadas.

## 5. Alcance de las variables dentro del bloque "Ejecutar expresión"

Cuando escribe comandos dentro de un bloque (por ejemplo, en el bloque "Ejecutar expresión") y está habilitada la opción "Variables locales y globales", las variables creadas allí se consideran "locales" por defecto (visibles solo dentro de ese bloque).

Por ejemplo, la variable `$test2`, creada dentro de tal bloque, no estará disponible fuera de él:

<figure><img src="https://3940823687-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8QfFNyYLPzoIrRZpZokA%2Fuploads%2Fgit-blob-f3b8d9de2d6dd741bdc54584bbb336eeec948648%2F%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5%20(73).png?alt=media" alt=""><figcaption></figcaption></figure>

Si desea que la variable `$test2` esté disponible incluso después de la ejecución de este bloque (por ejemplo, desde otro lugar de su script), debe especificar explícitamente que pertenece al ámbito "script" (todo el script, no solo el bloque). Para ello, use la notación:

`if ($test -eq 100) { $script:test2 = 100 }`

Tenga en cuenta el `$script:` , esta expresión indica que la variable `$test2` se creó en el ámbito de todo el script, y se puede acceder a ella fuera del bloque.

<figure><img src="https://3940823687-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8QfFNyYLPzoIrRZpZokA%2Fuploads%2Fgit-blob-f9da4378c41776c5e43d07ff9eebec57fc21d97c%2F%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5%20(74).png?alt=media" alt=""><figcaption></figcaption></figure>

> Cuando lee el valor de una variable, PowerShell primero la busca dentro del bloque (localmente). Si no está allí, busca en el ámbito del script. Pero si desea establecer el valor de una variable y hacerla accesible fuera del bloque, asegúrese de especificar el ámbito `$script:`

## 6. Uso de la consola local y remota de PowerShell en el Diseñador Sherpa RPA para verificar expresiones y depurar scripts

Cuando trabaja con scripts en Sherpa RPA, a veces es necesario verificar comandos o depurar su funcionamiento. Para ello, puede utilizar la consola.

En el panel central inferior de Sherpa Designer, puede abrir la consola haciendo clic en la pestaña "Consola". Esto le permitirá ingresar comandos y ver los resultados de su ejecución. Puede limpiar la consola con el botón "Limpiar" o reiniciar la consola con el botón "Reiniciar consola" para restablecer el estado actual.\`\`\`markdown Limpieza y reinicio: Puede limpiar la consola usando el botón "Limpiar" o reiniciar la consola usando el botón "Reiniciar consola" para restablecer el estado actual.\
\
La consola local es una consola integrada que se ejecuta directamente en la ventana de Sherpa RPA. Permite verificar rápidamente comandos o expresiones individuales. Es adecuada para probar y depurar pequeños fragmentos de código.

<figure><img src="https://3940823687-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8QfFNyYLPzoIrRZpZokA%2Fuploads%2Fgit-blob-2e7224086f82bac09912eb9fc10fad5d03c5ff43%2F%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5%20(433).png?alt=media" alt=""><figcaption></figcaption></figure>

Cuando el Robot aún no está en ejecución, solo está disponible la consola local. La consola local permite verificar comandos, expresiones y condiciones:<br>

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXftLMOhzlZDMVl1ol-J_IcXwf_XCR2b7rVbZxkvIVBa7oxRrrydUqxBQ5ZliSZjl8RhIsffG5wpSi5qYCsN1eBnBMX0aISdExR7wzF5w5PWEw1G9SFdaCoPAiho5Ev0aZCuTDaIaQ?key=lj_Rcgf7GmeThGb8eC0j_g" alt=""><figcaption></figcaption></figure>

Si se inicia el Robot en modo de depuración y se pausa, se tiene la posibilidad de trabajar con la consola remota (este es el contexto del propio Robot, todos los comandos se ejecutan en su pila de PowerShell), lo que permite ver las variables actuales del Robot, modificarlas y verificar expresiones teniendo en cuenta los datos ingresados. Para pausar el Robot, el Usuario debe:

* establecer puntos de interrupción. Para ello, debe hacer clic derecho en el bloque deseado y:

  * seleccionar ![](https://3940823687-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8QfFNyYLPzoIrRZpZokA%2Fuploads%2Fgit-blob-71f63bcbeb236ef6a4ead11804ff5f71b3999beb%2F%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5%20\(435\).png?alt=media) en el menú emergente;
  * hacer clic en el bloque deseado y presionar F9 en el teclado;
  * hacer clic en el botón "Punto de interrupción" en el menú "Depuración": ![](https://3940823687-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8QfFNyYLPzoIrRZpZokA%2Fuploads%2Fgit-blob-9fcb12ff20729c5f87ec30abfe90d41a82c701e0%2F2025-07-21_20-55-06.png?alt=media).

  El bloque se resaltará con un marco rojo:

<figure><img src="https://3940823687-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8QfFNyYLPzoIrRZpZokA%2Fuploads%2Fgit-blob-3db5cbc4b42b2a18b7d0bf4be0d9855d96811d9b%2F%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5%20(437).png?alt=media" alt=""><figcaption></figcaption></figure>

* presionar el botón ![](https://3940823687-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8QfFNyYLPzoIrRZpZokA%2Fuploads%2Fgit-blob-a09dd3421ee0a8b11431bd7eca88099a7f55924e%2F%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5%20\(438\).png?alt=media). El Robot se detendrá en el bloque del diagrama donde se estableció el punto de interrupción;
* ingresar el nombre de la variable (u otro comando para trabajar con la consola remota):

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXcbADAsss3iRaF1tahAWJxSJTrsrsd8tCmXEW5LjlUgOXzW4H1TZb2bHCpFfFi3r_Q8NIJknqh5n9eyluxS_HZQdJPFwVIfXWThZpp_robxg6HZg7d7maCXY8egfqII3y6z3AO9LQ?key=lj_Rcgf7GmeThGb8eC0j_g" alt=""><figcaption></figcaption></figure>

Por lo tanto, el control en la consola se realiza a través de dos flujos: local (“L”) y remoto (“R”). Al iniciar y pausar el Robot, se activa automáticamente la consola remota (en el Robot). También es posible alternar entre estos flujos, para ello se requiere presionar el botón correspondiente: “L” o “R”, mientras el Robot está en pausa:

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXfv7hM7JrFUW9Nid0Wr1ft6p1ZaF7pUPytjZNv8FvYDoI8sPMQ_fzGEyb-CzNTsVUjcYfvmIu5FXLDXA0q-5mB4ZiFVTifq_YbViP5ikN-RwEy_T0VvdXcu22_28PxQay0UG9A9?key=lj_Rcgf7GmeThGb8eC0j_g" alt=""><figcaption></figcaption></figure>

Ejemplos de uso:

* Verificación de valores de variables: Ingrese el nombre de la variable, por ejemplo, `$myVariable`, para ver su valor actual.
* Métodos y propiedades disponibles para esta variable: Ingrese el nombre de la variable, por ejemplo, `$myVariable`, luego ingrese un punto `.` y presione Ctrl+Space.
* Ejecución de expresiones: Puede ejecutar expresiones más complejas, como `$myArray | Where-Object { $_ -eq "value" }`, para filtrar arreglos.
* Depuración de funciones: Si tiene funciones, puede llamarlas desde la consola para verificar su funcionamiento, por ejemplo, `MyFunction -Parameter $myParameter`.

**El trabajo en la consola se demuestra en el siguiente video:**

{% embed url="<https://sherparpa.ru/ucontent/?02>" %}

**Cómo usar las sugerencias de IntelliSense en la consola de Sherpa Designer se demuestra en el siguiente video:**

{% embed url="<https://sherparpa.ru/ucontent/?A9zG>" %}

## 7. Creación de bloques personalizados en el editor de bloques de Sherpa RPA

Si desea utilizar sus propias funciones en Sherpa RPA, tiene la opción de crear sus bloques.

Ejemplo de cómo hacerlo con PowerShell y una biblioteca externa (archivo .dll):

* Conectar una biblioteca externa:

`Add-Type -Path "e:\123\1\TestDialog.dll"`

* Crear un objeto de clase de la biblioteca:

`$mycls = [TestDialog.Class1]::new();`

* Llamar a los métodos del diálogo:

`$mycls.MyDialog1($MyText);`

* Ejecutar el método estático `MyDialog2`, al que se le pasa la variable `$MyText`:

`[TestDialog.Class1]::MyDialog2($MyText);`

* Trabajar con tablas de datos:

`$dt = $dt.DefaultView.ToTable($false, "Column1", "Column2")`

Se forma una tabla de datos con las columnas "Column1" y "Column2".

```
```


---

# Agent Instructions: 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:

```
GET https://docs.sherparpa.ru/es/obuchenie-po-razrabotke-na-platforme-sherpa-rpa/obuchenie-powershell.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
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.
