banner
ニュース センター
常に技術と品質を向上させ、業界のトレンドを常に最新の状態に保ちます。

PowerShell を使用して VDI リソースを追跡する方法

Aug 07, 2023

Maxim_Kazmin - Fotolia

PowerShell は Windows オペレーティング システムに深く統合されているため、PowerShell を使用して VDI の十分に活用されていない領域を探すことができます。

PowerShell を使用して VDI リソースを追跡するために、独自の環境に適応できる基本的な方法をいくつか紹介します。

VDI リソースの使用率を追跡する PowerShell スクリプトを構築することが目標の場合は、まずサーバーを一度に 1 台ずつ表示できるループを作成する必要があります。 これを行うには、すべてのサーバーのリストを作成します。

この記事では、サーバー名をハードコーディングしますが、代わりに名前をクエリしたり、テキスト ファイルから名前を取得したりするスクリプトを設計することもできます。 どちらの方法でも、スクリプトがより動的になります。

以下は、サーバーのリストを含む配列を作成するコード行です。

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

この行は、$Servers という変数を作成します。この変数には、Hyper-V-1、Hyper-V-2 などの Hyper-V サーバーのリストが含まれています。ハイパーV。

サーバーのリストが変数にマップされたので、次のステップはループを作成することです。

ForEach ($Servers 内の $Server) {}

このループは、サーバーのリストを 1 つずつ進めます。 コードは一連のかっこで終わります。 2 つの括弧の間に追加したコードは、リスト内の各サーバーに適用されます。

次のステップは、VDI ホストが十分に活用されていないことを確認するコードを作成することです。 まず、ホストが十分に活用されていないことが何を意味するかを判断する必要があります。

この記事では、使用率が低いサーバーを、使用可能なメモリが 20% を超えるサーバーとして定義します。 ただし、独自の環境にとって意味のある定義を使用する必要があります。

私のスクリプトは次のようになります。

$Servers = @("Hyper-V-1", "Hyper-V-2", "Hyper-V-3", "Hyper-V-4")ForEach ($Server の $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 という変数を作成します。

次の 2 行のコードは、コマンドが照会しているサーバーとのリモート セッションを確立します。 Invoke-Command コマンドレットはスクリプト ブロックを定義します。 スクリプト ブロック内のすべてのコードはリモート マシンに対して実行されます。

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

スクリプト ブロックの内容は、サーバーの合計メモリと使用中のメモリを比較して、サーバーが十分に活用されていないかを判断します。 $TotalMemory 変数はサーバーにインストールされているメモリの合計量を保持し、$FreeMemory 変数はメモリの残りの量を格納します。

この例では、十分に活用されていないサーバーは、使用可能なメモリの 80% 未満を使用しています。 総メモリの 20% --$TotalMemory * .2 に等しい値を含む $TargetMemorySize という変数を作成しました。 これにより、サーバーの空きメモリ量 -- $FreeMemory -- を目標値 -- $TargetMemorySize -- と比較して、マシンが十分に活用されていないかを判断することができます。

わかりやすくするために、スクリプトの修正バージョンを作成しました。 リモート セッションを作成するためのループとコードを削除しました。 この簡素化されたスクリプトは、リモート ホストにクエリを実行するのではなく、ローカル マシンのみを検査します。 ターゲットのメモリ サイズを表示するコード行も追加しました。 簡略化されたスクリプトは次のとおりです。