O que há de novo no #Powershell 2?

O que há de novo no Powershell 2?

Alguns cmdlets do powershell tiveram novos parâmetros adicionados, talvez o mais importante de imediato seja o parâmetro -ComputerName que nos permite executar comandos em outros computadores via rede. Vejamos alguns exemplos com os cmdlets que

foram modificados.:

Get-EventLog:

Recupera informações de um log de evento (ou de um grupo de logs) no computador local ou em computadores remotos. No exemplo abaixo utilizei o cmdlet Get-EvenLog com o parâmetro -ComputerName para ver as cinco informações mais recentes no log de aplicativo de um computador chamado “Financeiro”:

PS> Get-EventLog -ComputerName financeiro -LogName application -Newest 5

O Get-EventLog também recebeu novos parâmetros. Na versão 1.0, por exemplo, se você quiser mostrar entradas do log relativas ao winlogon, pode usar o comando seguinte:

PS C:\Windows\system32> get-eventlog -logname application | where-object{$_.source -eq “winlogon”}

Index Time          EntryType   Source                 InstanceID Message
—– —-          ———   ——                 ———- ——-
11392 out 28 06:21  Information Winlogon               1073745925 Licença do Windows validada.
11349 out 27 20:21  Information Winlogon               1073745925 Licença do Windows validada.
11300 out 27 14:47  Information Winlogon               1073745925 Licença do Windows validada.
11274 out 27 08:39  Information Winlogon               1073745925 Licença do Windows validada.

Ainda na versão 1.0. Se quiser ver os erros pode usar o comando a seguir:

PS C:\Windows\system32> get-eventlog -logname application | where-object{$_.entrytype -match “error”}

Index Time          EntryType   Source                 InstanceID Message
—– —-          ———   ——                 ———- ——-
11403 out 28 08:08  Error       Application Hang             1002 O programa nero.exe versão 7.5.7.0 parou de int…
11330 out 27 15:34  Error       SideBySide             3238068283 Falha na geração de contexto de ativação para “…
11151 out 25 15:28  Error       SideBySide             3238068283 Falha na geração de contexto de ativação para “…
11114 out 24 15:47  Error       Application Error            1000 Nome de aplicativo com falha: vlc.exe, versão: …
11079 out 24 10:29  Error       Application Error            1000 Nome de aplicativo com falha: RecordingManager….
11044 out 23 21:49  Error       SideBySide             3238068283 Falha na geração de contexto de ativação para “…
10973 out 23 09:32  Error       VSS                          8194 Erro do

Na versão 2.0 você pode abrir mão do cmdlet where-object, porque foi adicionado o parâmetro -source que facilita muito a tarefa de filtrar a origem do log, então o comando acima utilizado para ver as entradas de log  referentes ao winlogon, ficaria da seguinte maneira:

PS C:\Windows\system32> get-eventlog -logname application -source winlogon

Index Time          EntryType   Source                 InstanceID Message
—– —-          ———   ——                 ———- ——-
11392 out 28 06:21  Information Winlogon               1073745925 Licença do Windows validada.
11349 out 27 20:21  Information Winlogon               1073745925 Licença do Windows validada.
11300 out 27 14:47  Information Winlogon               1073745925 Licença do Windows validada.
11274 out 27 08:39  Information Winlogon               1073745925 Licença do Windows validada.
11246 out 27 07:10  Information Winlogon               1073745925 Licença do Windows validada.

E tem mais um parâmetro adicionado no Get-Eventlog que, na minha opnião, é uma mão na roda, é o parâmetro -after, através do qual podemos filtrar os eventos depois de uma determinada data, da seguinte maneira:

PS C:\Windows\system32> get-eventlog -logname application -source winlogon -after 24/10/2009

Index Time          EntryType   Source                 InstanceID Message
—– —-          ———   ——                 ———- ——-
11392 out 28 06:21  Information Winlogon               1073745925 Licença do Windows validada.
11349 out 27 20:21  Information Winlogon               1073745925 Licença do Windows validada.
11300 out 27 14:47  Information Winlogon               1073745925 Licença do Windows validada.
11274 out 27 08:39  Information Winlogon               1073745925 Licença do Windows validada.
11246 out 27 07:10  Information Winlogon               1073745925 Licença do Windows validada.
11226 out 26 19:15  Information Winlogon               1073745925 Licença do Windows validada.

Get-Process:

Mostra a lista de processos que estão em execução no computador local ou em computador remoto. No exemplo abaixo vou utilizar esse comando no servidor para ver os processos que estão rodando no computador do setor financeiro:

PS> Get-Process -ComputerName financeiro

Get-Service:

Recupera a lista de todos os serviços que estão ativados no computador local ou remoto. Seguindo os exemplos anteriores, vamos utilizá-lo para ver os serviços ativos no computador do financeiro.

PS> Get-Service -ComputerName financeiro

