Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Descrição breve
Descreve como usar métodos para executar ações em objetos no PowerShell.
Descrição longa
O PowerShell usa objetos para representar os itens em armazenamentos de dados ou o estado do computador. Por exemplo, os objetos FileInfo representam os arquivos em unidades do sistema de arquivos e os objetos ProcessInfo representam os processos no computador.
Os objetos têm propriedades, que armazenam dados sobre o objeto e métodos que permitem alterar o objeto.
Um "método" é um conjunto de instruções que especificam uma ação que você pode executar no objeto. Por exemplo, o FileInfo objeto inclui o CopyTo método que copia o arquivo que o FileInfo objeto representa.
Para obter os métodos de qualquer objeto, use o Get-Member cmdlet. Use sua propriedade MemberType com um valor de "Method". O comando a seguir obtém os métodos de objetos de processo.
Get-Process | Get-Member -MemberType Method
TypeName: System.Diagnostics.Process
Name MemberType Definition
---- ---------- ----------
BeginErrorReadLine Method System.Void BeginErrorReadLine()
BeginOutputReadLine Method System.Void BeginOutputReadLine()
...
Kill Method System.Void Kill()
Refresh Method System.Void Refresh()
Start Method bool Start()
ToString Method string ToString()
WaitForExit Method bool WaitForExit(int milliseconds), ...
WaitForInputIdle Method bool WaitForInputIdle(int millisecon...
Para executar ou "invocar" um método de um objeto, digite um ponto (.), o nome do método e um conjunto de parênteses "()". Se o método tiver argumentos, coloque os valores de argumento dentro dos parênteses. Os parênteses são necessários para cada chamada de método, mesmo quando não há argumentos. Se o método usar vários argumentos, eles deverão ser separados por vírgulas.
Por exemplo, o comando a seguir invoca o método Kill de processos para encerrar o processo do bloco de notas no computador.
$notepad = Get-Process notepad
$notepad.Kill()
Este exemplo pode ser reduzido com a combinação das instruções acima.
(Get-Process Notepad).Kill()
O Get-Process comando é colocado entre parênteses para garantir que ele seja executado antes que o método Kill seja invocado. O Kill método é invocado no objeto retornado Process .
Outro método muito útil é o Replace método de cadeias de caracteres. O Replace método substitui o texto em uma cadeia de caracteres. No exemplo a seguir, o ponto (.) pode ser colocado imediatamente após a aspa de término da cadeia de caracteres.
'this is rocket science'.Replace('rocket', 'rock')
this is rock science
Conforme mostrado nos exemplos anteriores, você pode invocar um método em um objeto que você obtém usando um comando, um objeto em uma variável ou qualquer coisa que resulte em um objeto (como uma cadeia de caracteres entre aspas).
A partir do PowerShell 4,0, a invocação de método usando nomes de métodos dinâmicos é suportada.
Aprendendo sobre métodos
Para localizar definições dos métodos de um objeto, acesse o tópico da ajuda para o tipo de objeto no MSDN e procure sua página de métodos. Por exemplo, a página a seguir descreve os métodos de Process Objects System. Diagnostics. Process.
Para determinar os argumentos de um método, examine a definição do método, que é como o diagrama de sintaxe de um cmdlet do PowerShell.
Uma definição de método pode ter uma ou mais assinaturas de método, que são como os conjuntos de parâmetros de cmdlets do PowerShell. As assinaturas mostram todos os formatos válidos de comandos para invocar o método.
Por exemplo, o CopyTo método da FileInfo classe contém as duas assinaturas de método a seguir:
CopyTo(String destFileName)
CopyTo(String destFileName, Boolean overwrite)
A primeira assinatura do método usa o nome do arquivo de destino (e um caminho). O exemplo a seguir usa o primeiro CopyTo método para copiar o Final.txt arquivo para o C:\Bin diretório.
(Get-ChildItem c:\final.txt).CopyTo("c:\bin\final.txt")
Observação
Ao contrário do modo de argumento do PowerShell, os métodos de objeto são executados no modo de expressão , que é uma passagem para o .NET Framework no qual o PowerShell se baseia. No modo de expressão , argumentos bareword (cadeias de caracteres sem aspas) não são permitidos. Você pode ver isso no caminho de diferença como um parâmetro, versus o caminho como um argumento. Você pode ler mais sobre os modos de análise no about_Parsing
A assinatura do segundo método pega um nome de arquivo de destino e um valor booliano que determina se o arquivo de destino deve ser substituído, caso ele já exista.
O exemplo a seguir usa o segundo CopyTo método para copiar o Final.txt arquivo para o C:\Bin diretório e substituir os arquivos existentes.
(Get-ChildItem c:\final.txt).CopyTo("c:\bin\final.txt", $true)
Métodos de coleções e objetos escalares
Os métodos de um objeto ("escalar") de um tipo específico geralmente são diferentes dos métodos de uma coleção de objetos do mesmo tipo.
Por exemplo, cada processo tem um Kill método, mas uma coleção de processos não tem um método Kill.
A partir do PowerShell 3,0, o PowerShell tenta evitar erros de script que resultam de diferentes métodos de coleções e objetos escalares.
Se você enviar uma coleção, mas solicitar um método que existe somente em objetos únicos ("escalares"), o PowerShell invocará o método em cada objeto na coleção.
Se o método existir nos objetos individuais e na coleção, somente o método da coleção será invocado.
Esse recurso também funciona em Propriedades de coleções e objetos escalares. Para obter mais informações, consulte about_Properties.
Exemplos
O exemplo a seguir executa o método Kill de objetos de processo individuais em uma coleção de objetos de processo. Este exemplo funciona somente no PowerShell 3,0 e em versões posteriores do PowerShell.
O primeiro comando inicia três instâncias do processo do bloco de notas. O segundo comando usa o Get-Process comando para obter todas as três instâncias do processo do bloco de notas e salvá-las na $ variável p.
Notepad; Notepad; Notepad
$p = Get-Process Notepad
O terceiro comando usa a propriedade Count de todas as coleções para verificar se há três processos na $ variável p.
$p.Count
3
O quarto comando executa o método Kill em todos os três processos na $ variável p.
Esse comando funciona mesmo que uma coleção de processos não tenha um Kill método.
$p.Kill()
O quinto comando usa o comando Get-Process para confirmar que o Kill comando funcionou.
Get-Process Notepad
Get-Process : Cannot find a process with the name "notepad". Verify the proc
ess name and call the cmdlet again.
At line:1 char:12
+ Get-Process <<<< notepad
+ CategoryInfo : ObjectNotFound: (notepad:String) [Get-Process]
, ProcessCommandException
+ FullyQualifiedErrorId : NoProcessFoundForGivenName,Microsoft.PowerShel
l.Commands.GetProcessCommand
Para executar a mesma tarefa no PowerShell 2,0, use o Foreach-Object cmdlet para executar o método em cada objeto na coleção.
$p | ForEach-Object {$_.Kill()}
Métodos ForEach e where
A partir do PowerShell 4,0, há suporte para a filtragem de coleção usando uma sintaxe de método. Isso permite o uso de dois novos métodos ao lidar com coleções ForEach e Where .
Leia mais sobre esses métodos em about_arrays