Intentando automatizar procesos usando Powershell


Este artículo analizará por qué todos amamos Powershell con un par de ejemplos de trabajo. Todo esto será útil al hacer un inventario, encontrar una computadora específica y otros asuntos. Powershell está equipado con cmdlets convenientes y pegadizos; el autocompletado de todo y los nombres intuitivos hacen que sea probablemente el idioma más fácil de aprender.

En esta guía, veremos algunos de los equipos geniales en la opinión del autor y explicaremos por qué esto es genial. Comencemos con los fragmentos.

Fragmentos útiles:


Llevamos la computadora a TrustedHosts

Útil cuando se conecta al servidor a través de WinRm. El comando sobrescribirá el valor anterior, tenga cuidado, agregue ip o nombres de host separados por comas. Si todos sus hosts están en AD, no necesita tocar este archivo.

Set-Item WSMan:\localhost\Client\TrustedHosts -Value '192.168.0.1' 

El comodín también funciona si no desea agregar un nuevo host a TrustedHosts cada vez.

 Set-Item WSMan:\localhost\Client\TrustedHosts -Value '*' 

Almacenamos la contraseña en forma cifrada en un archivo:

Es útil para la automatización, facilita enormemente la vida al ejecutar scripts desde el planificador, pero la contraseña se almacena de forma segura.

Si ejecuta scripts de un usuario conectado, se utilizarán los créditos del usuario.

 Read-Host -AsSecureString | ConvertTo-SecureString -AsPlainText -Force | ConvertFrom-SecureString | Out-File -FilePath .\Password.txt 

Tomamos la contraseña cifrada del archivo:

 $Password = Get-Content C:\Password.txt | ConvertTo-SecureString 

Lo mismo se puede hacer con las credenciales, reemplace Read-Host con Get-Credential.

 Get-Credential | ConvertTo-SecureString -AsPlainText -Force | ConvertFrom-SecureString | Out-File -FilePath .\Credential.txt 

Obtenemos la fecha del último arranque del sistema operativo.

 (gcim win32_operatingsystem).LastBootUpTime 

Del mismo modo, también tenemos tiempo de actividad.

 Get-CimInstance Win32_operatingsystem -ComputerName $computers | Select-Object LastBootUpTime, @{Name="Uptime";Expression = {(Get-Date) - $_.LastBootUptime}} 

Obtenemos una lista de programas instalados:

Son programas, no componentes:

 Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName, DisplayVersion, Publisher, InstallDate | Format-Table –AutoSize 


Obtenemos una lista de unidades, incluidas unidades de red y espacio libre en ellas

 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 el proceso por su nombre.

En este ejemplo, detenemos Chrome. El comodín también es adecuado si desea completar todo.

 Get-Process -Name "chrome" | Stop-Process 

Copie la configuración de acceso a carpetas a carpetas secundarias

Es útil si desea seleccionar o otorgar el derecho de usar la carpeta y todas las subcarpetas del grupo de usuarios o usuario. El comando recursivamente, de abajo hacia arriba, lee y escribe permisos.

Copie la ACL de la carpeta:

 $Acl = Get-Acl -Path C:\folder\ 

Inserte la ACL en todos los archivos y subcarpetas:

 Get-ChildItem -Path C:\Folder\ -Recurse | Set-Acl $Acl 

Guiones útiles:


Aquí es donde comienza la peor diversión. Si necesita hacer un inventario, será muy útil echar un vistazo. Si sus computadoras no están en AD, entonces el script se volverá un poco más complicado, tendrá que iterarse sobre un archivo precompilado, y las contraseñas deberán tomarse del archivo o de Get-Credential. Toda la diferencia:

C AD:

 $ADComputers = (Get-ADComputer -filter *).DNSHostName 

Sin AD:

 $Credentials = Get-Credential $Computers = Get-Content -Path C:\servers.txt 

Obtenemos el tiempo de actividad de la fecha del último arranque de cada una de las computadoras en 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}} } } 

Obtenemos todos los programas instalados en todas las computadoras 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    } } 

Lo mismo se puede obtener para los componentes, sustituyendo Invoke-Command:

 Get-WindowsFeature | Where-Object -Property "Installed" -EQ "Installed" 

Obtenemos computadoras donde se ejecuta el proceso que necesitamos:

Si olvidó en qué computadora se ejecuta este o aquel programa, puede obtenerlo de esta manera. Considere un ejemplo de navegador:

 $ADComputers = (Get-ADComputer -filter *).DNSHostName foreach ($i in $ADComputers) {    Invoke-Command -computername $i {        Get-Process -Name "Chrome"  -ErrorAction SilentlyContinue    } } 

Matar un navegador puede ser tan fácil como obtener un proceso:

 $ADComputers = (Get-ADComputer -filter *).DNSHostName foreach ($i in $ADComputers) {    Invoke-Command -computername $i {        Get-Process -Name "Chrome" | Stop-Process -ErrorAction SilentlyContinue    } } 

Obtenemos computadoras donde está instalado un programa específico:

Secretamente en este caso Java. Le ayudará durante el inventario que pueda ver los nombres de las computadoras donde se instaló.

 $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    } } 

Si tiene alguna sugerencia, estaremos encantados de agregarla a este artículo. Esperamos que estos ejemplos te hayan sido útiles.

Ofrecemos una tarifa UltraLite Windows VDS actualizada por 99 rublos con Windows Server 2019 Core instalado.

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


All Articles