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 $commandEsto 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 $commandProducció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 chromeInvoke-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 propiedadCPU(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"
& $commandEl 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
$commandse 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 $commandContenido 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 enFile1.txt. - Luego, la variable
$commandse 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-Filese utiliza para escribir la salida del cmdletGet-Processen un archivo con el nombre de archivo especificado. Las comillas invertidas (`) escapan de las comillas dobles dentro de la cadena. - Luego, el cmdlet
Invoke-Expressionse utiliza para ejecutar el comando almacenado en la variable$command. - La salida de este código es un archivo llamado
File1.txtubicado 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)
& $commandBlockProducció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.txtEl código anterior funciona de la siguiente manera:
- La primera línea del bloque de código crea una variable llamada
$commandStringy establece su valor en"Get-ChildItem C:\TEST1". - Después de eso, la segunda línea crea un objeto de bloque de script llamado
$commandBlockusando el método estáticoCreate()de la claseScriptBlock. El métodoCreatetoma 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 aCreate()es el valor de la variable$commandString, que es"Get-ChildItem C:\TEST1". Esto crea un bloque de script que representa el comandoGet-ChildItemcon el argumentoC:\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 comandoGet-ChildItemcon el argumentoC:\TEST1, que recupera información sobre los archivos y carpetas ubicados en elC. :\TEST1directorio.
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.
