Ajuda do Powershell: tenha um link de script de “espaço em disco”… mas como usá-lo?

1

EDITAR: A QUESTÃO FOI RESPONDIDA VER O FUNDO DO MEU POST PARA O MEU SCRIPT FINAL ...

Cara, eu sou um noob do powershell ...

Eu tenho este link:

link

Gostaria de usar isso para obter uma lista de servidores, executá-lo nessa lista e, em seguida, obter um relatório de cada servidor com espaço em disco semelhante a:

SERVIDOR1

C: Total = 120 GB de espaço livre = 60 GB D: Total = 400 GB de espaço livre = 200 GB

etc.

O problema é ...

  1. Não sei o que fazer com o script nesse link para que ele funcione. Copie / cole no notepad e salve como .ps1 ?? Não parece ser assim na descrição.

  2. Será que funcionará se eu executá-lo da minha caixa do Win7 com o PS, ou se todo servidor precisa ter o Powershell instalado para que um script PS remoto funcione?

  3. Existe uma maneira de configurar o script para me enviar um email? Dessa forma, posso configurá-lo como uma tarefa semanal ou similar.

Obrigado!

========

Roteiro final

function Get-FreeDisk
{
    [CmdletBinding()]
    param(
        [Parameter(Position=0, ValueFromPipeline=$true)]
        [string[]]$Computername="localhost",
        [int]
        [ValidateRange(0,100)]
        $MinPercFree = 100,
        [Management.Automation.PSCredential]$Credential = ([Management.Automation.PSCredential]::Empty)
    )
    begin{
        [String[]]$computers = @()  
    }
    process{
        $computers += $Computername
    }
    end{
        Get-WmiObject -computername $computers -Credential $Credential '
        -Query "select __SERVER, Caption,Label,Capacity,FreeSpace from Win32_Volume where DriveType != 5 and Capacity > 0" | '
        Add-Member -Name Free -MemberType ScriptProperty -PassThru -Value {($this.FreeSpace/10000) / ($this.Capacity/1000000)} | '
        Where { $_.Free -lt $MinPercFree } | '
        sort __SERVER,Caption | '
        Format-Table @{Label="Computer"; Expression={$_.__SERVER}}, Caption, Label,'
        @{Label="Size/MB"; FormatString="{0,7:N0}"; Expression={$_.Capacity / 1mb}},'
        @{Label="FreeSpace/MB"; FormatString="{0,7:N0}"; Expression={$_.Freespace / 1mb}}, '
        @{Label="Free"; FormatString="{0,3:N0}%"; Expression={$_.Free}} -AutoSize
    }
}


Get-Content .\servers.txt | Get-FreeDisk | Format-Table -AutoSize | Out-File diskusage.txt

Send-MailMessage -To [email protected] -Subject "Server Disk Report" -From [email protected] -SmtpServer mail.domain.com -Attachments "diskusage.txt"
    
por TheCleaner 06.08.2010 / 18:30

2 respostas

1

Para seus pontos:

  1. Veja abaixo
  2. As máquinas remotas não precisam ter o PS instalado nelas. Apenas a máquina que você está executando o comando precisa ter PS
  3. Deve funcionar como está seguindo as instruções abaixo. Você não precisa personalizá-lo para o seu ambiente.

É uma função, então você precisará carregá-la em seu ambiente. Você pode fazer isso de várias maneiras.

  1. digitando-o na sua sessão atual
  2. adicione-o ao seu perfil (meu método preferido nesse caso)

Para adicioná-lo ao seu perfil:

  1. no PS, digite notepad $profile , isso iniciará o bloco de notas com seu script de perfil. O script de perfil é algo que é executado toda vez que você inicia uma sessão PS e permite fazer coisas automaticamente, como definir variáveis de ambiente, aliases, funções de sessão (como essa) etc. Observe que esse arquivo não existe por padrão. pode ter que criá-lo se você não tiver feito isso. O caminho é %USERPROFILE%\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1 (use Meus documentos em vez de Documentos para XP)
  2. cole esse código na janela do bloco de notas, começando com function e terminando com o% final } . Você pode incluir a linha que diz new-alias também, se você quiser, mas não é necessário. Esse comando new-alias fará com que você digite df em vez de digitar o comando Get-Freedisk inteiro
  3. salve e feche o arquivo
  4. reinicie o PS ou digite . $profile para que as alterações entrem em vigor.
por 06.08.2010 / 18:44
1
  1. Se você copiá-lo e colá-lo em um arquivo ps1, poderá executar o arquivo para carregar a função em seu ambiente PS atual.
  2. A função parece ser executada no WMI, que deve funcionar em todos os WinXP e para cima.
  3. Você pode escrever um script que inclua esta função e as informações necessárias para enviá-la por e-mail, sim.

Por exemplo:

function Get-FreeDisk
{
    [CmdletBinding()]
    param(
        [Parameter(Position=0, ValueFromPipeline=$true)]
        [string[]]$Computername="localhost",
        [int]
        [ValidateRange(0,100)]
        $MinPercFree = 100,
        [Management.Automation.PSCredential]$Credential = ([Management.Automation.PSCredential]::Empty)
    )
    begin{
        [String[]]$computers = @()  
    }
    process{
        $computers += $Computername
    }
    end{
        Get-WmiObject -computername $computers -Credential $Credential '
        -Query "select __SERVER, Caption,Label,Capacity,FreeSpace from Win32_Volume where DriveType != 5 and Capacity > 0" | '
        Add-Member -Name Free -MemberType ScriptProperty -PassThru -Value {($this.FreeSpace/10000) / ($this.Capacity/1000000)} | '
        Where { $_.Free -lt $MinPercFree } | '
        sort __SERVER,Caption | '
        Format-Table @{Label="Computer"; Expression={$_.__SERVER}}, Caption, Label,'
        @{Label="Size/MB"; FormatString="{0,7:N0}"; Expression={$_.Capacity / 1mb}},'
        @{Label="FreeSpace/MB"; FormatString="{0,7:N0}"; Expression={$_.Freespace / 1mb}}, '
        @{Label="Free"; FormatString="{0,3:N0}%"; Expression={$_.Free}} -AutoSize
    }
}

$emailFrom = "[email protected]"
$emailTo = "[email protected]"
$subject = "Free Disk Space Report"
$body = Get-Content .\servers.txt | Get-FreeDisk | Out-String
$smtpServer = "mail.example.com"
$smtp = new-object Net.Mail.SmtpClient($smtpServer)
$smtp.Send($emailFrom, $emailTo, $subject, $body)

Coloque isso em um arquivo chamado algo como email_freedisk.ps1; em seguida, defina uma tarefa agendada para executá-lo.

Você só precisa de um arquivo com uma lista de nomes de servidores, um por linha, chamado servers.txt.

    
por 06.08.2010 / 18:40

Tags