2013-03-19 3 views
0

Я пытаюсь собрать некоторую информацию с моих серверов Hyper-V. У меня их целая группа, и я хотел бы автоматизировать этот процесс. Мне нужно получить виртуальные машины, которые работают на каждом хосте. Я хотел бы сделать это из сценария партии. Когда я запускаю эту команду в окне PowerShell V1.0 (на Hyper-V хоста) он работает и дает мне необходимую информацию:Использование пакета для запуска удаленной команды PowerShell V1.0

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 

кто-нибудь есть ключ к пониманию того, почему я получаю этот выход?

+0

Попробуйте следующее: 'start" "" c: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe "....' – Endoro

ответ

1

Используя UNC-путь, вы будете запускать исполняемый файл PowerShell с удаленного компьютера на локальном компьютере. Однако это не принесет вам ничего, потому что это ничем не отличается от запуска исполняемого файла PowerShell, установленного на вашем локальном компьютере.Вы не сможете загружать модули, установленные на удаленном компьютере, как это.

Что вам нужно сделать, вместо того, чтобы это установить library providing Get-VMMemory на локальном copmuter, импортировать модуль (как описано, например, here), а затем использовать командлет против удаленного хоста:

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

Или вы могли бы перейдите на System Center Virtual Machine Manager.

+0

Это команда, которая наконец-то сработала: строка, написанная в файле BATCH: C: \ Windows \ system32 \ windowspowershell \ v1.0 \ powershell.exe -command "import-module '\\ c $ \ program files \ modules \ HyperV \ hyperv.psd1' "; "get-vmmemory -server" "| выбрать VMelementname, бронирование" >> outputfile.txt – gmilic

+0

Как это работает: я использовал команду import для импорта hyperv.psd1 в локальный модуль powershell сразу после его импорта i команду get-vmmemory, укажите на каком сервере я бы хотел запустить его и использовать параметр select, чтобы сообщить ему, что возвращать. Спасибо всем за помощь. Эклектическая информация была очень полезна в моем понимании того, как это работает и как я могу ее использовать. – gmilic

0

get-vmmemory не является стандартным командлетом. Если этот командлет недоступен на компьютере, на котором запущена powershell, вы получите эту ошибку.

Возможно, вам понадобится запустить импорт-модуль, чтобы модуль vmware Ps был загружен в сеанс.

0

Когда я набираю get-vmmemory на консоли PowerShell V1.0 на машине, на которой выполняется гипер v (не VM), команда работает.

2

Get-VMMemory не является стандартным/встроенным командлетом - это часть модуля Hyper-V. Итак, вы на самом деле есть две проблемы здесь:

  1. Если вы действительно работает PowerShell версии 1.0 (в EXE земель в каталоге 1.0, но все версии находятся в том же месте), модуль, вероятно, выиграл» t even work
  2. Вы не загружаете модуль или не имеете доступного модуля, в котором вы запускаете командный файл.

Для # 1, проверьте версию следующим образом: \ с $ \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe "записи хоста $ psversiontable.psversion"

в сторону: Почему вы используете UNC-путь для указания на диске C локального компьютера?

Для # 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

Edit: На основе ваших комментариев, ни один из них будет работать. Вам необходимо использовать PSRemoting для выполнения команды на удаленной системе, из вашей системы.

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

Вышеупомянутый не проверен. Если это не сработает, вам необходимо настроить PSRemoting в своей среде.

+0

Я использую UNC, потому что этот скрипт предназначен для запуска с любой машины администратора , UNC указывает на местоположение PowerShell на любом из серверов HV. – gmilic

+0

Я также пробовал следующее: \\ \ c $ \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe -command "set-executionpolicy RemoteSigned" – gmilic

+0

а также: \\ \ c $ \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe -команда "import-module '\\ SECAABHV03 \ c $ \ program files \ modules \ hyperv \ hyperv.psd1'"; «get-vmmemory» >> aa.txt – gmilic

Смежные вопросы