Búsqueda de sitios web

Comando de invocación de PowerShell | Los 18 parámetros principales de Invoke-Command


Introducción al comando de invocación de PowerShell

Invoke-Command se utiliza para ejecutar cualquier comando en una computadora local o remota y devolver su resultado. Nos permite escribir un script o un bloque de comandos e invocar ese script o bloque de comandos. Devolverá el resultado de la ejecución del comando. Este comando se puede ejecutar de forma local o remota. Entendámoslo con algún ejemplo básico. De manera muy simple, si tenemos algunos comandos {comando1 comando 2 comandos 3} y queremos ejecutarlos y salir de su ejecución, podemos usar PowerShell Invoke-Command.

Sintaxis del comando de invocación de PowerShell

Ejecute el siguiente comando y obtendrá el resultado con toda su sintaxis y parámetros. Mostramos toda la sintaxis disponible para PowerShell Invoke-Command. Cada sintaxis se utilizará para situaciones particulares.

Sintaxis:

Get-Help Invoke-Command -full

A continuación se muestra la sintaxis que obtuvimos después de ejecutar el comando anterior.

1. Al pasar un argumento a una computadora remota

Invoke-Command
[-ScriptBlock] <scriptblock>
[-NoNewScope]
[-InputObject <psobject>]
[-ArgumentList <list of arguments in object form>]
[<CommonParameters>]

2. Con definición de nombres de trabajos

Invoke-Command
[[-Session] <PSSession[]>]
[-FilePath] <string>
[-ThrottleLimit <int>]
[-AsJob]
[-HideComputerName]
[-JobName <understandable user defined names>]
[-RemoteDebug] [-InputObject <psobject>]
[-ArgumentList <list of arguments in object form>]
[<CommonParameters>]

3. Ejecutar los comandos en modo de depuración remota

