Saída de dados no PowerShell. Exemplos interessantes do PowerShell

Há coisas que fazemos todos os dias como administradores. redes Windows, mas se nos pedissem para fazê-los usando a linha de comando, ao contrário dos administradores do Linux, seria bastante problemático para nós, administradores do Windows. O Windows sempre foi fraco quando se trata de ferramentas de linha de comando. Na minha opinião tudo mudou desde advento do Windows Powershell. Com o Powershell (ou, em outras palavras, PS), você pode executar tantas funções diferentes que não podíamos executar antes. Neste artigo, vamos nos concentrar em como o Powershell pode nos ajudar a executar algumas funções comuns de rede na linha de comando. Continue lendo para saber mais!

O que é o PowerShell?

Powershell é um programa instalável função Windows Server 2008. Para instalar o Powershell, você deve instalar o recurso Powershell usando o Assistente para Adicionar Recursos. O processo de instalação leva cerca de um minuto e, uma vez instalado o componente, você tem acesso a uma incrível linguagem de script de linha de comando. Ao contrário de outras linguagens de script no Windows, o Powershell foi projetado exclusivamente para administradores de sistema. Powershell usa .NET e comandos ("cmdlets" ou "command-lets") em seu trabalho. Como usuário do PS, você pode usar os comandos individualmente ou encadeá-los para concluir tarefas mais complexas.

Depois de instalar o PS, você poderá executar Iniciar -> Todos os Programas -> Windows Powershell 1.0, e pressione Windows PowerShell. Neste ponto, você deve ter uma janela CLI azul que se parece com a Figura 1.

Imagem 1: janela do Windows Comando Powershell

Você sempre pode dizer que está trabalhando no Powershell, porque a janela "PS" sempre tem a seguinte linha no início:

PS C:\Usuários\Administradores

Agora que o powershell está instalado e seu janela aberta, deixe-me mostrar algumas tarefas de rede comuns que podem ser executadas no PS.

Liste os endereços IP do seu servidor

Para obter uma lista de endereços IP em seu Servidor Windows 2008 Server, você precisa usar o seguinte comando:

Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE - ComputerName . | Select-Object -Property IPAddress

É assim que os dados ficam depois de usar este comando no meu Windows 2008 Server:


Figura 2: listando endereços IP usando o Windows Powershell

Como você pode ver na figura, os dados iniciais nos mostram que eu tenho um adaptador com um endereço IP V4 e um endereço IP V6 neste Windows 2008 Server. Por si só, isso não é surpreendente, mas pense no que você pode fazer com ele usando outras funções de script.

Como o guia do usuário do powershell nos ensina, os dados resultantes são uma matriz e você só pode ver o endereço IP passando esses dados para "Select-Object" (após desabilitar o IPV6), assim:

Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE - ComputerName . | Select-Object -ExpandPropertyIPAddress


Figura 3: listando um endereço IP APENAS com o Windows Powershell

Obtendo a lista de configuração do adaptador de rede usando o Powershell

Para visualizar a configuração básica do seu adaptador de rede, você pode usar o seguinte comando:

Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE "ComputerName .

Embora este artigo se concentre no uso do PS no Windows Server 2008, esse utilitário também pode ser usado no Windows XP, Vista ou Server 2003. Aqui está um exemplo da saída de um comando em execução no meu posto de trabalho XP:


Figura 4: PowerShell mostrando a configuração do adaptador de rede no Windows XP

Testar a sondagem do seu computador usando o PowerShell

Embora a linha de comando do PS ainda possa executar todos os comandos normais do Windows (como uma votação de teste), forte Powershell é que você pode pegar os dados recebidos e alterá-los com facilidade.

Aqui está um exemplo de como isso pode ser feito, fornecido pelo guia usuário do Windows Powershell. Neste exemplo, os resultados de Win32_PingStatus são analisados ​​usando Select-Object. Nesse caso, os dados simplesmente mostram o tempo de resposta e o código de status.

Aqui está o comando que foi usado:

Get-WmiObject -Class Win32_PingStatus -Filter "Address="127.0.0.1"" - ComputerName . | Select-Object -Property Address,ResponseTime,StatusCode

E aqui estão os resultados do uso do comando na minha máquina Windows:

Figura 5: Dados do PowerShell mostrando o status de uma votação analisada com Select-Object

Compartilhando uma pasta usando o Windows Powershell

Serei franco com você. Usar comandos do Powershell nem sempre é tão fácil quanto usar comandos existentes do Windows com os quais você já está familiarizado. Aqui está um exemplo.

O seguinte comando PS fornecerá acesso geral para uma pasta em C:\temp como "davidtemp" e aplique o ótimo comando a ela:

(Get-WmiObject -List -ComputerName . | Where-Object -FilterScript ($_.Name -eq "Win32_Share")).InvokeMethod("Create",("C:\temp","davidtemp",0,25, "Pasta Temporária de David"))

Por outro lado, você pode simplesmente usar o comando já testado e comprovado participação líquida:

Net share davidtemp=C:\temp /remark:"Pasta compartilhada temporária de David"


Figura 6: dados do PowerShell e comando net share tradicional

Observe que o comando Powershell não apenas falhou, mas também me deu um erro terrível. Eu tentei este comando no Windows XP e Vista e eu era o administrador do sistema.

Por outro lado, a equipe participação líquida muito simples e funcionou na primeira tentativa. E enquanto estou tentando orientá-lo sobre os fundamentos do Powershell, não se esqueça de que o Powershell pode usar comandos de rede tradicionais do Windows, que são muito mais fáceis de usar em muitos casos. No entanto, você pode se encontrar em uma situação em que esses comandos tradicionais não fazem tudo o que você precisa, e é aí que entra o Powershell.

Outros comandos de rede e mais avançados

Se você for usar apenas os comandos de administração de rede mais básicos no Powershell, pode ficar confuso e não usá-los mais porque, como qualquer outra linguagem de script, há muito o que aprender aqui.

No entanto, uma vez que você superou a curva de aprendizado e aprendeu a usar o idioma, você terá uma ferramenta muito eficiente e que pode economizar seu tempo.

