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
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
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.
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
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
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
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.
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
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.
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!
Get-ADComputer client01 -Properties * | Get-Member
os operadores
próxima utilização de um operador.
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.
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:
Get-ADUser -Filter {badpwdcount -eq '0'} | Select-Object Name
à 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
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*')}
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*
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