Juntemo-nos ao “lado negro da força…”
Construamos alguns scripts mais vocacionados para administração da máquina propriamente dita.
- Firewall
$profile = (new-object -com HNetCfg.FwMgr).LocalPolicy.CurrentProfile # Lista portas abertas $profile.Services | ? {$_.Enabled} | select -expand GloballyOpenPorts # Lista aplicações Autorizadas $profile.AuthorizedApplications | ? {$_.Enabled} | ft name # Lista serviços $profile.Services | ? {$_.Enabled} | ft name
- HotFixes instalados no sistema
$strComputer = "." $colItems = get-wmiobject -class "Win32_QuickFixEngineering" -namespace "rootCIMV2" -computername $strComputer foreach ($objItem in $colItems) { write-host "Origem: " $objItem.Caption write-host "CS: " $objItem.CSName write-host "Descrição: " $objItem.Description write-host "Comentários: " $objItem.FixComments write-host "HotFix ID: " $objItem.HotFixID write-host "Data Instalação: " $objItem.InstallDate write-host "Nome: " $objItem.Name write-host "Service Pack : " $objItem.ServicePackInEffect write-host "Estado: " $objItem.Status write-host }
Neste último exemplo foi usado o cmdlet get-wmiobject
. Este cmdlet faz o interface com o WMI (Windows Management Instrumentation) do Windows. O WMI é uma API do Sistema Operativo Windows que permite a obtenção da mais variada informação sobre a máquina em si. O WMI funciona por perguntas à diversas classes. Para mais informações sobre esta API usem o URL http://msdn.microsoft.com/en-us/library/aa384642(VS.85).aspx.
- Listar as partilhas de rede
$strComputer = "." $colItems = get-wmiobject -class "Win32_Share" -namespace "rootCIMV2" -computername $strComputer foreach ($objItem in $colItems) { write-host "Máscara Acesso: " $objItem.AccessMask write-host "Maximo Permitido: " $objItem.AllowMaximum write-host "Descrição: " $objItem.Description write-host "Nome: " $objItem.Name write-host "Path: " $objItem.Path write-host "Estado: " $objItem.Status write-host "Tipo: " $objItem.Type write-host }
- LoggOff ShutDown, Reboot
# Fazer Logoff na própria máquina $strComputer = "." (Get-WmiObject -Class Win32_OperatingSystem -ComputerName $strComputer).InvokeMethod("Win32Shutdown",0) # Outra forma de fazer loggOff (gwmi Win32_OperatingSystem).Win32Shutdown(0) # Fazer Logoff a uma máquina remota $strComputer = "Servidor-Blade" (gwmi win32_operatingsystem -ComputerName $strComputer ).Win32Shutdown(0) # Fazer Logoff a uma máquina remota pedindo credencias (gwmi win32_operatingsystem -ComputerName $strComputer -cred (get-credential)).Win32Shutdown(0) # Fazer Shutdown (gwmi win32_operatingsystem).Win32Shutdown(8) # Forçar Shutdown (gwmi win32_operatingsystem).Win32Shutdown(12) # Fazer Reboot (gwmi win32_operatingsystem).Win32Shutdown(2) # Forçar Reboot (gwmi win32_operatingsystem).Win32Shutdown(6)
Variáveis especiais
Variável | Descrição |
---|---|
$_ | Resultado do Pipeline; Usado em blocos de scripts, filtros, funções, where-object for-each, etc |
$$ | Contém o último token do último input |
$? | Contém o estado de sucesso/falha da última operação |
$Args | Usado na criação de funções ao qual é exigida uma passagem de parâmetros |
$Error | Contém o último erro gerado |
$foreach | Refere-se ao enumerador do ciclo for-each |
$HOME | A directoria do utilizador |
$input | Input pipe para uma função ou bloco de código |
$Match | Tabela de Hash com os elementos encontrados pelo operador -match |
$MyInvocation | Informação sobre o script actual |
$Host | Host actual |
$LastExitCode | O código de saída da última aplicação nativa que foi executada |
$true | TRUE |
$false | FALSE |
$null | NULL |
$false | FALSE |
$OFS | Campo Separador de Output |
$ShellID | O Identificador da SHELL |
$StackTrace | Contém o StackTrace do último erro |
Ajudas
Caso necessitemos de aceder à ajuda de algum cmdlet, basta invocar o comando get-Help
.
#ajuda sobre o cmdlet export-csv get-Help export-Csv -full #listar todos os comandos disponiveis que contenham a string "A" get-Command | Where {$_.name -match "A"}
Alguns Providers
Nome | Aliases | Descrição |
---|---|---|
Get-Location | gl | Directoria corrente |
Set-Location | sl | Muda de directoria |
Copy-Item | cpi | Copia ficheiros |
Remove-Item | ri | Remove um ficheiro/directoria |
Move-Item | mi | Move um ficheiro |
Rename-Item | rni | Muda o nome a um ficheiro |
New-Item | ni | Cria uma nova directoria |
Clear-Item | cli | Limpa o conteúdo de um ficheiro |
Set-Item | si | Define o conteúdo de um ficheiro |
Mkdir | n/a | Cria uma directoria |
Get-Content | gc | Envia o conteúdo de um ficheiro para o output |
Set-Content | sc | Define o conteúdo de um ficheiro |
Normalmente para pesquisar todos os aliases basta usarmos o seguinte comando:
Get-Alias
Conclusão
Os benefícios desta linguagem são óbvios. Tendo sido desenvolvida da robustez e extensibilidade da framework .NET, o PowerShell permite-nos desenvolver poderosos componentes, de uma forma eficaz e rápida. Pessoalmente penso que é um enorme upgrade em diversos níveis. Espero que vos seja útil.