Búsqueda de sitios web

Ejecute String como comando en PowerShell [4 formas]


Usando el cmdlet Invoke-Expression

Utilice el cmdlet Invoke-Expression para ejecutar una cadena como un comando en PowerShell. El cmdlet Invoke-Expression evalúa la cadena como comando y devuelve el resultado de la expresión de cadena.
Aquí hay un ejemplo simple:

Uso y operador:

$command = "notepad.exe"
Invoke-Expression $command

Esto abrirá una nueva ventana del Bloc de notas.

Aquí hay un ejemplo más complicado.

Utilice el cmdlet Invoke-Expression:

$command = "Get-Process | Sort-Object -Property CPU -Descending | Select-Object -First 5"
Invoke-Expression -Command $command

Producción :

   Handles  NPM(K)    PM(K)      WS(K)     CPU(s)      Id   SI ProcessName
-------  ------    -----      -----     ------     --  --   -----------
   1456     205   329656     294348     670.89   6328   3   Grammarly.Desktop
   2564      67   326064     354484     503.28  12276   3   chrome
    524      24   776508     798760     444.05   1248   3   chrome
    644      17     7196      21308     400.55  12324   3   SynTPEnh
   1420      41   315816     308592     394.67   8188   3   chrome

Invoke-Expression evalúa una cadena como una expresión de PowerShell, lo que le permite ejecutar cualquier comando o script de PowerShell válido. Por ejemplo, el código anterior funciona de la siguiente manera:

  • Get-Process: recupera una lista de los procesos actualmente en ejecución en el sistema.
  • Ordenar-Objeto -Propiedad CPU -Descending: Ordena la lista de procesos por la propiedad CPU (que representa el uso de CPU para cada proceso) en orden descendente.
  • Select-Object -First 5: seleccione los primeros cinco elementos de la lista ordenada de procesos.

Después de definir el comando en la variable $command, usamos el cmdlet Invoke-Expression para ejecutar el comando almacenado en $command. El resultado de este código es una lista de los 5 procesos principales con mayor uso de CPU, ordenados en orden descendente.

Usando el operador &

Utilice el operador & para ejecutar una cadena como comando en PowerShell

Uso y operador:

$command = "notepad.exe"
& $command

El operador de llamada & invoca un comando como si fuera el nombre de un comando o una función. Esto le permite ejecutar un comando almacenado en una variable o ejecutar un comando que no está en el alcance o ruta actual. Por ejemplo, el código anterior funciona de la siguiente manera:

  • Una variable de cadena $command se inicializa con un archivo ejecutable, en este caso, notepad.exe.
  • Después de eso, se utilizó el operador de llamada (&) para ejecutar el comando almacenado en $command. Esto le indica a PowerShell que ejecute el ejecutable especificado en $command. En este caso ha lanzado la aplicación Bloc de notas.

Usando comillas dobles ("")

Utilice las comillas dobles para ejecutar una cadena como comando en PowerShell.

Utilice comillas dobles:

$filename = "File1.txt"
$command = "Get-Process | Out-File -FilePath <code>"E:\$filename</code>""
Invoke-Expression -Command $command

Contenido del archivo File1.txt:

Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName                     
-------  ------    -----      -----     ------     --  -- -----------                     
    507      20     8804      16768             13328   0 AppHelperCap                   
    773      43    36872      48716       9.02   1212   3 ApplicationFrameHost           
    318      17     3700      14256              3388   0 armsvc                         
    315      16   105520      19700       0.34   3760   0 audiodg                         
    555      24   409364     392232     505.98   1248   3 chrome                         
    399      32    24192      47240     120.28   2476   3 chrome                         
    255      16    18168      35456       0.23   5224   3 chrome                         
    260      17    43572      65600      18.72   7476   3 chrome                         
   1335      33   244596     226076     508.02   8188   3 chrome                         
   ...       ...  ...        ...        ...      ...    ...
   ...       ...  ...        ...        ...      ...    ...
   ...       ...  ...        ...        ...      ...    ...

El código anterior funciona de la siguiente manera:

  • Se crea una variable de cadena $filename, establecida en File1.txt.
  • Luego, la variable $command se establece en una cadena que contiene un comando de PowerShell para obtener una lista de procesos en ejecución y escribirlos en un archivo con el nombre de archivo especificado en E: conducir.
  • El cmdlet Out-File se utiliza para escribir la salida del cmdlet Get-Process en un archivo con el nombre de archivo especificado. Las comillas invertidas (`) escapan de las comillas dobles dentro de la cadena.
  • Luego, el cmdlet Invoke-Expression se utiliza para ejecutar el comando almacenado en la variable $command.
  • La salida de este código es un archivo llamado File1.txt ubicado en la unidad E:, que contiene una lista de los procesos en ejecución cuando se ejecutó el comando.

Usando el método [scriptblock]::Create()

Utilice el método [scriptblock]::Create() para ejecutar una cadena como un comando en PowerShell.

Utilice el método Create():

$commandString = "Get-ChildItem C:\TEST1"
$commandBlock = [scriptblock]::Create($commandString)
& $commandBlock

Producción :

Mode                 LastWriteTime         Length   Name
----                 -------------         ------   ----
d-----         2/21/2023  11:26 PM                  FolderA
d-----         2/21/2023  11:27 PM                  FolderB
-a----         2/21/2023   9:32 PM              0   File1.txt
-a----         2/21/2023   9:32 PM              0   File2.txt

El código anterior funciona de la siguiente manera:

  • La primera línea del bloque de código crea una variable llamada $commandString y establece su valor en "Get-ChildItem C:\TEST1".
  • Después de eso, la segunda línea crea un objeto de bloque de script llamado $commandBlock usando el método estático Create() de la clase ScriptBlock. El método Create toma una cadena como entrada y devuelve un objeto de bloque de secuencia de comandos que se puede ejecutar como un comando de PowerShell. En este caso, la cadena pasada a Create() es el valor de la variable $commandString, que es "Get-ChildItem C:\TEST1". Esto crea un bloque de script que representa el comando Get-ChildItem con el argumento C:\TEST1.
  • Finalmente, en la última línea de código, se utilizó el operador de llamada (&) para ejecutar el bloque de script almacenado en la variable $commandBlock. El operador de llamada le dice a PowerShell que trate el bloque de script como un comando y lo ejecute. El bloque de script, a su vez, ejecuta el comando Get-ChildItem con el argumento C:\TEST1, que recupera información sobre los archivos y carpetas ubicados en el C. :\TEST1 directorio.

Teniendo en cuenta las soluciones anteriores, ejecutar string como comando en PowerShell es una herramienta poderosa que puede ayudarlo a automatizar tareas complejas y realizar tareas avanzadas de administración del sistema. Además, siguiendo las mejores prácticas, puede utilizar esta función de forma segura y eficiente para administrar sus sistemas Windows.

Se trata de cómo ejecutar una cadena como comando en PowerShell.

Artículos relacionados