Como você deve ter notado nos exemplos anteriores, um dos parâmetros para a maioria dos comandos do Powershell é "computername". Quando colocarmos um ponto (".") em vez de um nome de computador, será o localhost (nosso computador). No entanto, também podemos substituir qualquer endereço IP ou nome computador Windows no domínio, o que nos dá a oportunidade de usar esses comandos não apenas em nosso PC, mas também para criar scripts poderosos em Powershell que podem ser aplicados a todos os computadores da rede.

Por exemplo, aqui está um comando que envia o endereço IP de um computador Dell pela LAN:

Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE - ComputerName DELL9400

Aqui estão os resultados deste comando:


Figura 7: resultados do Powershell ao obter um endereço IP de um PC remoto

E aqui está uma imagem ampliada mostrando as informações necessárias:


Figura 8: Zoom na janela de resultados do Powershell para obter o endereço IP de um PC remoto

Portanto, a capacidade de trabalhar com computadores remotos é o principal recurso do Powershell, mas outro recurso poderoso é a capacidade de filtrar dados e combinar dados obtidos com o uso de diferentes comandos.

Dê uma olhada no seguinte exemplo:

"127.0.0.1","localhost","research.microsoft.com" | ForEach-Object -Process (Get- WmiObject -Class Win32_PingStatus -Filter ("Address="" + $_ + """) -ComputerName .) | Select-Object -Property Address,ResponseTime,StatusCode

Neste exemplo, uma lista de endereços IP e nomes de domínio foi obtida. Esta lista foi passada para "ForEach-Object". Para cada um desses "objetos" (endereço IP / nomes de domínio), o elemento PingStatus "Get-WmiObject" foi usado. Os dados de pesquisa para cada nome de domínio foram executados por meio de "Select-Object", resultando na exibição apenas de endereços, tempos de resposta e códigos de status.

Figura 9: Sondagem de teste com uma lista ao combinar e sondar dados

Na minha opinião, este exemplo demonstra alguns dos recursos do Powershell. Como você pode ver, é possível direcionar e redirecionar dados de entrada e saída em diferentes direções enquanto realiza suas tarefas administrativas.

O que mais você precisa saber?

Conclusão

O Windows Powershell é muito utilitário poderoso. Este artigo não pode descrever tudo o que você pode fazer com Powershell, mas espero ter conseguido dar uma visão geral das possibilidades desse utilitário e inspirá-lo a novas pesquisas nessa área. Todos os dias surgem novos livros, cursos e toneladas de material na Internet sobre as funções do Powershell que podem ser utilizadas pelos administradores do sistema Windows. Dado o forte apego que os administradores do Windows têm de GUI, levará tempo para que o Powershell seja aceito naquelas empresas que não têm uma forte necessidade dessa ferramenta. Tenho certeza de que os administradores usarão o Powershell para criar scripts mais curtos que podem ser usados ​​para executar tarefas mais complexas. Espero que o Powershell ganhe cada vez mais popularidade em todo o mundo!

Agradecimentos especiais à Microsoft por fornecer exemplos de comandos na documentação do Guia do Usuário do Windows Powershell.

Provavelmente todo mundo já ouviu falar do PowerShell, mas certamente nem todo mundo teve a chance de trabalhar com ele. Para aqueles que estão apenas começando a explorar a selva do PowerShell, fornecemos uma tradução de uma postagem que foi publicada no portal 4sysops.com. Ele fala sobre 7 comandos que vão ajudar quem está começando com o PowerShell. Para mais detalhes - bem-vindo em cat.

OBTER AJUDA

O primeiro e mais importante cmdlet do PowerShell é a chamada de ajuda. Com a ajuda do cmdlet Get-Help, você pode verificar a sintaxe, ver exemplos de uso e descrição detalhada dos parâmetros de qualquer cmdlet do PowerShell. Esse cmdlet é notável porque você pode simplesmente digitar Get-Help Services para obter uma lista de todos os cmdlets adequados para trabalhar com serviços.
Exemplo:
PS C:\> Serviço Get-Help

Você pode selecionar qualquer cmdlet da lista fornecida pela consulta acima para obter ajuda sobre ele. Por exemplo,
PS C:\> Get-Help -Name Get-Service
Você obtém todas as informações sobre o cmdlet Get-Service (discutido abaixo).


OBTER CONTEUDO

A leitura do conteúdo dos arquivos é o requisito mais comum para iniciantes que tentam aprender o PowerShell. O procedimento de leitura de arquivos com PowerShell é simplificado. Mesmo um leigo pode ler o conteúdo de um arquivo simplesmente passando-o para o cmdlet Get-Content.
Exemplo.
PS C:\> Get-Content C:\scripts\Computers.txt mytestpc1 techibee.com dummynotreresolutionhost.com PS C:\>

Precisa de mais informações sobre um cmdlet? Use Get-Help:
PS C:\> Get-Help Get-Content -Detailed

OBTER SERVIÇO

Este cmdlet lista todos os serviços instalados no computador. Você pode usá-lo para obter informações sobre um determinado serviço, uma coleção de serviços ou praticamente todos os serviços em um computador.
Exemplo:
PS C:\> Get-Service wwansvc, spooler Status Name DisplayName ------ ---- ----------- Running spooler Print Spooler Stopped wwansvc WWAN AutoConfig PS C:\>



Aqui solicitamos informações sobre dois serviços wwansvc e spooler
Uma tabela é exibida com o status do serviço, seu nome e seu nome de exibição.
Podemos ver que o serviço de spooler está em execução e o wwansvc está parado

PARAR-SERVIÇO E INICIAR-SERVIÇO

Iniciar e parar serviços é um ponto bastante importante no trabalho Administrador do Windows. O PowerShell possui cmdlets integrados que facilitam o trabalho do administrador sem exigir que eles abram o console do MMC. Usando esses cmdlets, você pode interromper/iniciar serviços em computadores locais e remotos.
Exemplos:
Inicie/interrompa o serviço no computador local (usando o serviço de spooler como exemplo):
PS C:\> Stop-Service -Name Spooler PS C:\> Start-Service -Name Spooler

Iniciar/parar serviço ativado computador remoto(bobina):
PS C:\> $ServiceObj = Get-Service -ComputerName MyPC1 -Name spooler PS C:\> Stop-Service -InputObj $ServiceObj PS C:\> Start-Service -InputObj $ServiceObj

GET-PROCESS

