【发布时间】:2017-11-10 06:31:40
【问题描述】:
我有一个安装了 Hyper-V 角色的独立(不是集群,而是在域中)Windows Server 2016。 我需要每天克隆虚拟机,所以我使用 C# 和 PowerShell 编写了一些小“东西”。
-
VHD 的并行复制
public static void Main(string[] args) { var sourceFile = args[0]; var distanationDir = args[1]; int numOfCopies = Int32.Parse(args[2]); //var sourceFile = $@"C:\temp\123.VHD"; //var distanationDir = $@"C:\temp\vhds\"; //int numOfCopies = 15; StartJob(sourceFile, distanationDir, numOfCopies, random); } private static void StartJob(string sourcefile, string distanationdir, int numOfCopies, Random random) { int count = 0; Parallel.For(0, numOfCopies, i => { Console.WriteLine("i = {0}, thread = {1}", i, Thread.CurrentThread.ManagedThreadId); try { string atrib = Path.GetExtension(sourcefile); string guid = Guid.NewGuid().ToString("N"); var copyNew = Path.GetFileNameWithoutExtension(sourcefile) + guid + atrib; File.Copy(sourcefile, Path.Combine(distanationdir + '\\', copyNew)); Console.WriteLine(@"Started{copyNew}"); } catch (IOException copyError) { Console.WriteLine(copyError.Message); } } } -
第二步是使用此 PowerShell 脚本创建 VM,该脚本使用现有 VHDX 创建 VM。
$from = 81 $howmany = 30 $files = Get-ChildItem -Path "E:\Hyper-v" -Filter *.vhdx if ($files) { Write-Host "variable is not null" try { $vmIndex = $from for ($i = 0; $i -lt $howmany; $i++) { Write-Host "Start " New-Vm -Name "AUT-TA$vmIndex" -Path "E:\Hyper-v\Virtual Machines" -MemoryStartupBytes 4294967296 -VHDPath $files[$i].FullName -SwitchName "Broadcom NetXtreme Gigabit Ethernet #4 - Virtual Switch" Write-Host "Vm created " + "AUT-TA$vmIndex" $vmIndex++ Write-Host "End" } exit } catch { [System.Exception]"caught a system exception" } } else { Write-Host "No such files" exit } 最后我需要将它们加入域,但我需要一些脚本,该脚本将为该主机上的每个 VM 运行并将其添加到域中。
【问题讨论】:
-
有些人这样想 $domain = "myDomain" $password = "myPassword!" | ConvertTo-SecureString -asPlainText -Force $username = "$domain\myUserAccount" $credential = New-Object System.Management.Automation.PSCredential($username,$password) Add-Computer -DomainName $domain -Credential $credential 。但是有些人认为我可以在服务器 hyper-v 上运行并将所有 VM 添加到域中
标签: c# powershell clone hyper-v windows-server-2016