banner
Centro de notícias
Aprimorando constantemente nossas técnicas e qualidade para nos mantermos atualizados com as tendências do setor.

Como usar o PowerShell para rastrear recursos VDI

Aug 07, 2023

Maxim_Kazmin - Fotolia

O PowerShell está profundamente integrado ao sistema operacional Windows, portanto, você pode usar o PowerShell para procurar áreas subutilizadas de VDI.

Aqui estão alguns métodos básicos que você pode adaptar ao seu próprio ambiente para usar o PowerShell para rastrear recursos VDI.

Se o seu objetivo é criar um script do PowerShell para rastrear a utilização de recursos VDI, primeiro você deve criar um loop que possa visualizar seus servidores um de cada vez. Para fazer isso, crie uma lista de todos os servidores.

Para os fins deste artigo, codificarei os nomes dos servidores, mas você pode projetar o script para consultar os nomes ou extraí-los de um arquivo de texto. Qualquer um dos métodos tornaria o script mais dinâmico.

Aqui está uma linha de código que cria um array contendo uma lista de servidores:

$Servidores = @("Hyper-V-1", "Hyper-V-2", "Hyper-V-3", "Hyper-V-4")

Esta linha cria uma variável chamada $Servers, que contém uma lista de servidores Hyper-V chamados Hyper-V-1, Hyper-V-2, etc. Você pode ajustar este comando se usar uma plataforma VDI que não seja baseada em Hiper-V.

Agora que você tem uma lista de servidores mapeados para uma variável, o próximo passo é criar um loop:

ForEach ($Servidor em $Servidores) {}

Este loop avança pela lista de servidores, um por um. O código termina com um conjunto de colchetes. Qualquer código adicionado entre os dois colchetes será aplicado a cada servidor da lista.

A próxima etapa é escrever algum código que possa verificar se um host VDI está subutilizado. Primeiro, você deve determinar o que significa um host ser subutilizado.

Para fins deste artigo, definirei um servidor subutilizado como aquele que possui mais de 20% de sua memória disponível. No entanto, você deve usar uma definição que faça sentido para seu próprio ambiente.

Aqui está a aparência do meu script:

$Servidores = @("Hyper-V-1", "Hyper-V-2", "Hyper-V-3", "Hyper-V-4")ForEach ($Servidor em $Servidores) {

$ServerName = $Server$MySession = New-PSSession -ComputerName $ServerNameInvoke-Command -Session $MySession -ScriptBlock {

Write-Host $ServerName$TotalMemory = (Get-CimInstance Win32_OperatingSystem).TotalVisibleMemorySize$FreeMemory = (Get-CimInstance Win32_OperatingSystem).FreePhysicalMemory$TargetMemorySize = $TotalMemory * .2Write-Host "Memória total:" $TotalMemoryWrite-Host "Memória livre: " $FreeMemoryIf ($FreeMemory -GT $TargetMemorySize) { Write-Host "Este host está subutilizado"}If ($FreeMemory -LT $TargetMemorySize) {Write-Host "Este host não está subutilizado"}}}

Este script pressupõe que todos os hosts ingressam no domínio e que Kerberos é o autenticador.

A primeira seção do script define a lista de hosts que irá consultar e então configura um loop. Criarei uma variável chamada $ServerName que contém o nome do servidor que o script está consultando no momento.

As próximas duas linhas de código estabelecem uma sessão remota com o servidor que o comando está consultando. O cmdlet Invoke-Command define um bloco de script. Todo o código do bloco de script é executado em uma máquina remota.

$MySession = New-PSSession -ComputerName $ServerNameInvoke-Command -Session $MySession -ScriptBlock {

O conteúdo do bloco de script compara a memória total do servidor com a memória em uso para determinar se o servidor está subutilizado ou não. A variável $TotalMemory armazena a quantidade total de memória instalada no servidor, enquanto a variável $FreeMemory armazena a quantidade restante de memória.

Neste exemplo, servidores subutilizados utilizam menos de 80% da memória disponível. Criei uma variável chamada $TargetMemorySize que contém um valor igual a 20% da memória total --$TotalMemory * .2. Isso me permite comparar a quantidade de memória livre do servidor - $FreeMemory - com meu valor alvo - $TargetMemorySize - para determinar se a máquina está ou não sendo subutilizada.

Para simplificar, criei uma versão modificada do script. Removi o loop e o código para criar uma sessão remota. Este script simplificado examina apenas a máquina local em vez de consultar hosts remotos. Também adicionei uma linha de código para exibir o tamanho da memória alvo. Aqui está o script simplificado: