-1

ここで楽しい時間があります: 列などに仮想サーバーの値を含む配列があります。各サーバーが通過する ForEach ループがあり、ディスクのカウントが 0 のサーバーを除外しようとしています。これが私の構文です:

$VMInfo.Disks = Get-HardDisk -VM $VM | Measure-Object | Select-Object Count

エクスポートされた CSV ファイルで、ハードディスクがない場合、列の値は @{Count=0} になります。したがって、この if ステートメントは、レポートからこれらのサーバーを除外するのに適していると考えました (この if ステートメントは、ForEach 全体のコマンドの一部です)。

if ($VMInfo.Disks -ne "@{Count=0}") {
      $Report += $VMInfo
      }

ただし、if ステートメントを含めると、エクスポートされた CSV ファイルにハード ドライブが含まれていないサーバーが表示されます。何か案は?$VMInfo.Disks -ne "@{Count=0}" コマンドを別のものに変更する必要がありますか? どんな助けでも大歓迎です!

編集: -ne "@{Count=0}" の代わりに -gt 0 を使用しようとしましたが、次のエラーが発生しました:

オブジェクトが同じ型ではないか、オブジェクト "@{Count=2}" が "IComparable" を実装していないため、"@{Count=2}" を "0" と比較できません。

編集:「@{Count=0}」の代わりに @{Count=0} を使用しようとしましたが、違いはありませんでした。CSV には、@{Count=0} を含む列がまだありました。

4

1 に答える 1

0

説明も助けもなしに反対票を投じられたにもかかわらず(stackoverflowの素晴らしい紹介)、同僚がこれを理解するのを助けてくれました:

上記の $VMInfo.Disks 行は、基本的に結果にハッシュ テーブルを作成しました。これが、スプレッドシートに @{Count=0} と表示される理由です。上記の $VMInfo.Disks 行の後に必要だったのは、次の行を使用することでした。

$VMInfo.Disks = ($VMInfo.Disks).Count

それは整数を返します。整数を返すため、次の if ステートメントを使用できます。

if ($VMInfo.Disks -ne 0) {
  $Report += $VMInfo
  }

今は元気です!

于 2015-01-07T16:38:12.053 に答える