diff --git a/lib/private/largefilehelper.php b/lib/private/largefilehelper.php
index 751e60de53989f70d563819ed6b6b7d12b083577..5f5e14aca3583bc3cecc16556cddaaf21fb3bb2c 100644
--- a/lib/private/largefilehelper.php
+++ b/lib/private/largefilehelper.php
@@ -92,17 +92,26 @@ class LargeFileHelper {
 	public function getFilesizeViaExec($filename) {
 		if (\OC_Helper::is_function_enabled('exec')) {
 			$os = strtolower(php_uname('s'));
+			$arg = escapeshellarg($filename);
 			$result = '';
 			if (strpos($os, 'linux') !== false) {
-				$result = trim(exec('stat -c %s ' . escapeshellarg($filename)));
+				$result = $this->exec("stat -c %s $arg");
 			} else if (strpos($os, 'bsd') !== false) {
-				$result = trim(exec('stat -f %z ' . escapeshellarg($filename)));
-			}
-
-			if (ctype_digit($result)) {
-				return 0 + $result;
+				$result = $this->exec("stat -f %z $arg");
+			} else if (strpos($os, 'win') !== false) {
+				$result = $this->exec("for %F in ($arg) do @echo %~zF");
+				if (is_null($result)) {
+					// PowerShell
+					$result = $this->exec("(Get-Item $arg).length");
+				}
 			}
+			return $result;
 		}
 		return null;
 	}
+
+	protected function exec($cmd) {
+		$result = trim(exec($cmd));
+		return ctype_digit($result) ? 0 + $result : null;
+	}
 }