0

Hyper-Vホストからいくつかの情報を収集しようとしています。私はそれらをたくさん持っており、このプロセスを自動化したいと思います。各ホストで実行されている仮想マシンを取得する必要があります。バッチスクリプトからこれを実行したいと思います。このコマンドをPowerShellV1.0ウィンドウ(Hyper-Vホスト上)で実行すると、機能し、必要な情報が表示されます。

get-vmmemory | select VMelementName,reservation | out-file c:\Output.txt

これは私がバッチスクリプトからこれを実行している方法です:

\\<RemoteMachine>\c$\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -command get-vmmemory >>aa.txt

これは私が得る出力です

The term 'get-vmmemory' is not recognized as the name of a cmdlet, function,
script file, or operable program. Check the spelling of the name, or if a path
was included, verify that the path is correct and try again.
At line:1 char:16
+ & {get-vmmemory <<<< }
    + CategoryInfo          : ObjectNotFound: (get-vmmemory:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

なぜ私がこの出力を取得し続けるのかについて誰かが何か手がかりを持っていますか?

4

4 に答える 4

2

Get-VMMemory標準/組み込みのコマンドレットではなく、Hyper-V モジュールの一部です。したがって、ここには 2 つの問題があります。

  1. 実際に PowerShell v1.0 を実行している場合 (EXE は 1.0 ディレクトリに配置されますが、すべてのバージョンが同じ場所にあります)、モジュールはおそらく動作しません。
  2. モジュールをロードしていないか、バッチ ファイルを実行している場所でモジュールを使用できません。

#1 については、次の方法でバージョンを確認してください: \c$\Windows\System32\WindowsPowerShell\v1.0\powershell.exe "write-host $psversiontable.psversion"

余談ですが、ローカル マシンの C ドライブを指すのに UNC パスを使用しているのはなぜですか?

#2 については、コードを PS1 ファイルにラップし、それを実行するように powershell.exe に指示して、モジュールをインポートできるようにする必要があります。PowerShell 3.0 はモジュールの自動読み込みを行いますが、このようなコマンドレットを実行しているときにそれが行われるかどうかはわかりません。

import-module Hyper-V
get-vmmemory | select VMelementName,reservation | out-file c:\Output.txt

powershell.exe -f myscript.ps1

編集:あなたのコメントに基づいて、これらのどちらも機能しません。システムからリモート システムでコマンドを実行するには、PSRemoting を使用する必要があります。

invoke-command -computername hypervhost -scriptblock {get-vmmemory | select VMelementName,reservation

上記は未確認です。これが機能しない場合は、環境で PSRemoting をセットアップする必要があります。

于 2013-03-19T13:43:04.830 に答える
1

UNC パスを使用すると、ローカル コンピューター上のリモート コンピューターから PowerShell 実行可能ファイルを実行できます。ただし、ローカル コンピューターにインストールされている PowerShell 実行可能ファイルを実行するのと同じであるため、何も得られません。そのようなリモートマシンにインストールされたモジュールをロードすることはできません。

代わりに行う必要があるのは、Get-VMMemoryを提供するライブラリをローカルのコンピューターにインストールし、モジュールをインポートして (たとえば、ここで説明されているように)、リモート ホストに対してコマンドレットを使用することです。

Get-VMMemory -VM "virtual_host" -Server "hyper-v_host"

または、 System Center Virtual Machine Managerに移動することもできます。

于 2013-03-19T14:19:52.800 に答える
0

Hyper v (VM ではない) を実行しているマシンの PowerShell V1.0 コンソールで get-vmmemory と入力すると、コマンドが機能します。

于 2013-03-19T13:38:32.543 に答える
0

get-vmmemory は標準のコマンドレットではありません。PowerShell を実行しているマシンでそのコマンドレットを使用できない場合、このエラーが発生します。

vmware Ps モジュールがセッションにロードされていることを確認するために、import-module の実行が必要になる場合があります。

于 2013-03-19T13:32:47.477 に答える