O Get-Service também recebeu dois novos parâmetros, o  -DependentServices que exibe os serviços que dependem do serviço que está sendo consultado e a chave -RequiredServices que exibe os serviços que são requeridos para que o serviço consultado precisa para rodar. Vejamos os exemplos com o serviço winmgmt:

PS C:\Windows\system32> get-service -name winmgmt

Status   Name               DisplayName
——   —-               ———–
Running  winmgmt            Testador de instrumentação de geren…

PS C:\Windows\system32> get-service -name winmgmt -dependentservices

Status   Name               DisplayName
——   —-               ———–
Running  wscsvc             Central de Segurança
Running  VMAuthdService     VMware Authorization Service
Stopped  SharedAccess       ICS (Compartilhamento de Conexão co…
Running  iphlpsvc           Auxiliar de IP

PS C:\Windows\system32> get-service -name winmgmt -requiredservices

Status   Name               DisplayName
——   —-               ———–
Running  RPCSS              Chamada de procedimento remoto (RPC)

Como sabemos que o padrão de nomes dos cmdlets no powershell é “Verbo-Nome”, e sabemos que o verbo inglês “GET” significa obter, então tem um macete que podemos usar para explorar novos comandos e sermos mais  produtivo de forma intuitiva. Se existe o GET, então possivelmente existe o SET, o verbo inglês SET significa ajustar. Quem já programou OO já está acostumado com a dobradinha GET/SET, o GET obtém a informação e o SET grava novas informações. Então podemos supor que como existe o Get-Services pode existir o Set-Services.

Set-Services:

Serve para iniciar, parar e suspender um serviço e até mesmo alterar suas propriedades. Esse cmdlet também foi atualizado com o parâmetro -ComputerName e portanto funciona tanto para um computador local ou remoto. No exemplo desse cmdlet vou alterar o tipo de inicialização de um serviço chamdao BITS que está como automática para manual. Como isso altera o estado do sistema vou usar o parâmetro -confirm para que, antes de pressionar o ENTER, possamos confirmar se estamos trabalhando com o computador certo e o serviço certo. Vamos ao exemplo:

PS> Set-Service -ComputerName financeiro -Name bits -StartupType manual -Confirm

Existe também o parâmetro -credential que na versão 1.0 do powershell funcionava apenas com o cmdlet WmiObject, e na versão 2.0 foi expandido para os outros. Esse parâmetro permite que possamos rodar o comando como outro usuário, útil para rodarmos um comando como adminsitrador estando logado na estação com a senha do usuário, é o equivalente do comando Runas do MS-DOS.

No entanto, se for usar o parâmetro -credential para comandar um computador remoto, é preciso que o computador remoto suporte essa chave, ou seja, que tenha o powershell 2.0 instalado.

Além dos parâmetros -ComputerName e -Credential alguns cmdlets tiveram também acrescido o parâmetro -FileVersionInfo, este parâmetro mostra informações sobre a versão de um processo específico ou de todos os processos. No exemplo abaixo pego informações de um processo chamado Seaport.

PS C:\Windows\system32> get-process -fileversioninfo -name seaport

ProductVersion   FileVersion      FileName
————–   ———–      ——–
1.3.59.0         1.3.59.0         C:\Program Files\Microsoft\Search Enhancement Pack\SeaPort\SeaPort.exe

Caso você tenha tentado executar esse comando sem as credenciais de administrador, receberá um erro de acesso negado, como aconteceu comigo na primeira vez que fui executá-lo.

Temos também disponível nesse caso o parâmetro -module que mostra as DLLs e os arquivos utilizados por esse processo, vamos acrescentar a chave -module no exemplo acima e ver a diferença no resultado:

PS C:\Windows\system32> get-process -fileversioninfo -module -name seaport

ProductVersion   FileVersion      FileName
————–   ———–      ——–
1.3.59.0         1.3.59.0         C:\Program Files\Microsoft\Search Enhancement Pack\SeaPort\SeaPort.exe
6.1.7100.0       6.1.7100.0 (w… C:\Windows\SYSTEM32\ntdll.dll
6.1.7100.0       6.1.7100.0 (w… C:\Windows\system32\kernel32.dll
6.1.7100.0       6.1.7100.0 (w… C:\Windows\system32\KERNELBASE.dll
6.1.7100.0       6.1.7100.0 (w… C:\Windows\system32\ADVAPI32.dll
7.0.7100.0       7.0.7100.0 (w… C:\Windows\system32\msvcrt.dll
6.1.7100.0       6.1.7100.0 (w… C:\Windows\SYSTEM32\sechost.dll

That´s all folks…

Espero ter ajudado.

Abraço e até a próxima.

Post to Twitter Enviar para o Twitter

Publicado por: tecdom em October 29th, 2009 | Categoria Powershell, Uncategorized



DEIXE UM COMENTÁRIO

rss feed