powershell进行hyper-v远程管理

一、powershell安装hyper-v模块

在 WinRM的配置使用 篇中提到如何通过开启WINRM进行powershell远程管理,接下来说下如何和hyper进行结合。win2008下的powershell默认不带hyper模块,win2008R2下需要使用开源项目PsHyperV 。也可以去github上进行下载。地址如下:https://github.com/gcbond/pshyperv ,下载后,可以打开压缩包,直接运行install.cmd进行安装,这里注意,需要使用管理员权限进行安装。如果不选择管理员权限,会报如下错误:

pshyperv

安装完成后,可以在powershell下通过如下命令进行操作(获取帮助信息可以通过Get-Help Get-VM):

get-vm
Start-VM
Stop-VM

具体可以参考 powershell中和hyper-v的api

get-vm

2012R2下PowerShell自带HyperV模块,打开PowerShell命令行,即可使用HyperV模块的函数。具体可以参考微软官方页面:https://docs.microsoft.com/zh-cn/virtualization/hyper-v-on-windows/quick-start/try-hyper-v-powershell

2012R2下的HyperV模块的函数比2008R2的更加全面,同时2012R2下的大部分函数名及函数参数也发生了变化。如下:

function-hyperv

二、powershell + hyper-v虚机管理

win2008下直接打开powershell或者远程直接powershell调用还是会出现异常提示的,如下:

hyper-vm

解决该问题,是需要导入模块,才可以调用:

Import-Module "C:\Program Files\modules\HyperV"
get-vm

powershell下直接进行远程命令调用还需要使用invoke-command命令,如下:

# 远程执行命令
invoke-command -computername 192.168.21.1 -Credential $cred -command {dir C:/}
invoke-command -computername 192.168.21.1 -Credential $cred -ScriptBlock {dir c:\}
# 远程执行脚本
echo "dir c:\" > dirDriveC.ps1
invoke-command -computername 192.168.21.1 -Credential $cred  -FilePath .\dirDriveC.ps1

具体可以参考:windows服务器远程执行命令(PowerShell+WinRM)

三、一键式最终实现

由于powershell在主机上是无法直接调用使用的,直接使用会报错:'无法加载文件 D:\hyper\status-hyperhost.ps1,因为在此系统中禁止执行脚本。有关详细信息,请参阅 "get-help about_signing"'。解决该问题的办法可以通过cmd调用时,使用相关参数,如下:

powershell.exe -ExecutionPolicy Bypass -File 文件名.ps1

或者永久的改变本机的 PowerShell 执行策略(不推荐,不安全):

Set-ExecutionPolicy Bypass

该部分参考:《更好的批处理脚本语言 PowerShell

最终实现的有如下6个文件:

PS D:\hyper> ls|select Name
Name
----
01status.bat
02stop.bat
03start.bat
start-hyperhost.ps1
status-hyperhost.ps1
stop-hyperhost.ps1    

对应的状态查看脚本内容如下:

# 01status.bat内容如下:
@echo off
powershell.exe -ExecutionPolicy Bypass -File  status-hyperhost.ps1
echo ============================================
echo OnTimeInMilliseconds:表示当前运行时间
echo ElementName:表示当前虚机名称
echo ============================================
pause
# status-hyperhost.ps1文件内容如下:
$account = "USER-20180228WD\administrator"
$password = 'mypasswd'
$secpwd = convertto-securestring $password -asplaintext -force
$cred = new-object System.Management.Automation.PSCredential -argumentlist $account,$secpwd
invoke-command -computername 10.73.157.125 -Credential $cred -ScriptBlock {Import-Module "C:\Program Files\modules\HyperV";get-vm|select ElementName,OnTimeInMilliseconds}

停掉虚拟机脚本如下:

# 02stop.bat文件内容如下:
@echo off
powershell.exe -ExecutionPolicy Bypass -File  stop-hyperhost.ps1
pause
# stop-hyperhost.ps1内容如下:
$account = "USER-20180228WD\administrator"
$password = 'mypasswd'
$secpwd = convertto-securestring $password -asplaintext -force
$cred = new-object System.Management.Automation.PSCredential -argumentlist $account,$secpwd
invoke-command -computername 10.73.157.125 -Credential $cred -ScriptBlock {Import-Module "C:\Program Files\modules\HyperV";stop-vm "MGHZOA-WEB(10.73.157.124)" -Force;sleep 10;stop-vm "MGHZOA-CW01(10.73.157.126)" -Force;stop-vm "MGHZOA-DB(10.73.157.123)" -Force}
invoke-command -computername 10.73.157.125 -Credential $cred -ScriptBlock {Import-Module "C:\Program Files\modules\HyperV";get-vm|select ElementName,OnTimeInMilliseconds }

启动虚机脚本如下:

# 03start.bat内容如下:
@echo off
powershell.exe -ExecutionPolicy Bypass -File  start-hyperhost.ps1
pause
# start-hyperhost.ps1文件内容如下:
$account = "USER-20180228WD\administrator"
$password = 'mypasswd'
$secpwd = convertto-securestring $password -asplaintext -force
$cred = new-object System.Management.Automation.PSCredential -argumentlist $account,$secpwd
invoke-command -computername 10.73.157.125 -Credential $cred -ScriptBlock {Import-Module "C:\Program Files\modules\HyperV";start-vm "MGHZOA-CW01(10.73.157.126)";start-vm "MGHZOA-DB(10.73.157.123)";sleep 15;start-vm "MGHZOA-WEB(10.73.157.124)";}
invoke-command -computername 10.73.157.125 -Credential $cred -ScriptBlock {Import-Module "C:\Program Files\modules\HyperV";get-vm|select ElementName,OnTimeInMilliseconds }
echo "=================================="
echo "三台虚拟机启动中……"
echo "等待后台进程运行"
sleep 80
echo "打开合同页面,请查看浏览器页面:"
Start-Process -FilePath http://10.73.157.124/workflow/UserLogin.aspx

不过这个调用是有窗口进行查看的,如果不想要进行窗口显示,也可以通过vbs调用powershell,类似如下:

command = "powershell.exe -nologo -command D:\Hyper-V\test.ps1"
set shell = CreateObject("WScript.Shell")
shell.Run command,0




本站的发展离不开您的资助,金额随意,欢迎来赏!

You can donate through PayPal.
My paypal id: itybku@139.com
Paypal page: https://www.paypal.me/361way

分类: windows 标签:
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.