Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Breve descrição
Descreve como usar métodos para executar ações em objetos em PowerShell.
Longa descrição
A PowerShell utiliza objetos para representar os itens nas lojas de dados ou no estado do computador. Por exemplo, os objetos FileInfo representam os ficheiros nas unidades do sistema de ficheiros 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 pode executar no objeto. Por exemplo, o FileInfo objeto inclui o método que CopyTo copia o ficheiro que o objeto FileInfo representa.
Para obter os métodos de qualquer objeto, use o Get-Member cmdlet. Utilize a sua propriedade MemberType com o valor de "Método". O seguinte comando 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 do 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 tiver múltiplos argumentos, devem ser separados por vírgulas.
Por exemplo, o seguinte comando invoca o método Kill de processos para terminar o processo do Bloco de Notas no computador.
$notepad = Get-Process notepad
$notepad.Kill()
Este exemplo pode ser encurtado combinando as declarações acima.
(Get-Process Notepad).Kill()
O Get-Process comando é fechado em parênteses para garantir que funciona antes do método Kill ser invocado. O Kill método é então invocado no Process objeto devolvido.
Outro método muito útil é o Replace método das cordas. O Replace método substitui o texto dentro de uma corda. No exemplo abaixo, o ponto (.) pode ser colocado imediatamente após a cotação final da cadeia.
'this is rocket science'.Replace('rocket', 'rock')
this is rock science
Como mostrado nos exemplos anteriores, pode invocar um método num objeto que obtém usando um comando, um objeto numa variável, ou qualquer coisa que resulte num objeto (como uma corda em aspas).
A partir de PowerShell 4.0, a invocação do método utilizando nomes de métodos dinâmicos é suportada.
Aprender sobre métodos
Para encontrar definições dos métodos de um objeto, vá ajudar o tópico para o tipo de objeto na MSDN e procure a sua página de métodos. Por exemplo, a página seguinte descreve os métodos de objetos de processo System.Diagnostics.Process.
Para determinar os argumentos de um método, reveja a definição do método, que é como o diagrama de sintaxe de um cmdlet 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 dos cmdlets PowerShell. As assinaturas mostram todos os formatos válidos de comandos para invocar o método.
Por exemplo, o CopyTo método da classe contém as FileInfo seguintes duas assinaturas de método:
CopyTo(String destFileName)
CopyTo(String destFileName, Boolean overwrite)
A assinatura do primeiro método leva o nome do ficheiro de destino (e um caminho). O exemplo a seguir utiliza o primeiro CopyTo método para copiar o ficheiro para o Final.txt C:\Bin diretório.
(Get-ChildItem c:\final.txt).CopyTo("c:\bin\final.txt")
Nota
Ao contrário do modo de argumento da PowerShell, os métodos de objeto executam no modo de expressão, que é uma passagem para a estrutura .NET em que o PowerShell é construído. No modo de expressão não são permitidos argumentos de palavras simples (cordas não citadas). Pode ver isso no caminho da diferença como um parâmetro, contra o caminho como um argumento. Pode ler mais sobre modos de análise em about_Parsing
A assinatura do segundo método leva um nome de ficheiro de destino e um valor Boolean que determina se o ficheiro de destino deve ser substituído, se já existe.
O exemplo a seguir utiliza o segundo CopyTo método para copiar o ficheiro para o Final.txt C:\Bin diretório e para substituir ficheiros existentes.
(Get-ChildItem c:\final.txt).CopyTo("c:\bin\final.txt", $true)
Métodos de objetos escalar e coleções
Os métodos de um objeto ("scalar") de um determinado tipo são muitas vezes 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 de PowerShell 3.0, a PowerShell tenta evitar erros de script que resultam dos diferentes métodos de objetos e coleções escalares.
Se submeter uma coleção, mas solicitar um método que exista apenas em objetos individuais ("scalar"), a PowerShell invoca o método em cada objeto da coleção.
Se o método existir nos objetos individuais e na coleção, apenas o método da coleção é invocado.
Esta funcionalidade também funciona em propriedades de objetos escalares e coleções. Para mais informações, consulte about_Properties.
Exemplos
O exemplo a seguir executa o método Kill de objetos de processo individuais numa coleção de objetos de processo. Este exemplo funciona apenas nas versões PowerShell 3.0 e 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 guardá-los na $ variável p.
Notepad; Notepad; Notepad
$p = Get-Process Notepad
O terceiro comando utiliza a propriedade count de todas as coleções para verificar se existem três processos na $ variável p.
$p.Count
3
O quarto comando executa o método Kill nos três processos na $ variável p.
Este 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, utilize o Foreach-Object cmdlet para executar o método em cada objeto da coleção.
$p | ForEach-Object {$_.Kill()}
ForEach e onde métodos
A partir de PowerShell 4.0, a filtragem da recolha utilizando uma sintaxe de método é suportada. Isto permite a utilização de dois novos métodos quando se trata de coleções ForEach e Where .
Pode ler mais sobre estes métodos em about_arrays