Windows Vitual PC で フロッピーディスクをマウントする方法

2010/06/24

Virtual PC Windows 7

http://blogs.msdn.com/b/virtual_pc_guy/archive/2009/10/01/using-floppy-disks-with-windows-virtual-pc.aspx

のコンテンツのコピー。これで、Windows 7のVirtual PCでも、フロッピーディスクやフロッピーのイメージをマウントできます。ブートもできるので、DOS環境の作成も可能。

 

Most users of Windows Virtual PC do not need to use floppy disks with their virtual machines, as general usage of floppy disks has become rarer and rarer.  Those who do need to use floppy disks – may think that they can no longer do this – as there is no user interface for connecting floppy disks to virtual machines.

Do not be fooled.

Windows Virtual PC does support the use of floppy disks – but as this feature is only used by a small subset of users – we did not expose this in the user interface.  To use floppy disks you need to have a script to help you.  And here are the scripts:

VBScript:

Option Explicit


 


' Define constants for floppy drive attachment types


CONST vmFloppyDrive_None = 0


CONST vmFloppyDrive_Image = 1


CONST vmFloppyDrive_HostDrive = 2


 


Dim namedArguments, argumentError, vpc, vm, vmName, action, floppy, vmFloppyDrive


 


' Check that the script is running at the command line.


If UCase(Right(Wscript.FullName, 11)) = "WSCRIPT.EXE" Then


 WScript.Echo "This script must be run under CScript."


 WScript.Quit


End If


 


' Get the virtual machine name / floppy commands from the command-line arguments


Set namedArguments = WScript.Arguments.Named


 


argumentError = false


 


If namedArguments.Exists("vm") Then


 vmName = namedArguments.Item("vm")


Else


 argumentError = true


End If


 


If namedArguments.Exists("action") Then


 action = namedArguments.Item("action")


Else


 argumentError = true


End If


 


If namedArguments.Exists("floppy") Then


 floppy = namedArguments.Item("floppy")


Else


 If (not ((action = "info") or (action = "disconnect"))) Then


  argumentError = true


 End If


End If


 


' Display usage information if wrong arguments are provided


if argumentError then


 WScript.Echo "Missing command-line argument"


 WScript.Echo


 WScript.Echo "Usage: FloppyDrive.vbs /vm:" & chr(34) & "Name of virtual machine to be started" & chr(34)


 WScript.Echo


 WScript.Echo "                       /action:info       - to display information about the current floppy configuration"


 WScript.Echo "                               disconnect - to disconnect any attached floppy disk or floppy disk image"


 WScript.Echo "                               vfd        - to attach a virtual floppy disk image"


 WScript.Echo "                               physical   - to attach a physical floppy disk"


 WScript.Echo


 WScript.Echo "                       /floppy:name       - where name is either the full name and path for a virtual"


 WScript.Echo "                                            floppy disk or the letter of a physical disk to attach"


 WScript.Echo


 WScript.Quit


end if


 


' Attempt to connect to Virtual PC


On Error Resume Next


Set vpc = CreateObject("VirtualPC.Application")


If Err.Number <> 0 Then


 WScript.Echo "Unable to connect to Virtual PC."


 WScript.Quit


End if


On Error Goto 0


 


' Get virtual machine object


Set vm = vpc.FindVirtualMachine(vmName)


 


' Get the floppy drive


set vmFloppyDrive = vm.FloppyDrives.item(1)


 


' Perform the specified action


Select Case action


 


 ' Display floppy disk information


 case "info"


  wscript.echo "Floppy disk information"


  wscript.echo "======================="


 


  ' Different information is needed for each attachment type


  select case vmFloppyDrive.Attachment


   case vmFloppyDrive_None 


    wscript.echo "Floppy Attachment : No floppy disk attached"


    wscript.echo "Drive Number      : " & vmFloppyDrive.DriveNumber


   case vmFloppyDrive_Image 


    wscript.echo "Floppy Attachment : Floppy disk image attached"


    wscript.echo "Drive Number      : " & vmFloppyDrive.DriveNumber


    wscript.echo "Image File        : " & vmFloppyDrive.ImageFile 


   case vmFloppyDrive_HostDrive 


    wscript.echo "Floppy Attachment : Physical floppy disk attached"


    wscript.echo "Drive Number      : " & vmFloppyDrive.DriveNumber


    wscript.echo "Host Drive Letter : " & vmFloppyDrive.HostDriveLetter 


  end select


 


 ' Disconnect the current floppy disk


 case "disconnect"


 


  wscript.echo "Disconnecting the floppy disk."


 


  ' A different method is used to disconnect a floppy disk image than for a physical disk 


  select case vmFloppyDrive.Attachment


   case vmFloppyDrive_Image 


    vmFloppyDrive.ReleaseImage


   case vmFloppyDrive_HostDrive 


    vmFloppyDrive.ReleaseHostDrive


  end select


 


 ' Attach a floppy disk image


 case "vfd"


 


  wscript.echo "Attaching " & floppy & " to the floppy drive."


  vmFloppyDrive.AttachImage(floppy)


 


 ' Attach a physical floppy disk


 case "physical"


 


  wscript.echo "Attaching physical disk " & floppy & ": to the floppy drive."


  vmFloppyDrive.AttachHostDrive(floppy)


 


 ' Catch invalid actions


 case else


  wscript.echo "Invalid action provided. Info, disconnect, vfd and physical are valid options."


 


