Este artigo analisará por que todos nós amamos o Powershell com alguns exemplos de trabalho. Tudo isso será útil ao fazer um inventário, encontrar um computador específico e outros assuntos. O Powershell está equipado com cmdlets convenientes e cativantes; o preenchimento automático de tudo e nomes intuitivos o tornam provavelmente o idioma mais fácil de aprender.
Neste guia, analisaremos algumas das equipes legais na opinião do autor e explicaremos por que isso é legal. Vamos começar com os trechos.
Trechos úteis:
Trazemos o computador para TrustedHostsÚtil ao se conectar ao servidor via WinRm. O comando substituirá o valor anterior, tenha cuidado, adicione nomes de ip ou host separados por vírgulas. Se todos os seus hosts estiverem no AD, você não precisará tocar nesse arquivo.
Set-Item WSMan:\localhost\Client\TrustedHosts -Value '192.168.0.1'
O curinga também funciona se você não desejar adicionar um novo host ao TrustedHosts sempre.
Set-Item WSMan:\localhost\Client\TrustedHosts -Value '*'
Armazenamos a senha em formato criptografado em um arquivo:É útil para automação, pois facilita muito a vida ao executar scripts do agendador, mas a senha é armazenada de forma segura.
Se você executar scripts de um usuário conectado, os créditos do usuário serão usados.
Read-Host -AsSecureString | ConvertTo-SecureString -AsPlainText -Force | ConvertFrom-SecureString | Out-File -FilePath .\Password.txt
Nós pegamos a senha criptografada do arquivo:
$Password = Get-Content C:\Password.txt | ConvertTo-SecureString
O mesmo pode ser feito com credenciais, substitua Read-Host por Get-Credential.
Get-Credential | ConvertTo-SecureString -AsPlainText -Force | ConvertFrom-SecureString | Out-File -FilePath .\Credential.txt
Temos a data da última inicialização do sistema operacional. (gcim win32_operatingsystem).LastBootUpTime
Da mesma forma, também temos tempo de atividade.
Get-CimInstance Win32_operatingsystem -ComputerName $computers | Select-Object LastBootUpTime, @{Name="Uptime";Expression = {(Get-Date) - $_.LastBootUptime}}
Nós temos uma lista de programas instalados:São programas, não componentes:
Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName, DisplayVersion, Publisher, InstallDate | Format-Table –AutoSize
Temos uma lista de unidades, incluindo unidades de rede e espaço livre nelas Get-PSDrive -PSProvider filesystem | where-object {$_.used -gt 0} | Select-Object -property Root,@{name="Size";expression={($_.used+$_.free)/1GB -as [int]}}, @{name="Used";expression={($_.used/1GB) -as [int]}}, @{name="Free";expression={($_.free/1GB) -as [int]}}
Paramos o processo pelo nome.Neste exemplo, paramos o Chrome. O curinga também é adequado se você deseja concluir tudo.
Get-Process -Name "chrome" | Stop-Process
Copiar configurações de acesso a pastas para pastas filhoÉ útil se você deseja selecionar ou conceder o direito de usar a pasta e todas as subpastas do grupo ou usuário do usuário. O comando recursivamente, de baixo para cima, permissões de leitura e gravação.
Copie a ACL da pasta:
$Acl = Get-Acl -Path C:\folder\
Insira a ACL em todos os arquivos e subpastas:
Get-ChildItem -Path C:\Folder\ -Recurse | Set-Acl $Acl
Scripts úteis:
É aqui que começa a pior diversão. Se você precisar fazer um inventário, será muito útil dar uma olhada. Se seus computadores não estiverem no AD, o script se tornará um pouco mais complicado, precisará ser iterado em um arquivo compilado anteriormente e as senhas precisarão ser retiradas do arquivo ou através da Get-Credential. Toda a diferença:
C AD:
$ADComputers = (Get-ADComputer -filter *).DNSHostName
Sem AD:
$Credentials = Get-Credential $Computers = Get-Content -Path C:\servers.txt
Temos tempo de atividade na data da última inicialização de cada um dos computadores no AD: $ADComputers = (Get-ADComputer -filter *).DNSHostName foreach ($i in $ADComputers) { Invoke-Command $i { Get-CimInstance Win32_operatingsystem | Select-Object LastBootUpTime, @{Name="Uptime";Expression = {(Get-Date) - $_.LastBootUptime}} } }
Temos todos os programas instalados em todos os computadores AD: $ADComputers = (Get-ADComputer -filter *).DNSHostName foreach ($i in $ADComputers) { Invoke-Command -computername $i { gcim win32_product -computername $env:computername | Sort-Object -property Vendor,Name | Select-Object -property Vendor,Name, Caption } }
O mesmo pode ser obtido para os componentes, substituindo Invoke-Command:
Get-WindowsFeature | Where-Object -Property "Installed" -EQ "Installed"
Temos computadores nos quais o processo que precisamos está em execução:Se você esqueceu em qual computador esse ou aquele programa está sendo executado, é possível obtê-lo dessa maneira. Considere um exemplo de navegador:
$ADComputers = (Get-ADComputer -filter *).DNSHostName foreach ($i in $ADComputers) { Invoke-Command -computername $i { Get-Process -Name "Chrome" -ErrorAction SilentlyContinue } }
Matar um navegador pode ser tão fácil quanto obter um processo:
$ADComputers = (Get-ADComputer -filter *).DNSHostName foreach ($i in $ADComputers) { Invoke-Command -computername $i { Get-Process -Name "Chrome" | Stop-Process -ErrorAction SilentlyContinue } }
Temos computadores onde um programa específico está instalado:Secretamente, neste caso, Java. Isso ajudará durante o inventário. Você pode ver os nomes dos computadores em que foi instalado.
$ADComputers = (Get-ADComputer -filter *).DNSHostName foreach ($i in $ADComputers) { Invoke-Command -computername $i { gcim win32_product -computername $env:computername | Select-String -Pattern "Java" -AllMatches | Sort-Object -property Vendor,Name | Format-Table -ErrorAction SilentlyContinue } }
Se você tiver alguma sugestão, teremos prazer em adicioná-las a este artigo. Esperamos que estes exemplos tenham sido úteis para você.
Oferecemos uma tarifa atualizada do UltraLite
Windows VDS por 99 rublos com o Windows Server 2019 Core instalado.
