// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF // ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO // THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A // PARTICULAR PURPOSE. // // Copyright (c) Microsoft. All rights reserved. namespace Microsoft.Samples.HyperV.Storage { using System; using System.Globalization; using System.Reflection; class Program { /// /// Entry point of the program. /// /// Command line arguments. static void Main( string[] args) { if (args.Length == 3) { if (string.Equals(args[0], "GetVirtualHardDisk", StringComparison.OrdinalIgnoreCase)) { string serverName = args[1]; string virtualHardDiskPath = args[2]; StorageGetSample.GetVirtualHardDisk( serverName, virtualHardDiskPath); } else if (string.Equals(args[0], "ValidateVirtualHardDisk", StringComparison.OrdinalIgnoreCase)) { string serverName = args[1]; string virtualHardDiskPath = args[2]; StorageValidateSample.ValidateVirtualHardDisk( serverName, virtualHardDiskPath); } else if (string.Equals(args[0], "DetachVirtualHardDisk", StringComparison.OrdinalIgnoreCase)) { string serverName = args[1]; string virtualHardDiskPath = args[2]; StorageDetachSample.DetachVirtualHardDisk( serverName, virtualHardDiskPath); } else if (string.Equals(args[0], "CreateVirtualFloppyDisk", StringComparison.OrdinalIgnoreCase)) { string serverName = args[1]; string virtualHardDiskPath = args[2]; StorageFloppySample.CreateVirtualFloppyDisk( serverName, virtualHardDiskPath); } else { ShowUsage(); } } else if (args.Length == 4) { if (string.Equals(args[0], "CompactVirtualHardDisk", StringComparison.OrdinalIgnoreCase)) { string serverName = args[1]; string virtualHardDiskPath = args[2]; string mode = args[3]; if (string.Equals(mode, "2", StringComparison.OrdinalIgnoreCase)) { StorageAttachSample.AttachVirtualHardDisk( serverName, virtualHardDiskPath, "false", "true"); } StorageCompactSample.CompactVirtualHardDisk( serverName, virtualHardDiskPath, mode); if (string.Equals(mode, "2", StringComparison.OrdinalIgnoreCase)) { StorageDetachSample.DetachVirtualHardDisk( serverName, virtualHardDiskPath); } } else if (string.Equals(args[0], "MergeVirtualHardDisk", StringComparison.OrdinalIgnoreCase)) { string serverName = args[1]; string sourcePath = args[2]; string destinationPath = args[3]; StorageMergeSample.MergeVirtualHardDisk( serverName, sourcePath, destinationPath); } else if (string.Equals(args[0], "ResizeVirtualHardDisk", StringComparison.OrdinalIgnoreCase)) { string serverName = args[1]; string virtualHardDiskPath = args[2]; UInt64 fileSize = UInt64.Parse(args[3], CultureInfo.CurrentCulture); StorageResizeSample.ResizeVirtualHardDisk( serverName, virtualHardDiskPath, fileSize); } else if (string.Equals(args[0], "SetVirtualHardDisk", StringComparison.OrdinalIgnoreCase)) { string serverName = args[1]; string virtualHardDiskPath = args[2]; Int32 sectorSize; string parentPath = args[3]; if (Int32.TryParse(args[3], NumberStyles.None, CultureInfo.CurrentCulture, out sectorSize)) { StorageSetSample.SetVirtualHardDisk( serverName, virtualHardDiskPath, null, sectorSize); } else { StorageSetSample.SetVirtualHardDisk( serverName, virtualHardDiskPath, parentPath, 0); } } else { ShowUsage(); } } else if (args.Length == 5) { if (string.Equals(args[0], "AttachVirtualHardDisk", StringComparison.OrdinalIgnoreCase)) { string serverName = args[1]; string virtualHardDiskPath = args[2]; string assignDriveLetter = args[3]; string readOnly = args[4]; StorageAttachSample.AttachVirtualHardDisk( serverName, virtualHardDiskPath, assignDriveLetter, readOnly); } else if (string.Equals(args[0], "CreateDifferencingVirtualHardDisk", StringComparison.OrdinalIgnoreCase)) { string serverName = args[1]; string virtualHardDiskPath = args[2]; string parentPath = args[3]; VirtualHardDiskType type = VirtualHardDiskType.Differencing; VirtualHardDiskFormat format; if (string.Equals(args[4], "vhdx", StringComparison.OrdinalIgnoreCase)) { format = VirtualHardDiskFormat.Vhdx; } else { format = VirtualHardDiskFormat.Vhd; } StorageCreateSample.CreateVirtualHardDisk( serverName, virtualHardDiskPath, parentPath, type, format, 0, 0, 0, 0); } else if (string.Equals(args[0], "ConvertVirtualHardDisk", StringComparison.OrdinalIgnoreCase)) { string serverName = args[1]; string sourcePath = args[2]; string destinationPath = args[3]; VirtualHardDiskFormat format; if (string.Equals(args[4], "vhdx", StringComparison.OrdinalIgnoreCase)) { format = VirtualHardDiskFormat.Vhdx; } else { format = VirtualHardDiskFormat.Vhd; } StorageConvertSample.ConvertVirtualHardDisk( serverName, sourcePath, destinationPath, format); } else { ShowUsage(); } } else if (args.Length == 6) { if (string.Equals(args[0], "SetParentVirtualHardDisk", StringComparison.OrdinalIgnoreCase)) { string serverName = args[1]; string ChildPath = args[2]; string ParentPath = args[3]; string LeafPath = args[4]; string IgnoreIDMismatch = args[5]; if (string.Equals(LeafPath, "null", StringComparison.OrdinalIgnoreCase)) { // Only valid if VHD is not online. LeafPath = null; } StorageSetParentSample.SetParentVirtualHardDisk( serverName, ChildPath, ParentPath, LeafPath, IgnoreIDMismatch); } else { ShowUsage(); } } else if (args.Length == 8) { if (string.Equals(args[0], "CreateFixedVirtualHardDisk", StringComparison.OrdinalIgnoreCase)) { string serverName = args[1]; string virtualHardDiskPath = args[2]; string parentPath = null; VirtualHardDiskType type = VirtualHardDiskType.FixedSize; VirtualHardDiskFormat format; if (string.Equals(args[3], "vhdx", StringComparison.OrdinalIgnoreCase)) { format = VirtualHardDiskFormat.Vhdx; } else { format = VirtualHardDiskFormat.Vhd; } Int64 fileSize = Int64.Parse(args[4], CultureInfo.CurrentCulture); Int32 blockSize = Int32.Parse(args[5], CultureInfo.CurrentCulture); Int32 logicalSectorSize = Int32.Parse(args[6], CultureInfo.CurrentCulture); Int32 physicalSectorSize = Int32.Parse(args[7], CultureInfo.CurrentCulture); StorageCreateSample.CreateVirtualHardDisk( serverName, virtualHardDiskPath, parentPath, type, format, fileSize, blockSize, logicalSectorSize, physicalSectorSize); } else if (string.Equals(args[0], "CreateDynamicVirtualHardDisk", StringComparison.OrdinalIgnoreCase)) { string serverName = args[1]; string virtualHardDiskPath = args[2]; string parentPath = null; VirtualHardDiskType type = VirtualHardDiskType.DynamicallyExpanding; VirtualHardDiskFormat format; if (string.Equals(args[3], "vhdx", StringComparison.OrdinalIgnoreCase)) { format = VirtualHardDiskFormat.Vhdx; } else { format = VirtualHardDiskFormat.Vhd; } Int64 fileSize = Int64.Parse(args[4], CultureInfo.CurrentCulture); Int32 blockSize = Int32.Parse(args[5], CultureInfo.CurrentCulture); Int32 logicalSectorSize = Int32.Parse(args[6], CultureInfo.CurrentCulture); Int32 physicalSectorSize = Int32.Parse(args[7], CultureInfo.CurrentCulture); StorageCreateSample.CreateVirtualHardDisk( serverName, virtualHardDiskPath, parentPath, type, format, fileSize, blockSize, logicalSectorSize, physicalSectorSize); } else { ShowUsage(); } } else { ShowUsage(); } } /// /// Displays the command line usage for the program. /// static void ShowUsage() { string moduleName = Assembly.GetExecutingAssembly().GetModules()[0].Name; Console.WriteLine("\nUsage:\t{0} \n", moduleName); Console.WriteLine("Supported SampleNames and Arguments:\n"); Console.WriteLine(" GetVirtualHardDisk "); Console.WriteLine(" SetVirtualHardDisk [ | ]"); Console.WriteLine(" ValidateVirtualHardDisk "); Console.WriteLine(" CreateFixedVirtualHardDisk "); Console.WriteLine(" CreateDynamicVirtualHardDisk "); Console.WriteLine(" CreateDifferencingVirtualHardDisk "); Console.WriteLine(" CreateVirtualFloppyDisk "); Console.WriteLine(" AttachVirtualHardDisk "); Console.WriteLine(" DetachVirtualHardDisk "); Console.WriteLine(" SetParentVirtualHardDisk "); Console.WriteLine(" ConvertVirtualHardDisk "); Console.WriteLine(" MergeVirtualHardDisk "); Console.WriteLine(" CompactVirtualHardDisk "); Console.WriteLine(" ResizeVirtualHardDisk "); Console.WriteLine("\n"); Console.WriteLine("Examples:\n"); Console.WriteLine(" {0} GetVirtualHardDisk . c:\\fixed.vhd", moduleName); Console.WriteLine(" {0} SetVirtualHardDisk . c:\\diff.vhdx c:\\dynamic.vhdx", moduleName); Console.WriteLine(" {0} SetVirtualHardDisk . c:\\diff.vhdx 512", moduleName); Console.WriteLine(" {0} ValidateVirtualHardDisk . c:\\fixed.vhd", moduleName); Console.WriteLine(" {0} CreateFixedVirtualHardDisk . c:\\fixed.vhd vhd 1073741824 0 0 0", moduleName); Console.WriteLine(" {0} CreateDynamicVirtualHardDisk . c:\\dynamic.vhd vhd 1073741824 0 0 0", moduleName); Console.WriteLine(" {0} CreateDifferencingVirtualHardDisk . c:\\diff.vhd c:\\dynamic.vhd vhd", moduleName); Console.WriteLine(" {0} CreateVirtualFloppyDisk . c:\\floppy.vfd", moduleName); Console.WriteLine(" {0} AttachVirtualHardDisk . c:\\fixed.vhd true true", moduleName); Console.WriteLine(" {0} DetachVirtualHardDisk . c:\\fixed.vhd", moduleName); Console.WriteLine(" {0} SetParentVirtualHardDisk . c:\\diff.vhd c:\\fixed.vhd null false", moduleName); Console.WriteLine(" {0} ConvertVirtualHardDisk . c:\\dynamic.vhd c:\\fixed.vhd vhd", moduleName); Console.WriteLine(" {0} MergeVirtualHardDisk . c:\\diff.vhd c:\\dynamic.vhd", moduleName); Console.WriteLine(" {0} CompactVirtualHardDisk . c:\\dynamic.vhd 0", moduleName); Console.WriteLine(" {0} ResizeVirtualHardDisk . c:\\dynamic.vhd 2147483648", moduleName); Console.WriteLine("\n"); Console.WriteLine("\n"); } } }