end select


 


wscript.echo


PowerShell:



param([string]$vmName, [string]$action, [string]$floppy)


 


$argumentError = 0


 


# Check for correct command-line arguments


If ($vmName -eq "")


 {$argumentError = 1}


 


If ($action -eq "")


 {$argumentError = 1}


 


If ($floppy -eq "")


 {


  if ((!([string]::Compare($action, "vfd", $True))) -or (!([string]::Compare($action, "physical", $True))))


  {$argumentError = 1}


 }


 


# Display usage information if wrong arguments are provided


If ($argumentError -eq 1)


 {


 write-host "Missing command-line argument."


 write-host "USage: FloppyDrive.ps1 -vmName `"Name of virtual machine`""


 write-host "                       -action info       - to display information about the current floppy configuration"


 write-host "                               disconnect - to disconnect any attached floppy disk or floppy disk image"


 write-host "                               vfd        - to attach a virtual floppy disk image"


 write-host "                               physical   - to attach a physical floppy disk"


 write-host


 write-host "                       -floppy name       - where name is either the full name and path for a virtual"


 write-host "                                            floppy disk or the letter of a physical disk to attach"


 exit


 }


 


# Connect to Virtual PC


$vpc=new-object –com VirtualPC.Application –Strict


 


# Get virtual machine object


$vm = $vpc.FindVirtualMachine($vmName)


 


# Get the floppy drive


$vmFloppyDrive = $vm.FloppyDrives.item(1)


 


# Perform the specified action


switch ($action) 


   {


 


   # Display floppy disk information


   "info" {


      write-host "Floppy disk information"


      write-host "======================="


 


      # Different information is needed for each attachment type


      switch ($vmFloppyDrive.Attachment)


        {


        0 {


           write-host "Floppy Attachment : No floppy disk attached"


           write-host "Drive Number      : " $vmFloppyDrive.DriveNumber}


        1 { 


           write-host "Floppy Attachment : Floppy disk image attached"


           write-host "Drive Number      : " $vmFloppyDrive.DriveNumber


           write-host "Image File        : " $vmFloppyDrive.ImageFile }


        2 { 


           write-host "Floppy Attachment : Physical floppy disk attached"


           write-host "Drive Number      : " $vmFloppyDrive.DriveNumber


           write-host "Host Drive Letter : " $vmFloppyDrive.HostDriveLetter }


        }


      }


 


   # Disconnect the current floppy disk


   "disconnect" {


 


      write-host "Disconnecting the floppy disk."


 


      # A different method is used to disconnect a floppy disk image than for a physical disk 


      switch ($vmFloppyDrive.Attachment)


         {


         1 {$vmFloppyDrive.ReleaseImage()}


         2 {$vmFloppyDrive.ReleaseHostDrive()}


         }


      }


 


   # Attach a floppy disk image


   "vfd" {


      write-host "Attaching " $floppy " to the floppy drive."


      $vmFloppyDrive.AttachImage($floppy)


      }


      


   # Attach a physical floppy disk


   "physical"  {


      write-host "Attaching physical disk " $floppy ": to the floppy drive."


      $vmFloppyDrive.AttachHostDrive($floppy)


      }


      


   # Catch invalid actions


   default {write-host "Invalid action provided. Info, disconnect, vfd and physical are valid options."}


   }


These scripts are fairly “self documenting” and will provide error messages if the wrong input is provided.  They will allow you to connect both physical and virtual floppy disks to a virtual machine.  As well as to check the information about the current floppy disk configuration.



I have also attached these scripts for download.



Cheers,

Ben