Esse cmdlet permite que você saiba quais processos estão sendo executados em computadores locais ou remotos. O nome e a ID do processo são mostrados, junto com o caminho do executável, nome da empresa, versão do executável e memória usada pelo processo.
Exemplos:
Obtendo informações sobre processos em execução no computador local:

PS C:\>Get-Process


Digite o seguinte cmdlet para obter informação detalhada O processos em execução
PS C:\> Get-Process | Format-List * -Force

Obtendo informações sobre processos em execução em um computador remoto:
PS C:\> Get-Process -ComputerName MYPC1 | Format-List * -Force

MYPC1 deve ser substituído pelo nome do computador do qual você deseja obter informações sobre os processos em execução.

PARAR PROCESSO

Este cmdlet interrompe um processo em um computador local ou remoto. Ele pega o nome ou ID de um processo e finaliza esse processo. Isso é útil nos casos em que o aplicativo não está respondendo.
Exemplo:
Pare o processo com ID 22608 na máquina local:
PS C:\> Stop-Process -Id 22608
Pare todos os processos do Excel no computador local:
PS C:\> Stop-Process -name excel

Conselho: embora o cmdlet Stop-Process não tenha o parâmetro -ComputerName, você ainda pode usá-lo para encerrar processos remotos usando o conselho sugerido abaixo:
PS C:\> $Obj = Get-Process -Name excel -ComputerName MYPC1 PS C:\> Stop-Process -InputObject $Obj

Atualizar:
A postagem contém uma tradução de um artigo do portal

Nossa visão geral se concentra no uso dos principais recursos do Windows PowerShell para executar várias tarefas administrativas. Primeiro, vamos dar uma olhada nas ferramentas de familiarização internas do Windows PowerShell.

Introdução ao Windows PowerShell

Portanto, você é um administrador que precisa dominar o Windows PowerShell no menor tempo possível. A primeira coisa que você provavelmente fará (além de consultar a documentação e sistema de ajuda), - use o comando Ajuda (Fig. 1).

Examinando cuidadosamente as informações exibidas na tela, chegaremos a um entendimento dos seguintes aspectos conceituais: O Windows PowerShell tem aliases, cmdlets, provedores e arquivos de ajuda. Aliases (alias) são usados ​​para simplificar a entrada de comandos (por exemplo, clcé o alias de comando conteúdo claro), cmdlets (cmdlets) são a implementação de todos os comandos incorporados ao Windows PowerShell, provedores (provedor) fornecem acesso ao sistema de arquivos, registro, armazenamento de certificados, etc., e arquivos de ajuda (helpfile) são usados ​​para obter Informações adicionais. por conseguir descrição detalhada comandos usam a seguinte sintaxe:

PS C:> Ajuda Get-Command

Como resultado da execução deste comando, obteremos Descrição completa comandos GetCommand, incluindo sua finalidade, sintaxe, opções e assim por diante. (Figura 2).


Para obter uma lista de todos os comandos integrados, use a seguinte sintaxe:

PS C:>Get-Command

Observe que todos os comandos consistem em um verbo e um adjetivo (por exemplo, Obter conteudo, console de exportação) e todos os comandos suportam sistema único nomeação - por exemplo, o verbo Stop é sempre usado para encerrar algo, e não Kill, Terminate, Halt ou outros sinônimos, o que simplifica muito o estudo dos recursos do PowerShell (Fig. 3).


Equipe obter serviçoé usado para obter uma lista de todos os serviços em execução este computador. Por exemplo,

PS C:>Get-Service

retorna a lista mostrada na Fig. 4.


Para obter uma lista dos processos atualmente em execução no computador, use o comando GetProcess(Fig. 5):


PS C:>Get-Process

O Windows PowerShell oferece suporte à conclusão de entrada automática. Para verificar isso, digite Get-P e pressione a tecla TAB: você poderá selecionar todos os comandos começando pelos caracteres digitados.

Para obter informações sobre apenas um processo como um argumento de comando GetProcess o nome deste processo é definido (Fig. 6):

PS C:> Get-Process explorer

Para obter uma lista de todos os processos cujos nomes começam com um determinado caractere, basta especificar esse caractere e "*" (Fig. 7):


PS C:> Get-Process i*

Preste atenção nas colunas que contém informações - Handles, NMP(K), etc. Por padrão, as informações são exibidas como uma tabela, mas, na verdade, todos os comandos retornam objetos. Esses objetos podem ser passados ​​como entrada para outros comandos usando o caractere "|". (Fig. 8):


PS C:> Get-Process i* | lista de formatos

A lista de processos agora está disponível em uma visão diferente. Para obter informações detalhadas sobre os vários formatos, você pode usar o seguinte comando:

PS C:> Formato de ajuda *

Outros formatos possíveis:

PS C:> Get-Process i* | formato largo

PS C:> Get-Process i* | formato personalizado

Como a saída é sempre um objeto, ela pode ser manipulada para executar operações adicionais, como filtragem:

PS C:> Get-Process | onde ($_.handlecount -gt 400)

ou classificação:

PS C:> Get-Process | onde ($_.handlecount -gt 400) | Identificadores de objeto de classificação

Uma pergunta bastante razoável pode surgir: como sabemos que o objeto que descreve o processo tem a propriedade contagem de endereços? Para obter uma lista de todas as propriedades de um objeto, o seguinte comando é usado (Fig. 9):


PS C:> Get-Process | Obter membro

Execute o comando ObterProcesso | Obter empresa membro- com formatação padrão, é impossível obter os dados desejados. Vamos converter o comando recebido para:

PS C:> Get-Process | Obter Empresa Membro | Lista de formatos

O resultado de sua transformação é mostrado na Fig. 10.


PS C:> Get-Process | classificar-objeto Empresa | format-table -Group Nome da empresa, descrição, identificadores

O resultado da execução deste comando é mostrado na Fig. onze.


Equipe parar o processo permite interromper um processo em execução, por exemplo:

PS C:> Get-process notepad | parar o processo

Essa possibilidade nem sempre é segura, por isso é melhor usar esses comandos com a opção e se, que mostra o que acontece quando um determinado comando é executado, mas o comando não é realmente executado:

PS C:> bloco de notas Get-Process | stop-process -whatif

Além disso, você pode indicar a necessidade de confirmação antes de executar o comando:

PS C:> bloco de notas Get-Process | stop-process -confirm

