powershell进行hyper-v远程管理
一、powershell安装hyper-v模块
在 WinRM的配置使用 篇中提到如何通过开启WINRM进行powershell远程管理,接下来说下如何和hyper进行结合。win2008下的powershell默认不带hyper模块,win2008R2下需要使用开源项目PsHyperV 。也可以去github上进行下载。地址如下:https://github.com/gcbond/pshyperv ,下载后,可以打开压缩包,直接运行install.cmd进行安装,这里注意,需要使用管理员权限进行安装。如果不选择管理员权限,会报如下错误:
安装完成后,可以在powershell下通过如下命令进行操作(获取帮助信息可以通过Get-Help Get-VM):
get-vm
Start-VM
Stop-VM
具体可以参考 powershell中和hyper-v的api 。
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下的大部分函数名及函数参数也发生了变化。如下:
二、powershell + hyper-v虚机管理
win2008下直接打开powershell或者远程直接powershell调用还是会出现异常提示的,如下:
解决该问题,是需要导入模块,才可以调用:
1Import-Module "C:Program FilesmodulesHyperV"
2get-vm
powershell下直接进行远程命令调用还需要使用invoke-command命令,如下:
1# 远程执行命令
2invoke-command -computername 192.168.21.1 -Credential $cred -command {dir C:/}
3invoke-command -computername 192.168.21.1 -Credential $cred -ScriptBlock {dir c:}
4# 远程执行脚本
5echo "dir c:" > dirDriveC.ps1
6invoke-command -computername 192.168.21.1 -Credential $cred -FilePath .dirDriveC.ps1
具体可以参考:windows服务器远程执行命令(PowerShell+WinRM)
三、一键式最终实现
由于powershell在主机上是无法直接调用使用的,直接使用会报错:’无法加载文件 D:hyperstatus-hyperhost.ps1,因为在此系统中禁止执行脚本。有关详细信息,请参阅 “get-help about_signing”‘。解决该问题的办法可以通过cmd调用时,使用相关参数,如下:
1powershell.exe -ExecutionPolicy Bypass -File 文件名.ps1
2
3或者永久的改变本机的 PowerShell 执行策略(不推荐,不安全):
4Set-ExecutionPolicy Bypass
该部分参考:《更好的批处理脚本语言 PowerShell》
最终实现的有如下6个文件:
1PS D:hyper> ls|select Name
2Name
3----
401status.bat
502stop.bat
603start.bat
7start-hyperhost.ps1
8status-hyperhost.ps1
9stop-hyperhost.ps1
对应的状态查看脚本内容如下:
1# 01status.bat内容如下:
2@echo off
3powershell.exe -ExecutionPolicy Bypass -File status-hyperhost.ps1
4echo ============================================
5echo OnTimeInMilliseconds:表示当前运行时间
6echo ElementName:表示当前虚机名称
7echo ============================================
8pause
9# status-hyperhost.ps1文件内容如下:
10$account = "USER-20180228WDadministrator"
11$password = 'mypasswd'
12$secpwd = convertto-securestring $password -asplaintext -force
13$cred = new-object System.Management.Automation.PSCredential -argumentlist $account,$secpwd
14invoke-command -computername 10.73.157.125 -Credential $cred -ScriptBlock {Import-Module "C:Program FilesmodulesHyperV";get-vm|select ElementName,OnTimeInMilliseconds}
停掉虚拟机脚本如下:
1# 02stop.bat文件内容如下:
2@echo off
3powershell.exe -ExecutionPolicy Bypass -File stop-hyperhost.ps1
4pause
5# stop-hyperhost.ps1内容如下:
6$account = "USER-20180228WDadministrator"
7$password = 'mypasswd'
8$secpwd = convertto-securestring $password -asplaintext -force
9$cred = new-object System.Management.Automation.PSCredential -argumentlist $account,$secpwd
10invoke-command -computername 10.73.157.125 -Credential $cred -ScriptBlock {Import-Module "C:Program FilesmodulesHyperV";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}
11invoke-command -computername 10.73.157.125 -Credential $cred -ScriptBlock {Import-Module "C:Program FilesmodulesHyperV";get-vm|select ElementName,OnTimeInMilliseconds }
启动虚机脚本如下:
1# 03start.bat内容如下:
2@echo off
3powershell.exe -ExecutionPolicy Bypass -File start-hyperhost.ps1
4pause
5# start-hyperhost.ps1文件内容如下:
6$account = "USER-20180228WDadministrator"
7$password = 'mypasswd'
8$secpwd = convertto-securestring $password -asplaintext -force
9$cred = new-object System.Management.Automation.PSCredential -argumentlist $account,$secpwd
10invoke-command -computername 10.73.157.125 -Credential $cred -ScriptBlock {Import-Module "C:Program FilesmodulesHyperV";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)";}
11invoke-command -computername 10.73.157.125 -Credential $cred -ScriptBlock {Import-Module "C:Program FilesmodulesHyperV";get-vm|select ElementName,OnTimeInMilliseconds }
12echo "=================================="
13echo "三台虚拟机启动中……"
14echo "等待后台进程运行"
15sleep 80
16echo "打开合同页面,请查看浏览器页面:"
17Start-Process -FilePath http://10.73.157.124/workflow/UserLogin.aspx
不过这个调用是有窗口进行查看的,如果不想要进行窗口显示,也可以通过vbs调用powershell,类似如下:
1command = "powershell.exe -nologo -command D:Hyper-Vtest.ps1"
2set shell = CreateObject("WScript.Shell")
3shell.Run command,0
捐赠本站(Donate)
如您感觉文章有用,可扫码捐赠本站!(If the article useful, you can scan the QR code to donate))
- Author: shisekong
- Link: https://blog.361way.com/powershell-hyperv/6375.html
- License: This work is under a 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. Kindly fulfill the requirements of the aforementioned License when adapting or creating a derivative of this work.