Invoke-Command
[[-Session] <PSSession[]>]
[-ScriptBlock] <scriptblock>
[-ThrottleLimit <int>]
[-AsJob]
[-HideComputerName]
[-JobName <string>]
[-RemoteDebug]
[-InputObject <psobject>]
[-ArgumentList <list of arguments in object form>]
[<CommonParameters>]
Invoke-Command
[[-ComputerName] <string[]>]
[-FilePath] <string>
[-Credential <pscredential>]
[-Port <int>] [-UseSSL]
[-ConfigurationName <string>]
[-ApplicationName <string>]
[-ThrottleLimit <int>]
[-AsJob]
[-InDisconnectedSession]
[-SessionName <string[]>]
[-HideComputerName]
[-JobName <string>]
[-SessionOption <PSSessionOption>]
[-Authentication {Default | Basic | Negotiate | NegotiateWithImplicitCredential | Credssp | Digest | Kerberos}]
[-EnableNetworkAccess]
[-RemoteDebug]
[-InputObject <psobject>]
[-ArgumentList <list of arguments in object form>]
[<CommonParameters>]
Invoke-Command
[[-ComputerName] <string[]>]
[-ScriptBlock] <scriptblock>
[-Credential <pscredential>]
[-Port <port where remote computer is listening>]
[-UseSSL]
[-ConfigurationName <string>]
[-ApplicationName <string>]
[-ThrottleLimit <int>]
[-AsJob]
[-InDisconnectedSession]
[-SessionName <string[]>]
[-HideComputerName]
[-JobName <string>]
[-SessionOption <PSSessionOption>]
[-Authentication {Default | Basic | Negotiate | NegotiateWithImplicitCredential | Credssp | Digest | Kerberos}]
[-EnableNetworkAccess]
[-RemoteDebug]
[-InputObject <psobject>]
[-ArgumentList <list of arguments in object form>]
[-CertificateThumbprint <string>]
[<CommonParameters>]
Invoke-Command
[[-ConnectionUri] <uri[]>]
[-ScriptBlock] <scriptblock>
[-Credential <pscredential>]
[-ConfigurationName <string>]
[-ThrottleLimit <int>]
[-AsJob]
[-InDisconnectedSession]
[-HideComputerName]
[-JobName <string>]
[-AllowRedirection]
[-SessionOption <PSSessionOption>]
[-Authentication {Default | Basic | Negotiate | NegotiateWithImplicitCredential | Credssp | Digest | Kerberos}]
[-EnableNetworkAccess]
[-RemoteDebug]
[-InputObject <psobject>]
[-ArgumentList <list of arguments in object form>]
[-CertificateThumbprint <string>]
[<CommonParameters>]
Invoke-Command
[[-ConnectionUri] <uri[]>]
[-FilePath] <string>
[-Credential <pscredential>]
[-ConfigurationName <string>]
[-ThrottleLimit <int>]
[-AsJob]
[-InDisconnectedSession]
[-HideComputerName]
[-JobName <string>]
[-AllowRedirection]
[-SessionOption <PSSessionOption>]
[-Authentication {Default | Basic | Negotiate | NegotiateWithImplicitCredential | Credssp | Digest | Kerberos}]
[-EnableNetworkAccess]
[-RemoteDebug]
[-InputObject <psobject>]
[-ArgumentList <Object[]>]
[<CommonParameters>]
Invoke-Command
[-VMId] <guid[]>
[-ScriptBlock] <scriptblock>
-Credential <pscredential>
[-ConfigurationName <string>]
[-ThrottleLimit <int>]
[-AsJob]
[-HideComputerName]
[-RemoteDebug]
[-InputObject <psobject>]
[-ArgumentList <list of arguments in object form>]
[<CommonParameters>]
Invoke-Command
[-ScriptBlock] <scriptblock>
-Credential <pscredential>
-VMName <string[]>
[-ConfigurationName <string>]
[-ThrottleLimit <int>]
[-AsJob]
[-HideComputerName]
[-RemoteDebug]
[-InputObject <psobject>]
[-ArgumentList <list of arguments in object form>]
[<CommonParameters>]
Invoke-Command
[-VMId] <guid[]>
[-FilePath] <string>
-Credential <pscredential>
[-ConfigurationName <string>]
[-ThrottleLimit <int>]
[-AsJob]
[-HideComputerName]
[-RemoteDebug]
[-InputObject <psobject>]
[-ArgumentList <list of arguments in object form>]
[<CommonParameters>]
Invoke-Command
[-FilePath] <path of the file>
-Credential <pscredential>
-VMName <string[]>
[-ConfigurationName <string>]
[-ThrottleLimit <int>]
[-AsJob]
[-HideComputerName]
[-RemoteDebug]
[-InputObject <psobject>]
[-ArgumentList <list of arguments in object form>]
[<CommonParameters>]
Invoke-Command
-ScriptBlock <scriptblock>
-HostName <string[]>
[-Port <port number where remote computer is listening>]
[-AsJob]
[-HideComputerName]
[-UserName <string>]
[-KeyFilePath <string>]
[-SSHTransport {true}]
[-RemoteDebug]
[-InputObject <psobject>]
[-ArgumentList <list of arguments in object form>]
[-Subsystem <string>]
[<CommonParameters>]
Invoke-Command
[-ScriptBlock] <scriptblock>
-ContainerId <string[]>
[-ConfigurationName <string>]
[-ThrottleLimit <int>]
[-AsJob]
[-HideComputerName]
[-JobName <string>]
[-RunAsAdministrator]
[-RemoteDebug]
[-InputObject <psobject>]
[-ArgumentList <list of arguments in object form>]
[<CommonParameters>]
Invoke-Command
[-FilePath] <path of the file>
-ContainerId <string[]>
[-ConfigurationName <string>]
[-ThrottleLimit <int>]
[-AsJob]
[-HideComputerName]
[-JobName <string>]
[-RunAsAdministrator]
[-RemoteDebug]
[-InputObject <psobject>]
[-ArgumentList <list of arguments in object form>]
[<CommonParameters>]
Invoke-Command
-ScriptBlock <scriptblock>
-SSHConnection <hashtable[]>
[-AsJob]
[-HideComputerName]
[-RemoteDebug]
[-InputObject <psobject>]
[-ArgumentList <list of arguments in object form>]
[<CommonParameters>]
Invoke-Command
-FilePath <path of the file>
-HostName <string[]>
[-AsJob]
[-HideComputerName]
[-UserName <string>]
[-KeyFilePath <string>]
[-SSHTransport {true}]
[-RemoteDebug]
[-InputObject <psobject>]
[-ArgumentList <list of arguments in object form>]
[<CommonParameters>]
Invoke-Command
-FilePath <path of the file>
-SSHConnection <hashtable[]>
[-AsJob]
[-HideComputerName]
[-RemoteDebug]
[-InputObject <psobject>]
[-ArgumentList <list of arguments in object form>]
[<CommonParameters>]

Los 18 parámetros principales del comando de invocación de PowerShell

Los 18 parámetros principales del comando de invocación de PowerShell se explican a continuación.

1. AllowRedirection: En algún momento, cuando intentas acceder a la computadora remota, es posible que la computadora remota devuelva otro URI para una redirección alternativa. Recuerde que PowerShell redireccionará automáticamente si queremos redirigir a la URL de retorno remota, entonces debemos usar este parámetro.

2. ApplicationName: Aquí podemos definir el nombre de la aplicación de nuestro ConnectionURI. Deberíamos usar este parámetro solo si no estamos usando ConnectionURI.

3. ArgumentList: Estas son las variables que podemos pasar a los comandos remotos, ya que las variables de los comandos remotos serán reemplazadas por estas variables. Pase los argumentos separados por comas.