O resultado da execução do comando com confirmação é mostrado na Fig. 12.


No último exemplo, obtemos uma descrição das ações que o comando executa e podemos escolher se desejamos confirmar ou não sua execução.

Você também pode criar seus próprios arquivos em lote, que são arquivos *.ps1 que contêm comandos do PowerShell, e executá-los. Os arquivos em lote devem ser assinados por segurança. Ao testar, você pode desativar o requisito para executar apenas arquivos assinados:

P.S. C:>Set-ExecutionPolicy Unrestricted

mas depois de testar, não esqueça de habilitar essa opção novamente com o seguinte comando:

P.S. C:> Set-ExecutionPolicy AllSigned

Depois de conhecer Noções básicas do Windows PowerShell vamos ver como você pode usar este utilitário para executar várias tarefas administrativas.

Trabalhando com o sistema de arquivos

Uma das tarefas que muitos profissionais de TI costumam enfrentar está relacionada à manipulação de arquivos, como copiar, mover, renomear, excluir arquivos e diretórios. Na fig. A Figura 13 mostra os comandos básicos do Windows PowerShell usados ​​para manipular sistema de arquivo: novo item, item de cópia, mover item, renomear item E remover item.


Ao contrário de outros shells que possuem um conjunto de comandos para arquivos (como excluir ou renomear) e um conjunto para diretórios (como rd ou md), o Windows PowerShell usa um único conjunto de comandos para manipular arquivos e diretórios.

O primeiro comando em nosso exemplo é new-item TextFiles --itemtype diretório- usado para criar um novo subdiretório TextFiles no diretório atual. Se você omitir o parâmetro -Tipo de item, o Windows PowerShell perguntará se estamos criando um arquivo (arquivo) ou um diretório (diretório). Observe que a equipe novo item existe um pseudônimo - ni. Resumindo, nosso primeiro comando ficaria assim:

PS C:> ni TextFiles --itemtype diretório

Usamos então o comando item de cópia(apelido - cpi, cp, copiar) para copiar todos os arquivos *.txt para o subdiretório TextFiles. Se você usar este comando em um arquivo em lote, faz sentido torná-lo mais compreensível especificando parâmetros -caminho(fonte) e -destino(receptor):

PS C:>copy-item –path ‘.\*.txt’ –destination ‘.\TextFiles’

Depois de executar o comando copy, usamos o comando defina localização para navegar até o subdiretório TextFiles. Com o comando renomear item renomeie o arquivo psdemo.txt para psdemo.bak. As opções podem ser aplicadas conforme necessário. -caminho E -novo nome. Depois que o arquivo for renomeado, mova-o um nível acima usando o comando mover item. Em seguida aplicamos o comando defina localização, ou melhor, seu pseudônimo sl para mover para outro diretório. Concluímos as manipulações com o sistema de arquivos excluindo todo o diretório TextFiles usando o comando remover item. Como o diretório TextFiles contém arquivos, a opção é aplicada --recurso. Se esta opção não for especificada, o Windows PowerShell solicitará confirmação antes de executar o comando. remover item.

Trabalhando com o registro

Ao fazer várias configurações e tentar descobrir quaisquer parâmetros, às vezes temos que nos referir a registro do sistema procurando por chaves, valores, etc. Usando os recursos do Windows PowerShell, esta tarefa pode ser resolvida bastante de forma simples. Os recursos do Windows PowerShell são mostrados na Figura 1. 14.


Nosso primeiro comando usa um alias sl para executar um comando defina localização, que altera nossa localização atual do sistema de arquivos para a ramificação HKEY_CURRENT_USER no registro do sistema:

PS C:\> sl hkcu:

Observe que, assim como o sistema de arquivos, o PowerShell usa um provedor especial para acessar o registro.

Os comandos acima são equivalentes a:

PS C:\> registro sl:hkcu

PS C:\>sl hkey_current_user

O comando a seguir carrega o conteúdo de toda a ramificação do registro HKEY_CURRENT_USER na variável reg:

PS HKCU:\> $reg = gci . –rec –ea continua silenciosamente

Para isso utilizamos o comando get-childitem(aliás - gci), cujo princípio é semelhante ao trabalho com o sistema de arquivos. O primeiro argumento para este comando é "." - indica que queremos obter o conteúdo da ramificação do registro atual - HKEY_CURRENT_USER. O segundo argumento é uma abreviação de opção --recurso e indica que precisamos coletar dados recursivamente de todos os subramos do ramo de registro atual. E, finalmente, o terceiro argumento - –ea continua silenciosamente- indica que o comando deve continuar a ser executado mesmo em caso de erros associados à falta de direitos de acesso a determinados subramos do registro.

O seguinte comando em nosso exemplo:

PS HKCU:\>$s = $reg | % (if (gp $_.pspath) --match 'PowerShell')($_.pspath))

copia dados do registro contendo a string 'PowerShell'. Começamos pegando um objeto registro e redirecione-o para o comando % , que é o alias de comando para cada. Ele executa uma travessia recursiva de todas as entradas de registro que estão no objeto registro e em cada etapa armazena o elemento em um objeto especial do PowerShell chamado ‘_’ . EM chaves especificamos as ações que devem ser executadas em cada etapa da execução do comando para cada. dentro do bloco para cada usamos validação se para descobrir se a entrada de registro atual e sua propriedade pspath correspondem, o que obtemos por meio de uma chamada ao comando get-itemproperty(através do pseudônimo gp), nosso critério - a presença de uma string 'PowerShell'. Se for encontrada uma correspondência, retornamos o valor da propriedade pspath. Todas as correspondências encontradas são armazenadas no objeto s.

Terminamos de trabalhar com o registro redirecionando os resultados da pesquisa para o comando objeto de seleção(através do pseudônimo selecionar) e mostre os dois primeiros resultados encontrados. Como exercício, você pode redirecionar os resultados finais para um arquivo com o comando arquivo de saída.

Acesso a processos

Outro desafio que os profissionais de TI podem enfrentar é detectar anomalias no sistema, como processos que consomem muita memória. Vamos ver como esse problema é resolvido ferramentas do Windows PowerShell (Figura 15).


No primeiro comando, armazenamos informações sobre todos os processos em execução neste computador em uma variável $allprocs:

P.S. C:\> $allprocs = get-process

