Invoke-Command
Executa comandos em computadores locais e remotos.
Sintaxe
Invoke-Command
[-ScriptBlock] <ScriptBlock>
[-NoNewScope]
[-InputObject <PSObject>]
[-ArgumentList <Object[]>]
[<CommonParameters>]
Invoke-Command
[[-Session] <PSSession[]>]
[-ThrottleLimit <Int32>]
[-AsJob]
[-HideComputerName]
[-JobName <String>]
[-ScriptBlock] <ScriptBlock>
[-InputObject <PSObject>]
[-ArgumentList <Object[]>]
[<CommonParameters>]
Invoke-Command
[[-Session] <PSSession[]>]
[-ThrottleLimit <Int32>]
[-AsJob]
[-HideComputerName]
[-JobName <String>]
[-FilePath] <String>
[-InputObject <PSObject>]
[-ArgumentList <Object[]>]
[<CommonParameters>]
Invoke-Command
[[-ComputerName] <String[]>]
[-Credential <PSCredential>]
[-Port <Int32>]
[-UseSSL]
[-ConfigurationName <String>]
[-ApplicationName <String>]
[-ThrottleLimit <Int32>]
[-AsJob]
[-InDisconnectedSession]
[-SessionName <String[]>]
[-HideComputerName]
[-JobName <String>]
[-FilePath] <String>
[-SessionOption <PSSessionOption>]
[-Authentication <AuthenticationMechanism>]
[-EnableNetworkAccess]
[-InputObject <PSObject>]
[-ArgumentList <Object[]>]
[<CommonParameters>]
Invoke-Command
[[-ComputerName] <String[]>]
[-Credential <PSCredential>]
[-Port <Int32>]
[-UseSSL]
[-ConfigurationName <String>]
[-ApplicationName <String>]
[-ThrottleLimit <Int32>]
[-AsJob]
[-InDisconnectedSession]
[-SessionName <String[]>]
[-HideComputerName]
[-JobName <String>]
[-ScriptBlock] <ScriptBlock>
[-SessionOption <PSSessionOption>]
[-Authentication <AuthenticationMechanism>]
[-EnableNetworkAccess]
[-InputObject <PSObject>]
[-ArgumentList <Object[]>]
[-CertificateThumbprint <String>]
[<CommonParameters>]
Invoke-Command
[-Credential <PSCredential>]
[-ConfigurationName <String>]
[-ThrottleLimit <Int32>]
[[-ConnectionUri] <Uri[]>]
[-AsJob]
[-InDisconnectedSession]
[-HideComputerName]
[-JobName <String>]
[-ScriptBlock] <ScriptBlock>
[-AllowRedirection]
[-SessionOption <PSSessionOption>]
[-Authentication <AuthenticationMechanism>]
[-EnableNetworkAccess]
[-InputObject <PSObject>]
[-ArgumentList <Object[]>]
[-CertificateThumbprint <String>]
[<CommonParameters>]
Invoke-Command
[-Credential <PSCredential>]
[-ConfigurationName <String>]
[-ThrottleLimit <Int32>]
[[-ConnectionUri] <Uri[]>]
[-AsJob]
[-InDisconnectedSession]
[-HideComputerName]
[-JobName <String>]
[-FilePath] <String>
[-AllowRedirection]
[-SessionOption <PSSessionOption>]
[-Authentication <AuthenticationMechanism>]
[-EnableNetworkAccess]
[-InputObject <PSObject>]
[-ArgumentList <Object[]>]
[<CommonParameters>]
Invoke-Command
-Credential <PSCredential>
[-ThrottleLimit <Int32>]
[-AsJob]
[-HideComputerName]
[-ScriptBlock] <ScriptBlock>
[-InputObject <PSObject>]
[-ArgumentList <Object[]>]
[-VMGuid] <Guid[]>
[<CommonParameters>]
Invoke-Command
-Credential <PSCredential>
[-ThrottleLimit <Int32>]
[-AsJob]
[-HideComputerName]
[-ScriptBlock] <ScriptBlock>
[-InputObject <PSObject>]
[-ArgumentList <Object[]>]
-VMName <String[]>
[<CommonParameters>]
Invoke-Command
-Credential <PSCredential>
[-ThrottleLimit <Int32>]
[-AsJob]
[-HideComputerName]
[-FilePath] <String>
[-InputObject <PSObject>]
[-ArgumentList <Object[]>]
[-VMGuid] <Guid[]>
[<CommonParameters>]
Invoke-Command
-Credential <PSCredential>
[-ThrottleLimit <Int32>]
[-AsJob]
[-HideComputerName]
[-FilePath] <String>
[-InputObject <PSObject>]
[-ArgumentList <Object[]>]
-VMName <String[]>
[<CommonParameters>]
Description
O cmdlet Invoke-Command
executa comandos em um computador local ou remoto e retorna toda a saída dos comandos, incluindo erros. Usando um único comando Invoke-Command
, você pode executar comandos em vários computadores.
Para executar um único comando em um computador remoto, use o parâmetro ComputerName. Para executar uma série de comandos relacionados que compartilham dados, use o cmdlet
Você também pode usar Invoke-Command
em um computador local para um bloco de script como um comando. O PowerShell executa o bloco de script imediatamente em um escopo filho do escopo atual.
Antes de usar Invoke-Command
para executar comandos em um computador remoto, leia about_Remote.
Alguns exemplos de código usam splatting para reduzir o comprimento da linha. Para obter mais informações, consulte about_Splatting.
Exemplos
Exemplo 1: Executar um script em um servidor
Este exemplo executa o script Test.ps1
no computador Server01.
Invoke-Command -FilePath c:\scripts\test.ps1 -ComputerName Server01
O parâmetro FilePath especifica um script localizado no computador local. O script é executado no computador remoto e os resultados são retornados para o computador local.
Exemplo 2: Executar um comando em um servidor remoto
Este exemplo executa um comando Get-Culture
no computador remoto Server01.
Invoke-Command -ComputerName Server01 -Credential Domain01\User01 -ScriptBlock { Get-Culture }
O parâmetro ComputerName especifica o nome do computador remoto. O parâmetro Credential é usado para executar o comando no contexto de segurança de Domain01\User01, um usuário que tem permissão para executar comandos. O parâmetro ScriptBlock especifica o comando a ser executado no computador remoto.
Em resposta, o PowerShell solicita a senha e um método de autenticação para a conta User01. Em seguida, ele executa o comando no computador Server01 e retorna o resultado.
Exemplo 3: Executar um comando em uma conexão persistente
Este exemplo executa o mesmo comando Get-Culture
em uma sessão, usando uma conexão persistente, no computador remoto chamado Server02.
$s = New-PSSession -ComputerName Server02 -Credential Domain01\User01
Invoke-Command -Session $s -ScriptBlock {Get-Culture}
O cmdlet New-PSSession
cria uma sessão no computador remoto Server02 e a salva na variável $s
. Normalmente, você cria uma sessão somente quando executa uma série de comandos no computador remoto.
O cmdlet Invoke-Command
executa o comando Get-Culture
no Server02. O parâmetro Session especifica a sessão salva na variável $s
.
Em resposta, o PowerShell executa o comando na sessão no computador Server02.
Exemplo 4: Usar uma sessão para executar uma série de comandos que compartilham dados
Este exemplo compara os efeitos do uso de ComputerName e parâmetros Session de Invoke-Command
. Ele mostra como usar uma sessão para executar uma série de comandos que compartilham os mesmos dados.
Invoke-Command -ComputerName Server02 -ScriptBlock {$p = Get-Process PowerShell}
Invoke-Command -ComputerName Server02 -ScriptBlock {$p.VirtualMemorySize}
$s = New-PSSession -ComputerName Server02
Invoke-Command -Session $s -ScriptBlock {$p = Get-Process PowerShell}
Invoke-Command -Session $s -ScriptBlock {$p.VirtualMemorySize}
17930240
Os dois primeiros comandos usam o parâmetro ComputerName de Invoke-Command
para executar comandos no computador remoto Server02. O primeiro comando usa o cmdlet Get-Process
para obter o processo do PowerShell no computador remoto e salvá-lo na variável $p
. O segundo comando obtém o valor da propriedade VirtualMemorySize do processo do PowerShell.
Quando você usa o parâmetro ComputerName, o PowerShell cria uma nova sessão para executar o comando.
A sessão é encerrada quando o comando é concluído. A variável $p
foi criada em uma conexão, mas não existe na conexão criada para o segundo comando.
O problema é resolvido criando uma sessão persistente no computador remoto e, em seguida, executando ambos os comandos na mesma sessão.
O cmdlet New-PSSession
cria uma sessão persistente no computador Server02 e salva a sessão na variável $s
. As Invoke-Command
linhas a seguir usam o parâmetro Session para executar ambos os comandos na mesma sessão. Como ambos os comandos são executados na mesma sessão, o valor $p
permanece ativo.
Exemplo 5: Insira um comando armazenado em uma variável local
Este exemplo mostra como criar um comando que é armazenado como um bloco de script em uma variável local.
Quando o bloco de script é salvo em uma variável local, você pode especificar a variável como o valor do parâmetro
$command = { Get-EventLog -LogName "Windows PowerShell" |
Where-Object {$_.Message -like "*certificate*"} }
Invoke-Command -ComputerName S1, S2 -ScriptBlock $command
A variável $command
armazena o comando Get-EventLog
formatado como um bloco de script. O Invoke-Command
executa o comando armazenado em $command
nos computadores remotos S1 e S2.
Exemplo 6: Executar um único comando em vários computadores
Este exemplo demonstra como usar Invoke-Command
para executar um único comando em vários computadores.
$parameters = @{
ComputerName = "Server01", "Server02", "TST-0143", "localhost"
ConfigurationName = 'MySession.PowerShell'
ScriptBlock = { Get-EventLog "Windows PowerShell" }
}
Invoke-Command @parameters
O parâmetro ComputerName especifica uma lista separada por vírgulas de nomes de computadores. A lista de computadores inclui o valor localhost, que representa o computador local. O parâmetro ConfigurationName especifica uma configuração de sessão alternativa. O parâmetro ScriptBlock é executado Get-EventLog
para obter os logs de eventos do Windows PowerShell de cada computador.
Exemplo 7: Obter a versão do programa host em vários computadores
Este exemplo obtém a versão do programa host do PowerShell em execução em 200 computadores remotos.
$version = Invoke-Command -ComputerName (Get-Content Machines.txt) -ScriptBlock {(Get-Host).Version}
Como apenas um comando é executado, não é necessário criar conexões persistentes com cada um dos computadores. Em vez disso, o comando usa o parâmetro ComputerName para indicar os computadores. Para especificar os computadores, ele usa o cmdlet Get-Content
para obter o conteúdo do arquivo Machine.txt, um arquivo de nomes de computador.
O cmdlet Invoke-Command
executa um comando Get-Host
nos computadores remotos. Ele usa notação de ponto para obter a propriedade Versão
Esses comandos são executados um de cada vez. Quando os comandos são concluídos, a saída dos comandos de todos os computadores é salva na variável $version
. A saída inclui o nome do computador do qual os dados se originaram.
Exemplo 8: Executar um trabalho em segundo plano em vários computadores remotos
Este exemplo executa um comando em dois computadores remotos. O comando Invoke-Command
usa o parâmetro AsJob para que o comando seja executado como um trabalho em segundo plano. Os comandos são executados nos computadores remotos, mas o trabalho existe no computador local. Os resultados são transmitidos para o computador local.
$s = New-PSSession -ComputerName Server01, Server02
Invoke-Command -Session $s -ScriptBlock {Get-EventLog system} -AsJob
Id Name State HasMoreData Location Command
--- ---- ----- ----- ----------- ---------------
1 Job1 Running True Server01,Server02 Get-EventLog system
$j = Get-Job
$j | Format-List -Property *
HasMoreData : True
StatusMessage :
Location : Server01,Server02
Command : Get-EventLog system
JobStateInfo : Running
Finished : System.Threading.ManualResetEvent
InstanceId : e124bb59-8cb2-498b-a0d2-2e07d4e030ca
Id : 1
Name : Job1
ChildJobs : {Job2, Job3}
Output : {}
Error : {}
Progress : {}
Verbose : {}
Debug : {}
Warning : {}
StateChanged :
$results = $j | Receive-Job
O cmdlet New-PSSession
cria sessões nos computadores remotos Server01 e Server02. O cmdlet Invoke-Command
executa um trabalho em segundo plano em cada uma das sessões. O comando usa o parâmetro AsJob para executar o comando como um trabalho em segundo plano. Este comando retorna um objeto de trabalho que contém dois objetos de trabalho filho, um para cada um dos trabalhos executados nos dois computadores remotos.
O comando Get-Job
salva o objeto de trabalho na variável $j
. A variável $j
é então canalizada para o cmdlet Format-List
para exibir todas as propriedades do objeto de trabalho em uma lista. O último comando obtém os resultados dos trabalhos. Ele canaliza o objeto de trabalho em $j
para o cmdlet Receive-Job
e armazena os resultados na variável $results
.
Exemplo 9: Incluir variáveis locais em um comando executado em um computador remoto
Este exemplo mostra como incluir os valores de variáveis locais em um comando executado em um computador remoto. O comando usa o modificador de escopo Using
para identificar uma variável local em um comando remoto. Por padrão, todas as variáveis são consideradas definidas na sessão remota. O modificador de escopo Using
foi introduzido no PowerShell 3.0. Para obter mais informações sobre o modificador de escopo Using
, consulte about_Remote_Variables e about_Scopes.
$Log = "Windows PowerShell"
Invoke-Command -ComputerName Server01 -ScriptBlock { Get-EventLog -LogName $Using:Log -Newest 10 }
A variável $Log
armazena o nome do log de eventos, Windows PowerShell. O cmdlet Invoke-Command
executa Get-EventLog
no Server01 para obter os dez eventos mais recentes do log de eventos. O valor do parâmetro LogName é a variável $Log
, que é prefixada pelo modificador de escopo Using
para indicar que ela foi criada na sessão local, não na sessão remota.
Exemplo 10: Ocultar o nome do computador
Este exemplo mostra o efeito do uso do parâmetro HideComputerName de Invoke-Command
.
HideComputerName não altera o objeto retornado por esse cmdlet. Altera apenas o ecrã. Você ainda pode usar os cmdlets
Invoke-Command -ComputerName S1, S2 -ScriptBlock {Get-Process PowerShell}
PSComputerName Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
-------------- ------- ------ ----- ----- ----- ------ -- -----------
S1 575 15 45100 40988 200 4.68 1392 PowerShell
S2 777 14 35100 30988 150 3.68 67 PowerShell
Invoke-Command -ComputerName S1, S2 -ScriptBlock {Get-Process PowerShell} -HideComputerName
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
575 15 45100 40988 200 4.68 1392 PowerShell
777 14 35100 30988 150 3.68 67 PowerShell
Os dois primeiros comandos usam Invoke-Command
para executar um comando Get-Process
para o processo do PowerShell. A saída do primeiro comando inclui a propriedade PsComputerName, que contém o nome do computador no qual o comando foi executado. A saída do segundo comando, que usa
Exemplo 11: Usar a palavra-chave Param em um bloco de script
A palavra-chave Param
e o parâmetro ArgumentList são usados para passar valores de variáveis para parâmetros nomeados em um bloco de script. Este exemplo exibe nomes de arquivo que começam com a letra a
e têm a extensão .pdf
.
Para obter mais informações sobre a palavra-chave Param
, consulte about_Language_Keywords.
$parameters = @{
ComputerName = "Server01"
ScriptBlock = { Param ($param1,$param2) Get-ChildItem -Name $param1 -Include $param2 }
ArgumentList = "a*", "*.pdf"
}
Invoke-Command @parameters
aa.pdf
ab.pdf
ac.pdf
az.pdf
Invoke-Command
usa o parâmetro ScriptBlock que define duas variáveis, $param1
e $param2
.
Get-ChildItem
usa os parâmetros nomeados, Nome e Incluir com os nomes das variáveis. O ArgumentList passa os valores para as variáveis.
Exemplo 12: Usar a variável automática $args em um bloco de script
A variável automática $args
e o parâmetro ArgumentList são usados para passar valores de matriz para posições de parâmetros em um bloco de script. Este exemplo exibe o conteúdo do diretório de um servidor de arquivos .txt
. O parâmetro Get-ChildItem
Path é a posição 0 e o parâmetro Filter é a posição 1.
Para obter mais informações sobre a variável $args
, consulte about_Automatic_Variables
$parameters = @{
ComputerName = "Server01"
ScriptBlock = { Get-ChildItem $args[0] $args[1] }
ArgumentList = "C:\Test", "*.txt*"
}
Invoke-Command @parameters
Directory: C:\Test
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 6/12/2019 15:15 128 alog.txt
-a--- 7/27/2019 15:16 256 blog.txt
-a--- 9/28/2019 17:10 64 zlog.txt
Invoke-Command
usa um parâmetro ScriptBlock e Get-ChildItem
especifica os valores de matriz $args[0]
e $args[1]
. O
Exemplo 13: Executar um script em todos os computadores listados em um arquivo de texto
Este exemplo usa o cmdlet Invoke-Command
para executar o script Sample.ps1
em todos os computadores listados no arquivo Servers.txt
. O comando usa o parâmetro FilePath para especificar o arquivo de script. Este comando permite executar o script nos computadores remotos, mesmo que o arquivo de script não esteja acessível aos computadores remotos.
Invoke-Command -ComputerName (Get-Content Servers.txt) -FilePath C:\Scripts\Sample.ps1 -ArgumentList Process, Service
Quando você envia o comando, o conteúdo do arquivo Sample.ps1
é copiado para um bloco de script e o bloco de script é executado em cada um dos computadores remotos. Este procedimento é equivalente a usar o parâmetro ScriptBlock para enviar o conteúdo do script.
Exemplo 14: Executar um comando em um computador remoto usando um URI
Este exemplo mostra como executar um comando em um computador remoto identificado por um URI (Uniform Resource Identifier). Este exemplo em particular executa um comando Set-Mailbox
em um servidor remoto do Exchange.
$LiveCred = Get-Credential
$parameters = @{
ConfigurationName = 'Microsoft.Exchange'
ConnectionUri = 'https://ps.exchangelabs.com/PowerShell'
Credential = $LiveCred
Authentication = 'Basic'
ScriptBlock = {Set-Mailbox Dan -DisplayName "Dan Park"}
}
Invoke-Command @parameters
A primeira linha usa o cmdlet Get-Credential
para armazenar credenciais do Windows Live ID na variável $LiveCred
. O PowerShell solicita que o usuário insira credenciais do Windows Live ID.
A variável $parameters
é uma tabela de hash que contém os parâmetros a serem passados para o cmdlet Invoke-Command
. O cmdlet $LiveCred
. O parâmetro AuthenticationMechanism especifica o uso da autenticação básica. O parâmetro ScriptBlock especifica um bloco de script que contém o comando.
Exemplo 15: Usar uma opção de sessão
Este exemplo mostra como criar e usar um parâmetro SessionOption.
$so = New-PSSessionOption -SkipCACheck -SkipCNCheck -SkipRevocationCheck
Invoke-Command -ComputerName server01 -UseSSL -ScriptBlock { Get-HotFix } -SessionOption $so -Credential server01\user01
O cmdlet New-PSSessionOption
cria um objeto de opção de sessão que faz com que a extremidade remota não verifique a Autoridade de Certificação, o Nome Canônico e as Listas de Revogação ao avaliar a conexão HTTPS de entrada. O objeto
Observação
Desativar essas verificações é conveniente para a solução de problemas, mas obviamente não é seguro.
O cmdlet Invoke-Command
executa um comando Get-HotFix
remotamente. O parâmetro SessionOption recebe a variável $so
.
Exemplo 16: Gerenciar o redirecionamento de URI em um comando remoto
Este exemplo mostra como usar os parâmetros AllowRedirection e SessionOption para gerenciar o redirecionamento de URI em um comando remoto.
$max = New-PSSessionOption -MaximumRedirection 1
$parameters = @{
ConnectionUri = "https://ps.exchangelabs.com/PowerShell"
ScriptBlock = { Get-Mailbox dan }
AllowRedirection = $true
SessionOption = $max
}
Invoke-Command @parameters
O cmdlet New-PSSessionOption
cria um objeto PSSessionOption que é salvo na variável $max
. O comando usa o parâmetro
O cmdlet Invoke-Command
executa um comando Get-Mailbox
em um Microsoft Exchange Server remoto. O parâmetro AllowRedirection fornece permissão explícita para redirecionar a conexão para um ponto de extremidade alternativo. O parâmetro SessionOption usa o objeto de sessão armazenado na variável $max
.
Como resultado, se o computador remoto especificado por ConnectionURI retornar uma mensagem de redirecionamento, o PowerShell redirecionará a conexão, mas se o novo destino retornar outra mensagem de redirecionamento, o valor de contagem de redirecionamento de 1 será excedido e Invoke-Command
retornará um erro de não terminação.
Exemplo 17: Acessar um compartilhamento de rede em uma sessão remota
Este exemplo mostra como acessar um compartilhamento de rede a partir de uma sessão remota. Três computadores são usados para demonstrar o exemplo. Server01 é o computador local, Server02 é o computador remoto e Net03 contém o compartilhamento de rede. Server01 se conecta ao Server02 e, em seguida, Server02 faz um segundo salto para Net03 para acessar o compartilhamento de rede. Para obter mais informações sobre como a comunicação remota do PowerShell dá suporte a saltos entre computadores, consulte Making the second hop in PowerShell Remoting.
A delegação CredSSP (Credential Security Support Provider) necessária está habilitada nas configurações do cliente no computador local e nas configurações de serviço no computador remoto. Para executar os comandos neste exemplo, você deve ser membro do grupo Administradores do
Enable-WSManCredSSP -Role Client -DelegateComputer Server02
$s = New-PSSession Server02
Invoke-Command -Session $s -ScriptBlock {Enable-WSManCredSSP -Role Server -Force}
$parameters = @{
Session = $s
ScriptBlock = { Get-Item \\Net03\Scripts\LogFiles.ps1 }
Authentication = "CredSSP"
Credential = "Domain01\Admin01"
}
Invoke-Command @parameters
O cmdlet Enable-WSManCredSSP
permite a delegação CredSSP do computador local Server01 para o computador remoto Server02. O parâmetro Role especifica Client para definir a configuração do cliente CredSSP no computador local.
New-PSSession
cria um objeto PSSession para Server02 e armazena o objeto na variável $s
.
O cmdlet Invoke-Command
usa a variável $s
para se conectar ao computador remoto, Server02. O parâmetro ScriptBlock é executado Enable-WSManCredSSP
no computador remoto. O parâmetro Role especifica Server para definir a configuração do servidor CredSSP no computador remoto.
A variável $parameters
contém os valores de parâmetro para se conectar ao compartilhamento de rede. O cmdlet Invoke-Command
executa um comando Get-Item
na sessão em $s
. Este comando obtém um script do compartilhamento de rede \\Net03\Scripts
. O comando usa o parâmetro Authentication com um valor de CredSSP e o parâmetro Credential com um valor de Domain01\Admin01.
Exemplo 18: Iniciar scripts em muitos computadores remotos
Este exemplo executa um script em mais de cem computadores. Para minimizar o impacto no computador local, ele se conecta a cada computador, inicia o script e, em seguida, desconecta-se de cada computador. O script continua a ser executado nas sessões desconectadas.
$parameters = @{
ComputerName = (Get-Content -Path C:\Test\Servers.txt)
InDisconnectedSession = $true
FilePath = "\\Scripts\Public\ConfigInventory.ps1"
SessionOption = @{OutputBufferingMode="Drop";IdleTimeout=43200000}
}
Invoke-Command @parameters
O comando usa Invoke-Command
para executar o script. O valor do parâmetro Invoke-Command
executa em cada computador.
O valor de SessionOption é uma tabela de hash. O valor OutputBufferingMode é definido como Drop e o valor IdleTimeout é definido como 43200000 milissegundos (12 horas).
Para obter os resultados de comandos e scripts executados em sessões desconectadas, use o cmdlet Receive-PSSession
.
Parâmetros
-AllowRedirection
Permite o redirecionamento dessa conexão para um URI (Uniform Resource Identifier) alternativo.
Quando você usa o parâmetro
Você também pode limitar o número de vezes que a conexão é redirecionada alterando o MaximumConnectionRedirectionCount valor da opção de sessão. Use o parâmetro MaximumRedirection do cmdlet New-PSSessionOption
ou defina a propriedade MaximumConnectionRedirectionCount da variável de preferência $PSSessionOption
. O valor padrão é 5.
Tipo: | SwitchParameter |
Position: | Named |
Default value: | False |
Necessário: | False |
Aceitar entrada de pipeline: | False |
Aceitar carateres universais: | False |
-ApplicationName
Especifica o segmento de nome do aplicativo do URI de conexão. Use esse parâmetro para especificar o nome do aplicativo quando não estiver usando o parâmetro ConnectionURI no comando.
O valor padrão é o valor da variável de preferência $PSSessionApplicationName
no computador local. Se essa variável de preferência não estiver definida, o valor padrão será WSMAN. Esse valor é apropriado para a maioria dos usos. Para obter mais informações, consulte about_Preference_Variables.
O serviço WinRM usa o nome do aplicativo para selecionar um ouvinte para atender à solicitação de conexão. O valor desse parâmetro deve corresponder ao valor da propriedade URLPrefix de um ouvinte no computador remoto.
Tipo: | String |
Position: | Named |
Default value: | $PSSessionApplicationName if set on the local computer, otherwise WSMAN |
Necessário: | False |
Aceitar entrada de pipeline: | True |
Aceitar carateres universais: | False |
-ArgumentList
Fornece os valores das variáveis locais no comando. As variáveis no comando são substituídas por esses valores antes que o comando seja executado no computador remoto. Insira os valores em uma lista separada por vírgula. Os valores são associados a variáveis na ordem em que são listados. O alias para ArgumentList é Args.
Os valores no parâmetro
Para usar variáveis locais em um comando, use o seguinte formato de comando:
{param($<name1>[, $<name2>]...) <command-with-local-variables>} -ArgumentList <value>
-ou- <local-variable>
A palavra-chave param lista as variáveis locais usadas no comando. ArgumentList fornece os valores das variáveis, na ordem em que são listadas.
Tipo: | Object[] |
Aliases: | Args |
Position: | Named |
Default value: | None |
Necessário: | False |
Aceitar entrada de pipeline: | False |
Aceitar carateres universais: | False |
-AsJob
Indica que esse cmdlet executa o comando como um trabalho em segundo plano em um computador remoto. Use esse parâmetro para executar comandos que levam muito tempo para serem concluídos.
Quando você usa o parâmetro AsJob, o comando retorna um objeto que representa o trabalho e, em seguida, exibe o prompt de comando. Você pode continuar a trabalhar na sessão enquanto o trabalho termina. Para gerenciar o trabalho, use os cmdlets *-Job
. Para obter os resultados do trabalho, use o cmdlet Receive-Job
.
O parâmetro AsJob é semelhante ao uso do cmdlet Invoke-Command
para executar um cmdlet Start-Job
remotamente. No entanto, com AsJob, o trabalho é criado no computador local, mesmo que o trabalho seja executado em um computador remoto. Os resultados do trabalho remoto são automaticamente devolvidos ao computador local.
Para obter mais informações sobre trabalhos em segundo plano do PowerShell, consulte about_Jobs e about_Remote_Jobs.
Tipo: | SwitchParameter |
Position: | Named |
Default value: | False |
Necessário: | False |
Aceitar entrada de pipeline: | False |
Aceitar carateres universais: | False |
-Authentication
Especifica o mecanismo usado para autenticar as credenciais do usuário. A autenticação CredSSP está disponível apenas no Windows Vista, Windows Server 2008 e versões posteriores do sistema operacional Windows.
Os valores aceitáveis para este parâmetro são os seguintes:
- Inadimplência
- Básico
- Credssp
- Resumo
- Kerberos
- Negociar
- NegociarComImplicitCredential
O valor padrão é Default.
Para obter mais informações sobre os valores desse parâmetro, consulte AuthenticationMechanism Enumeration.
Atenção
A autenticação CredSSP (Credential Security Support Provider), na qual as credenciais do usuário são passadas para um computador remoto para ser autenticado, foi projetada para comandos que exigem autenticação em mais de um recurso, como acessar um compartilhamento de rede remoto. Este mecanismo aumenta o risco de segurança da operação remota. Se o computador remoto estiver comprometido, as credenciais que são passadas para ele podem ser usadas para controlar a sessão de rede. Para obter mais informações, consulte Credential Security Support Provider.
Tipo: | AuthenticationMechanism |
Valores aceites: | Default, Basic, Negotiate, NegotiateWithImplicitCredential, Credssp, Digest, Kerberos |
Position: | Named |
Default value: | Default |
Necessário: | False |
Aceitar entrada de pipeline: | False |
Aceitar carateres universais: | False |
-CertificateThumbprint
Especifica o certificado de chave pública digital (X509) de uma conta de usuário que tem permissão para se conectar à sessão desconectada. Insira a impressão digital do certificado.
Os certificados são usados na autenticação baseada em certificado de cliente. Eles podem ser mapeados apenas para contas de usuário locais e não funcionam com contas de domínio.
Para obter uma impressão digital de certificado, use um comando Get-Item
ou Get-ChildItem
na unidade PowerShell Cert:.
Tipo: | String |
Position: | Named |
Default value: | None |
Necessário: | False |
Aceitar entrada de pipeline: | False |
Aceitar carateres universais: | False |
-ComputerName
Especifica os computadores nos quais o comando é executado. O padrão é o computador local.
Quando você usa o parâmetro ComputerName, o PowerShell cria uma conexão temporária que é usada apenas para executar o comando especificado e, em seguida, é fechada. Se você precisar de uma conexão persistente, use o parâmetro Session.
Digite o nome NETBIOS, endereço IP ou nome de domínio totalmente qualificado de um ou mais computadores em uma lista separada por vírgula. Para especificar o computador local, digite o nome do computador, localhost ou um ponto (.
).
Para usar um endereço IP no valor de ComputerName, o comando deve incluir o parâmetro Credential. O computador deve ser configurado para o transporte HTTPS ou o endereço IP do computador remoto deve ser incluído na lista de WinRM
No Windows Vista e em versões posteriores do sistema operacional Windows, para incluir o computador local no valor de ComputerName, você deve executar o PowerShell usando a opção Executar como administrador opção.
Tipo: | String[] |
Aliases: | Cn |
Position: | 0 |
Default value: | Local computer |
Necessário: | False |
Aceitar entrada de pipeline: | False |
Aceitar carateres universais: | False |
-ConfigurationName
Especifica a configuração de sessão usada para o novo PSSession.
Insira um nome de configuração ou o URI de recurso totalmente qualificado para uma configuração de sessão. Se você especificar apenas o nome da configuração, o seguinte URI de esquema será precedido: https://schemas.microsoft.com/PowerShell
.
A configuração da sessão para uma sessão está localizada no computador remoto. Se a configuração de sessão especificada não existir no computador remoto, o comando falhará.
O valor padrão é o valor da variável de preferência $PSSessionConfigurationName
no computador local. Se essa variável de preferência não estiver definida, o padrão será Microsoft.PowerShell. Para obter mais informações, consulte about_Preference_Variables.
Tipo: | String |
Position: | Named |
Default value: | $PSSessionConfigurationName if set on the local computer, otherwise Microsoft.PowerShell |
Necessário: | False |
Aceitar entrada de pipeline: | True |
Aceitar carateres universais: | False |
-ConnectionUri
Especifica um URI (Uniform Resource Identifier) que define o ponto de extremidade de conexão da sessão. O URI deve ser totalmente qualificado.
O formato desta cadeia de caracteres é o seguinte:
<Transport>://<ComputerName>:<Port>/<ApplicationName>
O valor padrão é o seguinte:
https://localhost:5985/WSMAN
Se você não especificar um URI de conexão, poderá usar os parâmetros UseSSL e Port para especificar os valores de URI de conexão.
Os valores válidos para o segmento de de Transporte de
Se o computador de destino redireciona a conexão para um URI diferente, o PowerShell impede o redirecionamento, a menos que você use o parâmetro AllowRedirection no comando.
Tipo: | Uri[] |
Aliases: | URI, CU |
Position: | 0 |
Default value: | https://localhost:5985/WSMAN |
Necessário: | False |
Aceitar entrada de pipeline: | False |
Aceitar carateres universais: | False |
-Credential
Especifica uma conta de usuário que tem permissão para executar essa ação. O padrão é o usuário atual.
Digite um nome de usuário, como User01 ou Domain01\User01. Ou insira um objeto PSCredential
Tipo: | PSCredential |
Position: | Named |
Default value: | Current user |
Necessário: | False |
Aceitar entrada de pipeline: | True |
Aceitar carateres universais: | False |
-EnableNetworkAccess
Indica que esse cmdlet adiciona um token de segurança interativo às sessões de loopback. O token interativo permite executar comandos na sessão de loopback que obtêm dados de outros computadores. Por exemplo, você pode executar um comando na sessão que copia arquivos XML de um computador remoto para o computador local.
Uma sessão de loopback é um PSSession .
), localhost ou o nome do computador local.
Por padrão, as sessões de loopback são criadas usando um token de rede, que pode não fornecer permissão suficiente para autenticação em computadores remotos.
O parâmetro EnableNetworkAccess é efetivo apenas em sessões de loopback. Se você usar EnableNetworkAccess ao criar uma sessão em um computador remoto, o comando será bem-sucedido, mas o parâmetro será ignorado.
Você pode permitir o acesso remoto em uma sessão de loopback usando o valor CredSSP do parâmetro Authentication, que delega as credenciais da sessão a outros computadores.
Para proteger o computador contra acesso mal-intencionado, as sessões de loopback desconectadas que têm tokens interativos, que são aqueles criados usando EnableNetworkAccess, podem ser reconectadas somente do computador no qual a sessão foi criada. As sessões desconectadas que usam a autenticação CredSSP podem ser reconectadas de outros computadores. Para obter mais informações, consulte Disconnect-PSSession
.
Esse parâmetro foi introduzido no PowerShell 3.0.
Tipo: | SwitchParameter |
Position: | Named |
Default value: | False |
Necessário: | False |
Aceitar entrada de pipeline: | False |
Aceitar carateres universais: | False |
-FilePath
Especifica um script local que esse cmdlet executa em um ou mais computadores remotos. Insira o caminho e o nome do arquivo do script ou canalize um caminho de script para Invoke-Command
. O script deve residir no computador local ou em um diretório que o computador local possa acessar. Use ArgumentList para especificar os valores dos parâmetros no script.
Quando você usa esse parâmetro, o PowerShell converte o conteúdo do arquivo de script especificado em um bloco de script, transmite o bloco de script para o computador remoto e o executa no computador remoto.
Tipo: | String |
Aliases: | PSPath |
Position: | 1 |
Default value: | None |
Necessário: | True |
Aceitar entrada de pipeline: | False |
Aceitar carateres universais: | False |
-HideComputerName
Indica que esse cmdlet omite o nome do computador de cada objeto da exibição de saída. Por padrão, o nome do computador que gerou o objeto aparece na exibição.
Este parâmetro afeta apenas a exibição de saída. Ele não altera o objeto.
Tipo: | SwitchParameter |
Aliases: | HCN |
Position: | Named |
Default value: | None |
Necessário: | False |
Aceitar entrada de pipeline: | False |
Aceitar carateres universais: | False |
-InDisconnectedSession
Indica que esse cmdlet executa um comando ou script em uma sessão desconectada.
Quando você usa o parâmetro InDisconnectedSession, Invoke-Command
cria uma sessão persistente em cada computador remoto, inicia o comando especificado pelo ScriptBlock ou parâmetro FilePath e desconecta da sessão. Os comandos continuam a ser executados nas sessões desconectadas.
InDisconnectedSession permite executar comandos sem manter uma conexão com as sessões remotas. E, como a sessão é desconectada antes que qualquer resultado seja retornado, InDisconnectedSession garante que todos os resultados do comando sejam retornados para a sessão reconectada, em vez de serem divididos entre sessões.
Não é possível usar InDisconnectedSession com o parâmetro Session ou o parâmetro AsJob.
Os comandos que usam Connect-PSSession
ou Receive-PSSession
. Para obter os resultados dos comandos executados na sessão, use o cmdlet Receive-PSSession
. Para executar comandos que geram saída em uma sessão desconectada, defina o valor da opção de sessão
Você pode definir o modo de buffer de saída e o tempo limite ocioso no parâmetro New-PSSessionOption
e about_Preference_Variables.
Para obter mais informações sobre o recurso Sessões Desconectadas, consulte about_Remote_Disconnected_Sessions.
Esse parâmetro foi introduzido no PowerShell 3.0.
Tipo: | SwitchParameter |
Aliases: | Disconnected |
Position: | Named |
Default value: | False |
Necessário: | False |
Aceitar entrada de pipeline: | False |
Aceitar carateres universais: | False |
-InputObject
Especifica a entrada para o comando. Insira uma variável que contenha os objetos ou digite um comando ou expressão que obtenha os objetos.
Ao usar o parâmetro
Tipo: | PSObject |
Position: | Named |
Default value: | None |
Necessário: | False |
Aceitar entrada de pipeline: | True |
Aceitar carateres universais: | False |
-JobName
Especifica um nome amigável para o trabalho em segundo plano. Por padrão, os trabalhos são nomeados Job<n>
, onde <n>
é um número ordinal.
Se você usar o parâmetro JobName em um comando, o comando será executado como um trabalho e Invoke-Command
retornará um objeto de trabalho, mesmo que você não inclua AsJob no comando.
Para obter mais informações sobre trabalhos em segundo plano do PowerShell, consulte about_Jobs.
Tipo: | String |
Position: | Named |
Default value: | Job<n> |
Necessário: | False |
Aceitar entrada de pipeline: | False |
Aceitar carateres universais: | False |
-NoNewScope
Indica que esse cmdlet executa o comando especificado no escopo atual. Por padrão, Invoke-Command
executa comandos em seu próprio escopo.
Esse parâmetro é válido somente em comandos executados na sessão atual, ou seja, comandos que omitem os parâmetros ComputerName e Session.
Esse parâmetro foi introduzido no PowerShell 3.0.
Tipo: | SwitchParameter |
Position: | Named |
Default value: | False |
Necessário: | False |
Aceitar entrada de pipeline: | False |
Aceitar carateres universais: | False |
-Port
Especifica a porta de rede no computador remoto que é usada para este comando. Para se conectar a um computador remoto, o computador remoto deve estar escutando na porta que a conexão usa. As portas padrão são 5985, que é a porta WinRM para HTTP, e 5986, que é a porta WinRM para HTTPS.
Antes de usar uma porta alternativa, configure o ouvinte do WinRM no computador remoto para ouvir nessa porta. Para configurar o ouvinte, digite os dois comandos a seguir no prompt do PowerShell:
Remove-Item -Path WSMan:\Localhost\listener\listener* -Recurse
New-Item -Path WSMan:\Localhost\listener -Transport http -Address * -Port \<port-number\>
Não use o parâmetro Port, a menos que seja necessário. A porta definida no comando aplica-se a todos os computadores ou sessões em que o comando é executado. Uma configuração de porta alternativa pode impedir que o comando seja executado em todos os computadores.
Tipo: | Int32 |
Position: | Named |
Default value: | None |
Necessário: | False |
Aceitar entrada de pipeline: | False |
Aceitar carateres universais: | False |
-ScriptBlock
Especifica os comandos a serem executados. Coloque os comandos entre chaves { }
para criar um bloco de script.
Este parâmetro é obrigatório.
Por padrão, todas as variáveis no comando são avaliadas no computador remoto. Para incluir variáveis locais no comando, use ArgumentList.
Tipo: | ScriptBlock |
Aliases: | Command |
Position: | 0 |
Default value: | None |
Necessário: | True |
Aceitar entrada de pipeline: | False |
Aceitar carateres universais: | False |
-Session
Especifica uma matriz de sessões nas quais esse cmdlet executa o comando. Insira uma variável que contenha objetos PSSession ou um comando que crie ou obtenha o PSSession objetos, como um comando New-PSSession
ou Get-PSSession
.
Quando você cria um PSSession, o PowerShell estabelece uma conexão persistente com o computador remoto. Use um PSSession
Tipo: | PSSession[] |
Position: | 0 |
Default value: | None |
Necessário: | False |
Aceitar entrada de pipeline: | False |
Aceitar carateres universais: | False |
-SessionName
Especifica um nome amigável para uma sessão desconectada. Você pode usar o nome para se referir à sessão em comandos subsequentes, como um comando Get-PSSession
. Esse parâmetro é válido somente com o parâmetro InDisconnectedSession.
Esse parâmetro foi introduzido no PowerShell 3.0.
Tipo: | String[] |
Position: | Named |
Default value: | None |
Necessário: | False |
Aceitar entrada de pipeline: | False |
Aceitar carateres universais: | False |
-SessionOption
Especifica opções avançadas para a sessão. Insira um objeto
Os valores padrão para as opções são determinados pelo valor da variável de preferência $PSSessionOption
, se estiver definida. Caso contrário, os valores padrão são estabelecidos pelas opções definidas na configuração da sessão.
Os valores de opção de sessão têm precedência sobre os valores padrão para sessões definidas na variável de preferência $PSSessionOption
e na configuração da sessão. No entanto, eles não têm precedência sobre os valores máximos, cotas ou limites definidos na configuração da sessão.
Para obter uma descrição das opções de sessão que inclui os valores padrão, consulte New-PSSessionOption
. Para obter informações sobre a variável de preferência $PSSessionOption
, consulte about_Preference_Variables.
Para obter mais informações sobre configurações de sessão, consulte about_Session_Configurations.
Tipo: | PSSessionOption |
Position: | Named |
Default value: | None |
Necessário: | False |
Aceitar entrada de pipeline: | False |
Aceitar carateres universais: | False |
-ThrottleLimit
Especifica o número máximo de conexões simultâneas que podem ser estabelecidas para executar esse comando. Se você omitir esse parâmetro ou inserir um valor de 0, o valor padrão, 32, será usado.
O limite de aceleração aplica-se apenas ao comando atual, não à sessão ou ao computador.
Tipo: | Int32 |
Position: | Named |
Default value: | 32 |
Necessário: | False |
Aceitar entrada de pipeline: | False |
Aceitar carateres universais: | False |
-UseSSL
Indica que esse cmdlet usa o protocolo SSL (Secure Sockets Layer) para estabelecer uma conexão com o computador remoto. Por padrão, o SSL não é usado.
WS-Management criptografa todo o conteúdo do PowerShell transmitido pela rede. O parâmetro UseSSL é uma proteção adicional que envia os dados através de um HTTPS, em vez de HTTP.
Se você usar esse parâmetro, mas o SSL não estiver disponível na porta usada para o comando, o comando falhará.
Tipo: | SwitchParameter |
Position: | Named |
Default value: | False |
Necessário: | False |
Aceitar entrada de pipeline: | False |
Aceitar carateres universais: | False |
-VMId
Especifica uma matriz de IDs de máquinas virtuais.
Tipo: | Guid[] |
Position: | 0 |
Default value: | None |
Necessário: | True |
Aceitar entrada de pipeline: | True |
Aceitar carateres universais: | False |
-VMName
Especifica uma matriz de nomes de máquinas virtuais.
Tipo: | String[] |
Position: | Named |
Default value: | None |
Necessário: | True |
Aceitar entrada de pipeline: | True |
Aceitar carateres universais: | False |
Entradas
Você pode canalizar um comando em um bloco de script para Invoke-Command
. Use a variável automática $Input
para representar os objetos de entrada no comando.
Saídas
System.Management.Automation.PSRemotingJob, System.Management.Automation.Runspaces.PSSession, or the output of the invoked command
Esse cmdlet retornará um objeto de trabalho, se você usar o parâmetro AsJob. Se você especificar o parâmetro InDisconnectedSession, Invoke-Command
retornará um objeto PSSession. Caso contrário, ele retorna a saída do comando invoked, que é o valor do parâmetro ScriptBlock.
Notas
No Windows Vista e em versões posteriores do sistema operacional Windows, para usar o parâmetro ComputerName do Invoke-Command
para executar um comando no computador local, você deve executar o PowerShell usando a opção Executar como administrador opção.
Quando você executa comandos em vários computadores, o PowerShell se conecta aos computadores na ordem em que aparecem na lista. No entanto, a saída do comando é exibida na ordem em que é recebida dos computadores remotos, o que pode ser diferente.
Os erros resultantes do comando que Invoke-Command
executa são incluídos nos resultados do comando.
Os erros que seriam erros de encerramento em um comando local são tratados como erros não terminativos em um comando remoto. Essa estratégia garante que os erros de encerramento em um computador não fechem o comando em todos os computadores em que ele é executado. Essa prática é usada mesmo quando um comando remoto é executado em um único computador.
Se o computador remoto não estiver em um domínio em que o computador local confia, talvez não consiga autenticar as credenciais do usuário. Para adicionar o computador remoto à lista de hosts confiáveis no WS-Management, use o seguinte comando no provedor de WSMAN
, onde <Remote-Computer-Name>
é o nome do computador remoto:
Set-Item -Path WSMan:\Localhost\Client\TrustedHosts -Value \<Remote-Computer-Name\>
Quando você desconecta um PSSession, usando o parâmetro InDisconnectedSession, o estado da sessão é Desconectado e a disponibilidade é Nenhum. O valor da propriedade State é relativo à sessão atual. Um valor de Desconectado significa que o PSSession não está conectado à sessão atual. No entanto, isso não significa que o PSSession
Um valor de de Disponibilidade de