4. AsJob: Supongamos que está ejecutando algunos comandos en las computadoras remotas y ese comando o trabajo está tomando demasiado tiempo; en ese caso, el comando AsJob devolverá algún objeto que brinda los detalles del trabajo en ejecución. Simple, nos permitirá ejecutar algo de fondo en caso de que el trabajo anterior tarde mucho en ejecutarse.

5. Autenticación: Define un mecanismo de autenticación para acceder a ordenadores remotos. Pero sólo está disponible para Windows, Vista y Windows Server 2008.

6. CertificateThumbprint: Nos permite utilizar algún certificado de clave pública digital para establecer una conexión con equipos remotos.

7. ComputerName: Este comando definió las computadoras donde ejecutaremos nuestros comandos. Si no definimos -ComputerName, ejecutará el comando en la computadora local.

8. ConnectionUri: define un identificador uniforme de recursos (URI), que contiene el punto final de la sesión.

A continuación se muestra el formato para eso:

://:/

El valor predeterminado será como:

http://localhost:8081/Ranjan

En caso de que no tenga un punto final, puede usar UseSSL y Puerto para definir los valores de URI de su conexión.

9. ContainerId: Define una matriz de ID.

10. Credencial: muestra todas las cuentas de usuario que tienen permiso para realizar determinadas acciones. Si no definimos ninguno, solo se mostrará el usuario actual.

11. EnableNetworkAccess: Supongamos que queremos copiar algunos archivos XML de una computadora (una sesión) y pegarlos en una computadora local, entonces podemos usar este comando. Agrega un token de seguridad a la sesión de loopback que obtiene datos de otra sesión.

12. FilePath: Si queremos acceder a un archivo o secuencia de comandos en la computadora remota, podemos usar este comando. Sólo tenemos que especificar la ruta para ello.

13. Nombre de host: especifica una serie de nombres de computadoras para una conexión basada en Secure Shell (SSH). Esto es similar al parámetro ComputerName excepto que la conexión a la computadora remota se realiza mediante SSH en lugar de Windows WinRM.

14. JobName: Nos permite escribir nombres de trabajos fáciles de usar. Su sintaxis simple es Trabajo.

15. NoNewScope: Define que un cmdlet determinado se ejecutará en el ámbito actual; si no especificamos este parámetro, se ejecutará en su propio ámbito.

16. Puerto: Define el puerto en el que se está ejecutando un ordenador remoto. Un puerto remoto es una computadora remota de usuario. Entonces, para conectar cualquier computadora necesitamos un puerto de computadora remota en el que esté escuchando.

17. RemoteDebug: Nos permite poner algún depurador en el ordenador remoto para los comandos que vamos a ejecutar para comprobar o depurar.

18. Nombre de usuario: Define el nombre de usuario de una cuenta remota para la cual estamos ejecutando los comandos. Entonces, por ejemplo, si estamos ejecutando el comando para la computadora remota XYX, entonces debe haber un usuario con "XYZuser".

Ejemplos para implementar PowerShell Invoke-Command

A continuación se muestran diferentes ejemplos para implementar el comando de invocación de PowerShell.

Ejemplo n.º 1

Invoke-Command -ScriptBlock {Get-Process}

Salida:

Podemos ejecutar el mismo comando en computadoras remotas como,

Invoke-Command -ComputerName “name of host or remote computer”-ScriptBlock {$p = Get-Process PowerShell}

Ejemplo #2

A continuación se muestra el ejemplo de una computadora local para obtener una versión de las computadoras.

invoke-command -scriptblock {(get-host).version}

Salida:

Para una computadora remota,

$version = Invoke-Command -ComputerName (Get-Content Machines.txt) -ScriptBlock {(Get-Host).Version}

Ejemplo n.º 3

En el siguiente ejemplo, colocamos Get-Host entre llaves y al ejecutar este comando obtenemos detalles completos del host.

Invoke-Command -ScriptBlock {Get-Host}

Salida:

Ejemplo n.º 4

En el siguiente ejemplo, colocamos Get-Culture entre llaves y al ejecutar este comando obtenemos el resultado.

Invoke-Command -ScriptBlock {Get-Culture}

Salida:

Si desea ejecutar el mismo comando para cualquier computadora remota que pueda usar,

Invoke-Command -ComputerName “remote computer name” -Credential domain\username -ScriptBlock {Get-Culture}

Este comando también está disponible para Linux y macOS. Entonces, si alguno de ustedes usa Linux o macOS, puede seguir la Documentación para eso.

Conclusión

En el caso de ciertos comandos definidos (bloque de comandos) que queremos ejecutar ya sea en el local (misma computadora) o en la computadora remota, podemos usar Invoke-Command.

Artículos relacionados