Depois disso, redirecionamos as informações recebidas para o comando para cada, que também pode ser especificado por um alias % ou para cada. Este comando percorre todos os objetos associados ao processo e, a cada etapa, armazena as informações no objeto interno $_ . Este objeto pode ser chamado convencionalmente de objeto atual. Como parâmetros para o comando para cada especificamos a operação de comparação do valor da propriedade tamanho da memória virtual com o tamanho da memória que nos interessa (20 MB em nosso exemplo). Se o valor desta propriedade para o objeto atual for maior que o especificado, mostramos o nome do processo na tela. Observe que o PowerShell oferece suporte às principais abreviações para especificar tamanhos - KB, MB, GB, o que é muito útil, pois você não precisa contar zeros ao especificar tamanhos de memória, discos etc.

Acesso ao log do sistema

Ao tentar descobrir as causas das falhas, muitas vezes recorremos ao log do sistema, que armazena muitos informação útil sobre os eventos que ocorrem no sistema. Normalmente, o utilitário Event Viewer (eventvwr.exe) é usado para examinar o log do sistema. No PowerShell, podemos usar os comandos internos, como o comando get-eventlog, para examinar rapidamente o conteúdo do log do sistema (Fig. 16).


Nosso primeiro comando carrega as principais informações do log do sistema:

PS C:\> get-eventlog --list

Sem usar a opção -lista O PowerShell solicitará o nome exato do syslog. Em nosso exemplo, vemos vários pontos de entrada no log do sistema: Aplicativo, Internet Explorer, Sistema, Windows Power Shell, etc. Nosso próximo comando extrairá entradas do syslog que são do tipo "Erro":

PS C:\> $bad = get-eventlog “Sistema” | where-object ( $ _.EntryType –eq "Erro" )

Usamos o comando get-eventlog, para o qual especificamos o parâmetro "Sistema" para extrair apenas registros do sistema - poderíamos especificar isso mais claramente aplicando o parâmetro logName. conteúdo variável $ruim passado como entrada para o comando onde-objeto para filtrar apenas registros de nosso interesse. Como argumentos de comando onde-objeto indicamos que estamos procurando apenas registros que tenham a propriedade Tipo de entradaé igual a "Erro".

Concluímos o exame do syslog exibindo cinco Entradas recentes sobre erros usando o comando objeto de seleção com parâmetro -durar:

PS C:\>$ruim | selecionar-objeto -últimos 5

Acesso WMI

Como sabemos, o Windows Management Instrumentation (WMI) é a implementação da Microsoft do padrão Common Information Model (CMI). Na maioria dos casos, o WMI é usado por profissionais de TI para obter informações sobre hardware e Programas instalado neste computador. Como veremos no próximo exemplo, Uso do Windows O PowerShell facilita muito o acesso às informações armazenadas no WMI (Figura 17).


Na primeira linha usamos o comando get-wmiobject para obter informações sobre o arquivo usado para trocar a memória para o disco e armazenar essas informações em uma variável $pfu:

PS C:\> $pfu = get-wmiobject - classe 'win32_pageFileUsage'

PS C:\> $pfu | propriedade get-member --membertype | where_object ($_.name --nomatch '_')

Normalmente, para encontrar informações sobre uma determinada classe, você pode usar o comando obtenha-membro sem especificar parâmetros, mas em nosso exemplo estamos interessados ​​apenas nas propriedades disponíveis e apenas naquelas que não contêm sublinhado no nome. Um leitor atento pode ter uma dúvida: como ficamos sabendo da existência da classe win32_pageFileUsage? Afinal, sabe-se que mais de mil classes são suportadas no WMI, além disso, vários aplicativos adicionam suas próprias classes. Você pode aplicar o comando:

PS C:\> get-wmiobject --list

para obter uma lista de todas as classes existentes no sistema. Depois de determinarmos as propriedades da classe à nossa disposição, exibimos na tela o conteúdo das propriedades que nos interessam:

PS C:\> $pfu.caption; $pfu.currentusage

A segunda parte do nosso exemplo é sobre outra classe - win32_DiskDrive, que armazena informações sobre os discos instalados no sistema. Esta classe é um exemplo de uma classe WMI contendo mais de um objeto. Em nosso exemplo, definimos o valor da propriedade rubrica a primeira unidade instalada no sistema:

PS C:\>$dd.caption

Usando arquivos XML

EM Ultimamente Os arquivos XML estão sendo cada vez mais usados ​​para armazenar informações de configuração. À medida que os dados no arquivo XML se acumulam, eles se tornam cada vez menos legíveis. A seguir, veremos como aplicar recursos do Windows PowerShell para trabalhar com arquivos XML.

Por exemplo, pegue a configuração arquivo do Windows Calendário semelhante a este (Figura 18):

e execute as manipulações mostradas na Fig. 19.

Na primeira linha, carregamos o conteúdo de todo o arquivo XML em uma variável usando o comando obter conteudo:

PS C:\> $doc = get-content ‘.\settings.xml’

Preste atenção ao uso do tipo de dados : se você não especificar o uso de dados desse tipo, apenas o texto será carregado na variável.

Na segunda linha, selecionamos uma ramificação específica do arquivo XML - para isso usamos o método nós de seleção um objeto que armazena dados XML e uma descrição XPath do endereço da ramificação:

PS C:\> $settings = $doc.selectnode('CalendarSettings/X-Root/VCalendar')

Depois disso usamos o comando foreach-objeto para obter o valor da propriedade Nome para todos os elementos neste ramo.

Conclusão

Analisamos os principais recursos do Windows PowerShell para simplificar as tarefas que os profissionais de TI enfrentam. Como sabemos, essas tarefas geralmente são resolvidas usando a linguagem de script VBScript. O Windows PowerShell tem a capacidade de usar o código VBScript existente e, portanto, a migração é bastante simplificada (Figura 20).


O exemplo acima mostra como você pode usar o código VBScript existente no PowerShell. Na primeira linha, criamos um novo objeto COM, que é o núcleo da execução de programas de script - ScriptControl. Em seguida, indicamos que usaremos a linguagem Visual Basic Script. A terceira linha especifica o código VBScript real - em nosso exemplo, esta é uma chamada para a função MsgBox, mas, na prática, você pode, por exemplo, carregar o código do arquivo em uma variável. E por fim, na última linha, adicionamos o código VBScript ao nosso objeto - e o código vai para execução.

