PowerShell for Beginners (Part 10): Filtering and Where-Object

We have already learned a lot about PowerShell. Da última vez que trabalhamos com o WMI: PowerShell para iniciantes (Parte 9): obtenha tudo do Windows com PowerShell e WMI agora, na minha opinião, é a melhor hora de focar no tópico “filtragem com PowerShell”. Mas primeiro, vamos olhar para o exercício da última parte.todas as partes da série podem ser encontradas aqui: PowerShell for Beginners (Series)

Review (Part 9)

Aqui está a atribuição e a solução da parte 9:

recupere informações sobre o seu disco rígido. Use Get-WmiObject ou Get-CimInstance. Em primeiro lugar, procure o objeto WMI e uma vez que você o encontrou mostre o nome, as partições, O modelo, o Firmware e o número de série.

primeiro, precisamos descobrir o nome da instância WMI. Uma vez que a tarefa se refere ao disco rígido, poderíamos procurar por *disco*, por exemplo.

Get-WmiObject *disk* -List

Unbenannt.PNG

Win32_DiskDrive soa bem. Lembre-se do método de duas etapas da parte 8 para obter mais fora de PowerShell:

Get-CimInstance win32_diskdrive | Get-Member

lá você vai encontrar os atributos apropriados. Agora use Select-Object para obtê-los todos.

Get-CimInstance Win32_DiskDrive | Select-Object Name,Partitions, Size,Model,FirmwareRevision,SerialNumber

Unbenannt.PNG

Review

WMI (Windows Management Instruments) provides read and write access to almost all Windows settings. Existem dois importantes cmdlets: Get-WmiObject e Get-CimInstance.

porquê filtrar?

filtragem é uma tecnologia chave em PowerShell. Uma vez que você sabe como filtrar, você vai ficar mais fora de PowerShell.

bem, a minha tarefa para esta parte é explicar por que a filtragem é importante. Digamos que tem mais do que um disco rígido. A saída acima mostra todos os discos rígidos. Mas você quer exibir apenas discos rígidos Samsung, por exemplo.

Unbenannt.PNG

porque quereria fazer isto? Talvez o teu chefe te pergunte quantos discos da Samsung estão a ser usados. Em todos os computadores. Lembre-se, o WMI e o PowerShell permitem-lhe fazer consultas remotas. De volta ao assunto. Queremos apenas o SSD Samsung com 500 GB. Cuidado com o parâmetro do filtro!

Get-CimInstance Win32_DiskDrive -Filter "Model='Samsung SSD 850 EVO 500GB'" | Select-Object Name,Partitions, Size,Model,FirmwareRevision,SerialNumber

Unbenannt.PNG

o seguinte está um pouco fora do comum e para cromos PowerShell mais avançados, mas por que não? O seguinte comando recebe todos os SSDs Samsung de todos os computadores de domínio, mas não de servidores.

Get-CimInstance Win32_DiskDrive -Filter "Model='Samsung SSD 850 EVO 500GB'" -ComputerName (Get-ADComputer -Filter {operatingsystem -notlike '*server*'}).Name | Select-Object Name,Partitions, Size,Model,FirmwareRevision,SerialNumber

Se os seus colegas pensam que está a enfrentar um problema insolúvel, basta carregar nos botões e mostrar-lhes o que pode fazer. ok, vamos aos exemplos para iniciantes.

filtrar objectos

lembra-se do comando Get-ChildItem? Usei este comando muitas vezes nesta série.

Se executar o Get-Help Get-ChildItem, encontrará muitos exemplos de filtragem na ajuda.

Get-Help Get-ChildItem -Online

eu prefiro usar a ajuda local.

Get-Help Get-ChildItem -Examples

Unbenannt.PNG

o que aprendemos até agora?

filtragem é uma tecnologia chave em PowerShell. Uma vez que você entenda como filtrar, você vai ficar mais fora de PowerShell.

filtrar objectos de directório activo

Se for um IT-Pro, provavelmente trabalha num ambiente de directório activo. Filtragem é uma técnica chave quando se trabalha com objetos de diretório ativos.

o seguinte comando usa o parâmetro do filtro para obter todos os utilizadores que estão desactivados:

Get-ADUser -Filter {enabled -eq 'false'} | Select-Object Name

Unbenannt.PNG

pode estar a perguntar-se como sei os nomes dos atributos? Lembre-se do método de 2 passos para obter mais de objetos: 1. use Get-Member 2. use Select-Object.

Unbenannt.PNG

o parâmetro do filtro

vamos dar uma vista de olhos. Quais comandos usam o parâmetro do filtro? Repare que estou num controlador de domínio.

Get-Command -ParameterName Filter

como pode ver, o parâmetro do filtro é usado principalmente em comandos de Directórios activos. E eu tenho que admitir que eu sempre usei o parâmetro filtro Apenas Para Diretório Ativo. É assim que as coisas são. Vamos concentrar-nos no directório activo. Digamos que queremos todos os computadores de domínio (sistema operativo servidor e sistema operativo cliente) classificados por sistema operativo. Para isso temos que usar o parâmetro filtro com *.

