banner
뉴스 센터
업계 동향을 최신 상태로 유지하기 위해 기술과 품질을 지속적으로 향상시킵니다.

PowerShell을 사용하여 VDI 리소스를 추적하는 방법

Aug 07, 2023

Maxim_Kazmin - Fotolia

PowerShell은 Windows 운영 체제에 긴밀하게 통합되어 있으므로 PowerShell을 사용하여 VDI의 활용도가 낮은 영역을 찾을 수 있습니다.

다음은 PowerShell을 사용하여 VDI 리소스를 추적하기 위해 사용자 환경에 맞게 조정할 수 있는 몇 가지 기본 방법입니다.

목표가 VDI 리소스 활용도를 추적하는 PowerShell 스크립트를 작성하는 것이라면 먼저 서버를 한 번에 하나씩 볼 수 있는 루프를 만들어야 합니다. 이렇게 하려면 모든 서버 목록을 만듭니다.

이 기사의 목적에 따라 서버 이름을 하드코딩하지만 대신 이름을 쿼리하거나 텍스트 파일에서 이름을 가져오도록 스크립트를 설계할 수도 있습니다. 두 방법 모두 스크립트를 더욱 동적으로 만듭니다.

다음은 서버 목록이 포함된 배열을 생성하는 코드 줄입니다.

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

이 줄은 Hyper-V-1, Hyper-V-2 등의 Hyper-V 서버 목록을 포함하는 $Servers라는 변수를 생성합니다. 하이퍼-V.

이제 변수에 매핑된 서버 목록이 있으므로 다음 단계는 루프를 만드는 것입니다.

ForEach($Server의 $Server) {}

이 루프는 서버 목록을 하나씩 진행합니다. 코드는 대괄호 세트로 끝납니다. 두 괄호 사이에 추가하는 모든 코드는 목록의 각 서버에 적용됩니다.

다음 단계는 VDI 호스트의 활용도가 낮은지 확인할 수 있는 코드를 작성하는 것입니다. 먼저 호스트 활용도가 낮다는 것이 무엇을 의미하는지 파악해야 합니다.

이 기사에서는 활용도가 낮은 서버를 사용 가능한 메모리가 20% 이상인 서버로 정의하겠습니다. 그러나 사용자 환경에 적합한 정의를 사용해야 합니다.

내 스크립트는 다음과 같습니다.

$Servers = @("Hyper-V-1", "Hyper-V-2", "Hyper-V-3", "Hyper-V-4")ForEach ($Servers의 $Server) {

$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 "총 메모리: " $TotalMemoryWrite-Host "사용 가능한 메모리: " $FreeMemoryIf ($FreeMemory -GT $TargetMemorySize) { Write-Host "이 호스트는 충분히 활용되지 않습니다."}If ($FreeMemory -LT $TargetMemorySize) {Write-Host "이 호스트는 충분히 활용되지 않습니다."}}}

이 스크립트에서는 모든 호스트가 도메인에 가입되어 있고 Kerberos가 인증자라고 가정합니다.

스크립트의 첫 번째 섹션에서는 쿼리할 호스트 목록을 정의한 다음 루프를 설정합니다. 스크립트가 현재 쿼리하고 있는 서버의 이름을 보유하는 $ServerName이라는 변수를 생성하겠습니다.

다음 두 줄의 코드는 명령이 쿼리하는 서버와의 원격 세션을 설정합니다. Invoke-Command cmdlet은 스크립트 블록을 정의합니다. 스크립트 블록 내의 모든 코드는 원격 시스템에 대해 실행됩니다.

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

스크립트 블록의 내용은 서버의 총 메모리를 사용 중인 메모리와 비교하여 서버가 충분히 활용되지 않는지 여부를 결정합니다. $TotalMemory 변수는 서버에 설치된 전체 메모리 양을 보유하고, $FreeMemory 변수는 남은 메모리 양을 저장합니다.

이 예에서 활용도가 낮은 서버는 사용 가능한 메모리의 80% 미만을 사용합니다. 총 메모리 --$TotalMemory * .2의 20%에 해당하는 값을 포함하는 $TargetMemorySize라는 변수를 만들었습니다. 이를 통해 서버의 사용 가능한 메모리 양($FreeMemory)을 내 목표 값($TargetMemorySize)과 비교하여 컴퓨터가 제대로 활용되지 않고 있는지 여부를 확인할 수 있습니다.

단순화를 위해 스크립트의 수정된 버전을 만들었습니다. 원격 세션을 생성하기 위해 루프와 코드를 제거했습니다. 이 단순화된 스크립트는 원격 호스트를 쿼리하는 대신 로컬 시스템만 검사합니다. 또한 대상 메모리 크기를 표시하는 코드 줄을 추가했습니다. 단순화된 스크립트는 다음과 같습니다.