Recursos de rede

Blog da equipe de produtos: http://blogs.msdn.com/PowerShell/ .

Utilitários, editores e complementos: http://www.powershell.com/.

Blog de Dmitry Sotnikov da Quest: http://dmitrysotnikov.wordpress.com/ .

PowerGadgets é um exemplo das possibilidades ilimitadas de uma extensão do PowerShell:

1. Escrevendo um roteiro

O script do PowerShell (não importa qual versão) é arquivo de texto com extensão *.ps1.

Aqui está um exemplo de um script simples do Power Shell (arquivo systemInfo.ps1 ):

# Recupera o objeto WMI para o sistema operacional

Get-WmiObject Win32_OperatingSystem

Este arquivo pode ser criado e editado, por exemplo, em Gerente FAR.

observaçãoaquele FAR Manager, embora possa funcionar no console Power Shell, mas executa scripts de si mesmo no ambiente de um console normal do Windows cmd . Ou seja, o FAR Manager só pode ser usado para criar e editar scripts do PowerShell, mas não para executar. Mas antes de ficar frustrado, leia o ponto 3.

2. Execute o script

O script deve ser executado a partir do console do Power Shell, não do usual Consoles do Windows. No console do Power Shell, você precisa ir para o diretório onde o script está localizado (usando os comandos cd ) e, em seguida, execute o próprio script, certifique-se de prescrever os caracteres antes dele".\" . Por exemplo, temos o caminho para o arquivo de script d:\trabalho\systemInfo.ps1 . Em seguida, os comandos de inicialização ficarão assim:

d:

cd\

trabalho de cd

.\systemInfo.ps1

ou assim (basta indicar o caminho completo para o script):

d:\trabalho\systemInfo.ps1

Muito provavelmente, ao executar o script, o seguinte erro aparecerá:

Não é possível carregar o arquivo D:\work\systemInfo.ps1 porque o script não é permitido neste sistema. Digite "get-help about_signing" para obter mais informações.

string:1 caractere: 18

CategoryInfo: NotSpecified: (:) , PSSecurityException

FullyQualifiedErrorId: RuntimeException

O erro aparece porque, por padrão, a política de segurança máxima está habilitada no Power Shell, que permite executar comandos do PowerShell em linha de comando, mas não permite executar um script com comandos do PowerShell na mesma linha de comando.

Para habilitar a execução de scripts do PowerShell, você precisa criar um arquivo *.bat, por exemplo, enableScript.bat com o seguinte conteúdo:

powershell -Command Set-ExecutionPolicy RemoteSigned

Este arquivo *.bat pode ser executado em qualquer console: até mesmo no PowerShell, até mesmo no cmd . Depois de executar este arquivo, os scripts do PowerShell começarão a ser executados no console do PowerShell.

3. Executando um script do PowerShell a partir de um console cmd normal do Windows

Você também pode executar um script do PowerShell em um console normal do Windows. Para fazer isso, você pode usar o comando:

Powershell -Arquivo ./systemInfo.ps1

Assim, você pode executar scripts diretamente do FAR Manager, e eles funcionarão.

Mas há uma pequena sutileza aqui. Parâmetro-Arquivo dispara apenas em caminhos locais, mesmo que o caminho seja relativo"./" . Ou seja, se *.ps1 - o arquivo está na unidade local Cordão: , essa chamada funcionará. Mas se você tentar executar um script localizado em um recurso de domínio, o script não será encontrado. Talvez isso seja corrigido em versões futuras do PowerShell.

Cmdlets em Windows PowerShell muito então hoje proponho considerar uma pequena lista dos cmdlets mais úteis e comumente usados ​​com uma breve descrição do que eles podem fazer. Este manual ajudá-lo a encontrar rapidamente o que procura Comando do Windows PowerShell e destina-se a administradores de sistema novatos.

Observação! Esta referência é baseada em cmdlets do PowerShell 5.0 no sistema operacional Windows Server 2016.

Cmdlets úteis do Windows PowerShell

Nesta seção, listarei os cmdlets do PowerShell que você definitivamente usará.

  • Get-Help - Exibe a ajuda do cmdlet, as funções e a ajuda geral do Windows PowerShell. A ajuda pode ser de vários tipos: curta, detalhada, completa e apresentando apenas exemplos;
  • Update-Help - Baixa e instala novos arquivos de ajuda, ou seja. atualização de ajuda;
  • Get-Command - pesquisar cmdlet comando desejado, você pode pesquisar tanto por verbo quanto por substantivo, também é possível usar uma máscara caso não saiba o nome exato do verbo ou substantivo;
  • Get-Alias ​​​​- mostra aliases, todos ou um comando específico;
  • Get-PSDrive - mostra as unidades conectadas;
  • Get-Member - exibe as propriedades e métodos que um objeto possui;
  • Get-WindowsFeature - exibe informações sobre as funções e recursos de servidor disponíveis;
  • Install-WindowsFeature( equivalente a Add-WindowsFeature) - instala funções ou componentes no servidor especificado;
  • Uninstall-WindowsFeature( equivalente a Remove-WindowsFeature) - remove funções ou componentes do servidor;
  • Get-History - retorna uma lista de comandos inseridos durante a sessão atual.

Trabalhando com variáveis

No PowerShell, para criar uma variável, defini-la como um valor ou obter esse valor, você normalmente usa o cifrão $ ( curto e conveniente), mas existem cmdlets especiais para essa finalidade.

  • Get-Variable - exibe uma lista de variáveis ​​e seus valores ( ou uma variável especificada);
  • New-Variable - cria uma nova variável;
  • Set-Variable - Define o valor de uma variável. Se uma variável com o nome especificado não existir, ela será criada;
  • Clear-Variable - remove o valor de uma variável;
  • Remove-Variable - Remove uma variável e seu valor.

Formatação no Windows PowerShell

O Windows PowerShell tem um conjunto de cmdlets projetados para formatar a saída de um cmdlet. Eles permitem que o usuário exiba o resultado na forma em que for conveniente para ele visualizar esse resultado.

  • Format-List - exibe o resultado do comando no formato de uma lista de propriedades, onde cada nova linha possui uma propriedade separada;
  • Format-Table - exibe o resultado do comando na forma de uma tabela;
  • Format-Wide - exibe o resultado do comando como uma tabela ampla, na qual é exibida apenas uma propriedade de cada objeto;
  • Format-Custom - neste caso, a saída é formatada usando uma exibição personalizada.

