Tentando automatizar processos usando o Powershell


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.

Source: https://habr.com/ru/post/pt483416/


All Articles