diff --git a/includes/bootstrap.inc b/includes/bootstrap.inc
index c8f3627..690c1af 100644
--- a/includes/bootstrap.inc
+++ b/includes/bootstrap.inc
@@ -428,12 +428,24 @@ function _drush_bootstrap_drush() {
   // Set the terminal width, used for wrapping table output.
   // Normally this is exported using tput in the drush script.
   // If this is not present we do an additional check using stty here.
+  // On Windows in CMD and PowerShell is this exported using mode con.
+  // PHP version prior to 5.3.0 is not supporting this, they always
+  // return 80 columns
   if (!($columns = getenv('COLUMNS'))) {
-    exec('stty size 2>&1', $stty_output, $stty_status);
-    if (!$stty_status) $columns = preg_replace('/\d+\s(\d+)/', '$1', $stty_output[0], -1, $stty_count);
-    // If stty failed, or we couldn't parse it's output, we assume 80 columns.
-    if ($stty_status || !$stty_count) $columns = 80;
-  }
+    if (drush_is_windows() && !drush_is_cygwin() && version_compare(phpversion(), '5.3.0') > -1) {
+      exec('mode con', $mode_output, $mode_status); 
+      if (!$mode_status && is_array($mode_output)) {
+        $columns = (int)preg_replace('/\D/', '', $mode_output[4], -1, $mode_count);
+        if ($mode_status || !$mode_count) $columns = 80;
+      }
+    }
+    elseif (!drush_is_windows() || drush_is_cygwin()) {
+      exec('stty size 2>&1', $stty_output, $stty_status);
+      if (!$stty_status) $columns = preg_replace('/\d+\s(\d+)/', '$1', $stty_output[0], -1, $stty_count);
+      // If stty failed, or we couldn't parse it's output, we assume 80 columns.
+      if ($stty_status || !$stty_count) $columns = 80;
+    }
+  }  
   // If a caller wants to reserve some room to add additional
   // information to the drush output via post-processing, the
   // --reserve-margin flag can be used to declare how much