Importar e exportar

O PowerShell permite importar e exportar dados em vários formatos comuns, como CSV ou XML, bem como redirecionar a saída de um comando para arquivo externo ou para uma impressora.

  • Export-Csv - exporta dados para o formato CSV;
  • Import-Csv - importa dados de um arquivo CSV;
  • Export-Clixml - exporta dados para o formato XML;
  • Import-Clixml - Importa um arquivo CLIXML e cria os objetos apropriados no Windows PowerShell;
  • Out-File - envia a saída do cmdlet para um arquivo externo ( por exemplo em txt);
  • Out-Printer - envia o resultado do comando para a impressora;
  • Import-Module - Adiciona módulos à sessão atual.

Rede no Windows PowerShell

Para administração de rede no Windows PowerShell, existem cmdlets como:

  • Disable-NetAdapter - o cmdlet desativa o adaptador de rede;
  • Enable-NetAdapter - Este cmdlet habilita o adaptador de rede;
  • Rename-NetAdapter - renomeia o adaptador de rede;
  • Restart-NetAdapter - reinicia o adaptador de rede;
  • Get-NetIPAddress - exibe informações sobre a configuração do endereço IP;
  • Set-NetIPAddress - altera a configuração do endereço IP;
  • New-NetIPAddress - cria e configura um endereço IP;
  • Remove-NetIPAddress - remove um endereço IP e sua configuração;
  • Get-NetRoute - exibe a tabela de roteamento IP;
  • Set-NetRoute - Altera a tabela de roteamento IP;
  • New-NetRoute - cria uma entrada na tabela de roteamento IP;
  • Remove-NetRoute - remove uma ou mais entradas ( rotas IP) da tabela de roteamento IP;
  • Get-NetIPv4Protocol - exibe informações sobre a configuração do protocolo IPv4;
  • Get-NetIPv6Protocol - exibe informações sobre a configuração do protocolo IPv6;
  • Get-NetIPInterface - exibe informações sobre as propriedades da interface IP;
  • Get-NetTCPSetting - mostra informações sobre configurações e configurações de TCP;
  • Test-Connection - o cmdlet envia pacotes ICMP para um ou mais computadores, ou seja, " pings" computadores.

Trabalhando com elementos

O Windows PowerShell possui cmdlets que podem trabalhar com elementos, os elementos aqui podem ser entendidos como: arquivos, pastas, chaves de registro e assim por diante.

  • Clear-Item - limpa o conteúdo de um item, mas não remove o próprio item;
  • Copy-Item - copia um item;
  • Get-Item - Obtém o item no local especificado;
  • Invoke-Item - executa a ação padrão no item especificado;
  • Move-Item - move o item;
  • New-Item - cria um novo item;
  • Remove-Item - remove os itens especificados;
  • Rename-Item - renomeia um item no namespace do provedor do Windows PowerShell;
  • Set-Item - altera um item;
  • Get-ChildItem - retorna itens e itens filho em um ou mais locais especificados;
  • Get-Location - exibe informações sobre o local atual.

Cmdlets para trabalhar com o Active Directory (AD)

O Windows PowerShell, é claro, permite que você trabalhe com o serviço de diretório do Active Directory. Existem muitos cmdlets para essa finalidade, aqui estão alguns deles:

  • New-ADUser - cria um novo usuário no Active Directory;
  • Get-ADUser - exibe informações sobre usuários do Active Directory;
  • Set-ADUser - Altera um usuário do Active Directory;
  • Remove-ADUser - remove um usuário do Active Directory;
  • New-ADGroup - o cmdlet cria um grupo no Active Directory;
  • Get-ADGroup - exibe informações sobre um grupo ou realiza uma pesquisa para obter vários grupos do Active Directory;
  • Set-ADGroup - o cmdlet altera um grupo no Active Directory;
  • Remove-ADGroup - remove um grupo no Active Directory;
  • Add-ADGroupMember - o cmdlet adiciona contas de usuário, computador ou grupo como novos membros de um grupo do Active Directory;
  • Get-ADGroupMember - exibe informações sobre os membros de um grupo do Active Directory;
  • Remove-ADGroupMember - remove membros de um grupo do Active Directory;
  • Set-ADAccountPassword - redefinição de senha conta Active Directory
  • Disable-ADAccount - Desativa uma conta do Active Directory.
  • Enable-ADAccount - ativa uma conta do Active Directory;
  • Unlock-ADAccoun - desbloqueia uma conta do Active Directory;
  • New-ADComputer - crie uma nova conta de computador no Active Directory;
  • Get-ADComputer - exibe informações sobre um ou mais computadores no Active Directory;
  • Set-ADComputer - altera a conta do computador no Active Directory;
  • Remove-ADComputer - Remove um computador do Active Directory.

Trabalhando com Hyper-V

Existem muitos cmdlets para trabalhar com o Hyper-V no Windows PowerShell, aqui está uma pequena lista:

  • New-VM - criando um novo máquina virtual;
  • Set-VM - configurando uma máquina virtual;
  • Start-VM - inicia a máquina virtual;
  • Stop-VM - feche, desligue ou salve a máquina virtual;
  • Import-VM - importação de uma máquina virtual de um arquivo;
  • Move-VM - mover uma máquina virtual para um novo host Hyper-V;
  • Remove-VM - remove uma máquina virtual;
  • Rename-VM - renomeie a máquina virtual;
  • New-VHD - crie um ou mais novos arquivos virtuais Discos rígidos;
  • Set-VHD - configurando um virtual disco rígido;
  • Test-VHD - Testar o disco rígido virtual em busca de problemas que o tornem inutilizável;
  • Adicionar-VMDvdDrive - adiciona disco DVD para a máquina virtual;
  • Remove-VMDvdDrive - remove uma unidade de DVD de uma máquina virtual;
  • Adicionar-VMHardDiskDrive - adiciona disco rígido para a máquina virtual;
  • Remove-VMHardDiskDrive - remove um ou mais discos rígidos virtuais (VHDs) de uma máquina virtual;
  • Add-VMNetworkAdapter - adiciona um adaptador de rede virtual a uma máquina virtual;
  • Remove-VMNetworkAdapter - remove um ou mais adaptadores de rede de uma máquina virtual;
  • Copy-VMFile - copia arquivos para uma máquina virtual;
  • Get-VMVideo - exibe informações sobre configurações de vídeo para máquinas virtuais;
  • Move-VMStorage - mova o armazenamento da máquina virtual.