Get-ADComputer -Filter * -Properties Name,Operatingsystem,OperatingSystemVersion,IPv4Address | Sort-Object OperatingSystem | Select-Object Name,OperatingSystem

Unbenannt.PNG

em termos de filtragem, esta foi uma tarefa simples.

o método de Filtragem

agora tentamos obter todos os computadores que têm o Windows 10 instalado. Para isso, temos que colocar o parâmetro do filtro em suportes curvados.

Get-ADComputer -Filter {operatingsystem -like '*windows 10*'}

É hora de quebrar os detalhes.

os suportes

colocam o filtro entre parêntesis curvados.

Unbenannt.PNG

os atributos

em seguida descubra o nome das propriedades (atributos). Já discutimos isso em PowerShell para iniciantes (Parte 8): o poder de PowerShell – entrar em contato com objetos (Get-Member, Select-Object). Lembrem-se do método dos dois passos!

Unbenannt.PNG

Get-ADComputer client01 -Properties * | Get-Member

Unbenannt.Nota: Note o parâmetro propriedades. Na pasta activa nem todas as propriedades são apresentadas por omissão.

os operadores

próxima utilização de um operador.

Unbenannt.PNG

um operador pode ser semelhante,- como,- igual,- ne e assim por diante … para mais informações sobre parâmetros tipo

help about_operators

isto abre um ficheiro de texto que é armazenado no seu computador.

a declaração

Se queremos filtrar algo, precisamos de uma condição. Esta condição tem de ser colocada entre aspas.

Unbenannt.PNG

revisão

Se estiver a trabalhar com filtros, veja primeiro a secção de Ajuda. Os filtros são geralmente colocados entre parênteses. Muitas vezes um operador também é usado.

alguns exemplos mais filtrantes … sem muita conversa …

à procura de utilizadores que tenham uma má Contagem de senha de 0. Aqui está um exemplo da conta do Petra:

Unbenannt.PNG

Get-ADUser -Filter {badpwdcount -eq '0'} | Select-Object Name

Unbenannt.PNG

à procura de utilizadores que tenham uma má Contagem de senhas de 0 e estejam activos. (Você verá que o Petra não está habilitado).

Get-ADUser -Filter {(badpwdcount -eq '0') -and (enabled -eq 'true')} | Select-Object Name

Unbenannt.PNG

exibe todos os computadores do domínio do Windows Server, mas apenas aqueles que estão a correr o Windows Server 2016 e cujos nomes começam com DC.

Get-ADComputer -Filter {(operatingsystem -like '*2016*') -and (name -like 'dc*')}

Unbenannt.PNG

mas às vezes você tem que encontrar outra maneira. Ou seja, quando não há filtragem disponível. Então usamos onde-Object.

filtragem com Where-Object

Where-Object is always on the right side of the pipe. Filtrar à esquerda. O que isso significa, os prós e os contras no final do post. Por esta parte, vamos nos concentrar em onde-objeto.

Aqui estão alguns exemplos da Ajuda PowerShell.

Get-Process | Where-Object {$_.handles -gt 200 -and $_.name -eq "svchost"}
Get-ChildItem c:\scripts | Where-Object {$_.length -gt 100000}

No entanto, gostaria de usar um exemplo de uma das minhas contribuições.

Get-Hotfix | Where-Object HotfixID -like KB31*

Unbenannt.PNG

preste atenção ao HotFixID. Refere-se a um atributo.

O procedimento recomendado (devido à compatibilidade com o passado) parece ser o seguinte:

Get-Hotfix | Where-Object {$_.HotfixID -like 'KB31*'}

há algo novo agora. O que significa$_?

$_ é uma variável que itera sobre cada objeto / elemento passado do anterior (pipe). Simplificando: pegue o hotfixID de cada objeto que vem do tubo.

Filtragem vs. Where-Object

Se não estiver disponível filtro, use Where-Object. Se você é capaz de usar um filtro no lado esquerdo do tubo use-o! Por quê? Bem, é uma diferença se você enviar 1000 objetos sobre o tubo ou apenas 500, no caso de onde-Objeto todos os objetos devem passar através do tubo e só então eles são filtrados. Lembre-se do tubo da parte 7: PowerShell para iniciantes (Parte 7): O tubo (e muitos exemplos para brincar)

revisão

Onde-o objecto está sempre do lado direito do tubo. Filtrar à esquerda. Se você tiver a escolha entre um filtro no lado esquerdo do tubo ou onde-objeto no lado direito, então escolha o lado esquerdo.

exercício

Aqui está o exercício até a próxima parte.

Where-Object:

Use Get-Service and Where-Object to show only services that are running.Filtro

(pasta activa necessária):

Use o parâmetro filtro para obter todos os utilizadores que estão desactivados.

ver você na próxima vez no tópico: PowerShell para iniciantes (Parte 11): ter diversão com Drives PowerShell

Patrick Gruenauer, MVP PowerShell

Deixe uma resposta

O seu endereço de email não será publicado.