Using Floppy Disks with Windows Virtual PC

Using Floppy Disks with Windows Virtual PC

Rate This
  • Comments 41

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

Attachment: Floppy Drive Scripts.zip
Leave a Comment
  • Please add 1 and 5 and type the answer here:
  • Post
  • Thank you for these scripts.

    Floppy image name must be *.vfd like this

    cscript.exe FloppyDrive.vbs /vm:"Dos" /action:vfd /floppy:"c:\Disk1.vfd"

  • Virtual PC recognizes that there is an A: floppy drive, but double-clicking the drive gives an error message "Please insert a disk into drive A:." when an installation program disk is in the floppy drive A:. I have used computers for several decades, but never written or used computer script. I need to be able to install an old legacy KeyForm Designer program on Virtual PC, but it only installs from a floppy disk.

    I can get the FloppyDrive.vbs script to run, but can't get the Power Shell FloppyDrive.ps1 script to run. Can you possibly provide detailed information for me, so that I can get my floppy disk drive to actually work, rather than just be recognized?

  • As usual MS missses the boat. I need either the floppy, USB, or the CD to boot to dos to run GHOST. I never understood who they beta test with. We now have a ribbon? in Word to cover a third of the screen. The need to have the ability to boot to dos for Ghost is important to a lot of users. I think it should be incorporated as a patch to VM. The CD will not boot from a ghost CD boot disk but the PC will. (tells me the CD works) Floppy is dead but we knew that.

  • Thank you but I don't want to use scripts to access floppy disks and I need folder sharing in DOS guests. I loved Virtual PC from the beginning and continue to use VPC 2007 on Windows 7. Windows Virtual PC isn't VPC anymore. It's a good loader for XP mode but it doesn't support my virtualization needs.

  • The VBS script gives "Object required" on line 71:

    set vmFloppyDrive = vm.FloppyDrives.item(1)

  • With the time that you spent on these scripts, you could have added the GUI in Virtual PC. It is really insane that Microsoft choose to make Virtual PC far less friendly to legacy systems, when the main reason people use Virtual PC is for legacy systems. How often would need to run a Windows 7 Virtual PC on a Windows 7 PC? Actually we need Virtual PC to run Windows 9x/NT/2000 and use flopply disks far more often than Vista. I sincerely hope that you will listen to your customers.

  • HELLO MICROSOFT!!!!!!!!

    Tan hit the point on the head.

  • I will second and third that!!! There is no logic and no excuse for failing to provide GUI support for a floppy disk drive in Virtual PC. This type of thinking makes users shake their heads and wonder what the developers were thinking about. I don't claim to know their thoughts, but I absolutely know what they are not thinking about - the end users who upgraded to Windows 7 and were expecting Virtual PC to cover their needs for legacy programs and devices.

  • Well! Ben! We don't see any comments from you. or is this another stance by Microsoft not to do something. They couldn't automate adding a PC to the Domain or even get WAIK to work right.

  • Dear Microsoft;If it is there and you don't want it to be available for normal users (is one of Microsoft Strategic Objectives to find jobs for professionals who can wrote scripts?), why not making it part of VM configuration file, or just ask for MCP Id and email when we want to use it :)

  • What about access to older PCI cards and interfaces from Virtual PC? How can I access PCI cards that worked under XP but don't work with the old drivers under the newer VISTA and Windows 7? Thanks.

  • how did you launch this scripts???

    cscript.exe FloppyDrive.vbs /vm:"Dos" /action:vfd /floppy:"c:\Disk1.vfd"

    what is DOS ? is it DOS.vmcx ? on which path ?

  • Hi all,

    I'm trying to install OS/2 ;-0, but C:\Admin>cscript fdd.vbs /vm:Os2 /action:vfd /floppy:c:\admin\disk1.imz

    Returns:

    Microsoft (R) Windows Script Host Version 5.8

    Copyright (C) Microsoft Corporation. All rights reserved.

    Attaching c:\admin\disk1.imz to the floppy drive.

    C:\Admin\fdd.vbs(225, 3) (null): The system cannot find the file specified.

  • Um this does not work at all, and if we are going to run old OS's in Virtual PC wouldn't make sense to add this back, please fix this.  These scripts will not run, and I have no clue what they do, I just want to mount a flopy image in virtual PC, why is this so hard.  

  • One more thing, I said your post was quite helpful but there is a big problem here. How do I run the script? Why don't you explain how? We are not supposed to know it, so why should we struggle trying to figure it out if you could explain how to do it with a few words? It may be trivial for you but it is not trivial for most users. And even if you have already answered someone else in the comments section, that's not the right way to do things. Please, complete your article.

    Regards.

Page 2 of 3 (41 items) 123