Trabalhando com trabalhos em segundo plano

O Windows PowerShell tem a capacidade de executar tarefas em fundo, de modo que, sem esperar o fim do comando ( para casos em que a tarefa está em execução por um longo período de tempo), continue a trabalhar na sessão atual. Para trabalhar com trabalhos em segundo plano no PowerShell, existem os seguintes cmdlets:

  • Start-Job - inicia uma tarefa em segundo plano;
  • Stop-Job - parar uma tarefa em segundo plano
  • Get-Job - visualize uma lista de tarefas em segundo plano;
  • Receive-Job - visualize o resultado da tarefa em segundo plano;
  • Remove-Job - remove uma tarefa em segundo plano;
  • Wait-Job - traz uma tarefa em segundo plano para o primeiro plano para aguardar sua conclusão.

Trabalhando com objetos

Como o PowerShell trabalha com objetos, ele permite que você execute determinadas ações nesses objetos, por exemplo:

  • Measure-Object - o cmdlet permite calcular, com base nas propriedades dos objetos, parâmetros de agregação numérica como: mínimo, máximo, valor médio, soma e quantidade. Por exemplo, você deseja saber o tamanho máximo ou médio do arquivo em um diretório específico, ou apenas descubra o número de arquivos ( executando processos, serviços e assim por diante);
  • Select-Object - usando este cmdlet, você pode selecionar determinados objetos ou propriedades desses objetos, por exemplo, deseja exibir apenas o nome do arquivo e seu tamanho;
  • Sort-Object - classifica objetos por valores de propriedade;
  • Where-Object - um cmdlet para definir uma condição para selecionar objetos com base nos valores de suas propriedades;
  • Group-Object - Agrupa objetos que contêm mesmo valor para determinadas propriedades;
  • ForEach-Object - itera sobre objetos para executar uma operação específica em cada um desses objetos.

Cmdlets do PowerShell para gerenciamento remoto

COM janelas O PowerShell pode executar comandos não apenas no computador local, mas também em um ou até em vários computadores remotos.

  • Enter-PSSession - inicia uma sessão interativa com um computador remoto;
  • Exit-PSSession - encerra uma sessão interativa com um computador remoto;
  • New-PSSession - cria uma conexão permanente com um computador local ou remoto;
  • Remove-PSSession - Fecha uma ou mais sessões do Windows PowerShell;
  • Disconnect-PSSession - Desconecta de uma sessão;
  • Connect-PSSession - conecta-se a sessões desconectadas;
  • Get-PSSession - Obtém sessões do Windows PowerShell em computadores locais e remotos;
  • Invoke-Command - Executa comandos em computadores locais e remotos.

Trabalhando com serviços e processos

O PowerShell, claro, pode gerenciar serviços e processos no Windows, para isso existem cmdlets como:

  • Get-Process - exibe informações sobre processos em execução no computador;
  • Start-Process - inicia um ou mais processos no computador;
  • Stop-Process - interrompe um ou mais processos em execução;
  • Get-Service - exibe informações sobre serviços;
  • Restart-Service - reinicia o serviço;
  • Start-Service - inicia o serviço;
  • Stop-Service - interrompe o serviço;
  • Suspend-Service - suspende o serviço;
  • Set-Service - Usando este cmdlet, você pode alterar as propriedades de um serviço, como descrição, nome de exibição e modo de inicialização. Também pode ser usado para iniciar, parar ou pausar um serviço.

Trabalhar com computador

O Windows PowerShell permite que você execute tarefas administrativas para o sistema operacional e o computador como um todo, como reiniciar sistema operacional ou renomeie o computador.

  • Restart-Computer - O cmdlet reinicia o sistema operacional ( reinicia o computador);
  • Stop-Computer - desliga o computador;
  • Rename-Computer - renomeia o computador;
  • Checkpoint-Computer - cria um ponto de restauração do sistema no computador local;
  • Restore-Computer - inicia a restauração do sistema no computador local;
  • Disable-ComputerRestore - desativa o recurso de restauração do sistema na unidade de sistema de arquivos especificada;
  • Enable-ComputerRestore - ativa a função de restauração do sistema na unidade de sistema de arquivos especificada;
  • Remove-Computer - remove computador local do domínio
  • Get-EventLog - exibe informações sobre eventos no log de eventos ou uma lista de logs de eventos no computador local ou remoto;
  • Clear-EventLog - Limpa as entradas dos logs de eventos especificados.

Gerenciamento de conteúdo

Para gerenciar conteúdo, por exemplo, texto em um arquivo no Windows PowerShell, existem cmdlets especiais, como:

  • Get-Content - Obtém o conteúdo de um elemento ( por exemplo, lê um arquivo);
  • Add-Content - adiciona conteúdo aos elementos fornecidos, por exemplo, texto a um arquivo;
  • Clear-Content - Limpa o conteúdo de um elemento, mas não exclui o próprio elemento;
  • Set-Content - Grava ou substitui o conteúdo de um elemento por um novo conteúdo.

Outros cmdlets do Windows PowerShell

Também gostaria de destacar os seguintes cmdlets do Windows PowerShell, que você certamente precisará e será útil.

  • Get-ExecutionPolicy - Usando este cmdlet, você pode descobrir a política de execução efetiva do Windows PowerShell para a sessão atual;
  • Set-ExecutionPolicy - O cmdlet altera a política de execução do Windows PowerShell.
  • Write-Host - exibe informações na tela ( escreve texto);
  • Read-Host - lê a linha de entrada do console;
  • Write-Warning - exibe uma mensagem de aviso;
  • Write-Error - o cmdlet declara um erro e o envia para o fluxo de erros;
  • Get-Date - retorna a data e hora atuais;
  • Set-Date - O cmdlet altera a data e hora do sistema no computador.

Portanto, revisamos os cmdlets úteis e usados ​​com frequência do Windows PowerShell. Espero que este guia seja útil para você, boa sorte!

gastroguru 2017