Archive for the ‘Power Shell’ category

Apagar arquivos antigos e diretórios vazios com powershell

setembro 5th, 2017

Apagar arquivos com mais de 31 dias
Substitua %diretorio% pelo diretório que deseja apagar o conteúdo antigo

Get-ChildItem %diretorio% -recurse | Where {!$_.PSIsContainer -and $_.LastWriteTime -lt (get-date).AddDays(-31)} | Remove-Item -whatif

Apagar diretórios vazios
Substitua %diretorio% pelo diretório que deseja apagar os diretórios vazios

Get-ChildItem %diretorio% -recurse | Where {$_.PSIsContainer -and @(Get-ChildItem -Lit $_.Fullname -r | Where {!$_.PSIsContainer}).Length -eq 0} |Remove-Item -recurse -whatif

Lembrando que o parâmetro -whatif no final simula o que aconteceria se o comando fosse realmente executado. Para ele ser realmente executado, remova o -whatif do final

Referência: https://stackoverflow.com/questions/1575493/how-to-delete-empty-subfolders-with-powershell

Pegar espaço utilizado de um disco através do PowerShell

maio 30th, 2017

No powershell é só executar o comando abaixo

1
Get-PSDrive C | Select {$_.Used / 1GB}

Para chamar o powershell no prompt command do Windows, então execute o comando abaixo

1
powershell -command "Get-PSDrive C | Select {$_.Used / 1GB}"

Lembrando que o C, no comando, é a unidade C, se tirar ele aparece de todos os discos

Tipo nmap com o PowerShell

janeiro 18th, 2017

Precisava verificar IPs de um range para saber se estavam em uso, no Linux o serviço é bem fazer de se fazer, usando nmap -v -sP 192.168.0.0/24 se descobre fácil. No Windows eu dei uma pesquisada e achei o System.Net.Networkinformation.Ping que me ajudou bastante. O comando ficou assim

$ping = New-Object System.Net.Networkinformation.Ping
1..254 | % { $ping.send("192.168.100.$_") | select address, status | where status -eq 'Success'}

Resumindo é um foreach de 1 a 254 que vai testando o IP.

Baseado nas informações do seguinte link:
http://www.thomasmaurer.ch/2011/11/powershell-ping-ip-range/

Instalar recursos do Windows 2012 automaticamente

janeiro 5th, 2017

Meu cenário era o seguinte: eu tinha um servidor web com todas as features instaladas, tudo pronto, mas precisava criar um servidor com os mesmos recursos em outro lugar, o que fiz para agilizar o processo e para depois automatizar foi o seguinte. Peguei um servidor que eu já tinha pronto e exportei a lista das features já instaladas, fiz isso com o seguinte comando no powershell.

Get-WindowsFeature | ? { $_.Installed } | Select Name | ForEach-Object { $_.Name } | Out-File .\Features.txt

Traduzindo a linha: pega o nome de todas os recursos da máquina que estejam instalados e joga cada nome em uma linha dentro do arquivo Features.txt

Com esse .txt, copiei para o servidor recém instalado, abri o powershell e executei o seguinte comando

$(Get-Content .\Features.txt) | Add-WindowsFeature

Daí é só esperar ser tudo instalado :D, me poupou bastante tempo esse processo.
Ah, uma coisa, a máquina deve ter conexão com a internet para concluir a instalação com sucesso.

Link base: Importing and Exporting Windows Features with PowerShell

Substituir string em arquivo com PowerShell

setembro 14th, 2016

Para dar replace em uma determinada string dentro de um arquivo no powershell, o comando é o seguinte

PS C:\> (Get-Content %caminhoDoArquivo%).Replace('%stringDeEntrada%', '%stringDeSaida%') | Set-Content %caminhoDoArquivo%

O comando lê o conteúdo do arquivo para substituir o conteúdo de entrada pelo conteúdo de saída, e então grava o conteúdo novo no arquivo informado.

Habilitar SSI no Windows 2012 Server com IIS8

janeiro 6th, 2016

Para utilizar Server-Side Include no servidor, extensões .shtml e .shtm, é necessário habilitar o recurso no servidor, é possível fazer isso pelo PowerShell, para isso abra o PowerShell, em 64bits se o seu sistema for 64bits, e digite os seguintes comandos:

Import-Module ServerManager
Add-WindowsFeature Web-Includes

Após isso é necessário reboot do servidor, após reinicializar o SSI estará habilitado no IIS.

Pegar requisições do momento no Windows 2012 em PowerShell

junho 18th, 2015
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$wp = Get-WmiObject WorkerProcess -Namespace root/WebAdministration
 
foreach($w in $wp){
    $w | Invoke-WmiMethod -Name GetExecutingRequests |
    Select-Object -ExpandProperty OutputElement | Foreach-Object{
        [PSCustomObject]@{
            nomePool = $w.AppPoolName
            PID = $w.ProcessId
            ipOrigem = $_.ClientIPAddress
            modulo = $_.CurrentModule
	    idConexao = $_.ConnectionId
            porta = $_.LocalPort
            siteId = $_.SiteId
            url = $_.Url
            verbo = $_.Verb
            tempoEmSegundos = $_.TimeInState / 1000
        }
    }
}

É possível filtrar para um determinado PID ou pool de aplicativo, por exemplo, alterando a primeira linha para alguma coisa do tipo

1
$wp = Get-WmiObject WorkerProcess -Namespace root/WebAdministration -Filter "ProcessId=%PID%"
1
$wp = Get-WmiObject WorkerProcess -Namespace root/WebAdministration -Filter "AppPoolName='%nomeDaPool%'"

Referência: Get requests that are currently executing in a worker process