Index: /trunk/doc/manual/en_US/man_VBoxManage-unattended.xml
===================================================================
--- /trunk/doc/manual/en_US/man_VBoxManage-unattended.xml	(revision 68186)
+++ /trunk/doc/manual/en_US/man_VBoxManage-unattended.xml	(revision 68187)
@@ -44,4 +44,5 @@
       <arg>--user=<replaceable>login</replaceable></arg>
       <arg>--password=<replaceable>password</replaceable></arg>
+      <arg>--password-file=<replaceable>file</replaceable></arg>
       <arg>--full-user-name=<replaceable>name</replaceable></arg>
       <arg>--key=<replaceable>product-key</replaceable></arg>
@@ -112,5 +113,13 @@
         <varlistentry>
           <term><option>--password=<replaceable>password</replaceable></option></term>
-          <listitem><para>The login password. (default: changeme)</para></listitem>
+          <listitem>
+            <para>The login password.  This is used for the user given by <option>--user</option> as well as the
+              root/administrator user.  (default: changeme)</para></listitem>
+        </varlistentry>
+        <varlistentry>
+          <term><option>--password-file=<replaceable>file</replaceable></option></term>
+          <listitem>
+            <para>Alternative to <option>--password</option> for providing the password.  Special filename
+              <computeroutput>stdin</computeroutput> can be used to read the password from standard input.</para></listitem>
         </varlistentry>
         <varlistentry>
Index: /trunk/src/VBox/Frontends/VBoxManage/VBoxManageMisc.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VBoxManage/VBoxManageMisc.cpp	(revision 68186)
+++ /trunk/src/VBox/Frontends/VBoxManage/VBoxManageMisc.cpp	(revision 68187)
@@ -1387,5 +1387,6 @@
         { "--iso",                              'i', RTGETOPT_REQ_STRING },
         { "--user",                             'u', RTGETOPT_REQ_STRING },
-        { "--password",                         'p', RTGETOPT_REQ_STRING }, /** @todo password file ++ */
+        { "--password",                         'p', RTGETOPT_REQ_STRING },
+        { "--password-file",                    'X', RTGETOPT_REQ_STRING },
         { "--full-user-name",                   'U', RTGETOPT_REQ_STRING },
         { "--key",                              'k', RTGETOPT_REQ_STRING },
@@ -1446,4 +1447,14 @@
                 break;
 
+            case 'X':   // --password-file
+            {
+                Utf8Str strPassword;
+                RTEXITCODE rcExit = readPasswordFile(ValueUnion.psz, &strPassword);
+                if (rcExit != RTEXITCODE_SUCCESS)
+                    return rcExit;
+                CHECK_ERROR2_RET(hrc, ptrUnattended, COMSETTER(Password)(Bstr(strPassword).raw()), RTEXITCODE_FAILURE);
+                break;
+            }
+
             case 'U':   // --full-user-name
                 CHECK_ERROR2_RET(hrc, ptrUnattended, COMSETTER(FullUserName)(Bstr(ValueUnion.psz).raw()), RTEXITCODE_FAILURE);
