diff --git a/gui/lib/utils_get_version.py b/gui/lib/utils_get_version.py
new file mode 100755
index 0000000..d428dcb
--- /dev/null
+++ b/gui/lib/utils_get_version.py
@@ -0,0 +1,70 @@
+#!/usr/bin/env python
+
+import gen_print as gp
+import gen_cmd as gc
+import collections
+
+module_names = ['Selenium2Library', 'SeleniumLibrary', 'SSHLibrary', 'requests',
+                'XvfbRobot', 'robotremoteserver', 'redfish']
+
+import_versions = collections.OrderedDict()
+
+for module_name in module_names:
+    try:
+        cmd_buf = "import " + module_name
+        exec(cmd_buf)
+        cmd_buf = "import_versions['" + module_name + "'] = " + module_name \
+                  + ".__version__"
+        exec(cmd_buf)
+    except ImportError:
+        import_versions[module_name] = "Not installed"
+
+
+def software_versions():
+    r"""
+    Get the versions for several of the software packages used by
+    openbmc-test-automation and return as a dictionary.
+
+    Example call:
+    ${software_versions}=  Software Versions
+    Rprint Vars  software_versions
+
+    Example output:
+    software_versions:
+      [python]:                                       Python 2.7.12
+      [robot]:                                        Robot Framework 3.1.2 (Python 3.6.8 on linux)
+      [firefox]:                                      Mozilla Firefox 54.0
+      [google-chrome]:                                Not installed
+      [Selenium2Library]:                             3.0.0
+      [SeleniumLibrary]:                              3.3.1
+      [SSHLibrary]:                                   3.3.0
+      [requests]:                                     2.22.0
+      [XvfbRobot]:                                    1.2.2
+      [robotremoteserver]:                            1.1
+      [redfish]:                                      2.1.1
+      [robotframework-angularjs]:                     0.0.10
+      [robotframework-scplibrary]:                    1.2.0
+      [robotframework-extendedselenium2library]:      0.9.1
+      [host OS]:                                      Ubuntu 16.04.6 LTS
+    """
+
+    quiet = 1
+    versions = collections.OrderedDict()
+    for package in ['python', 'robot', 'firefox', 'google-chrome']:
+        # Note: "robot --version" returns 0x00000000000000fb.
+        # Note: If package does not exist, 0x7f is returned.
+        rc, version = gc.shell_cmd(package + " --version",
+                                   valid_rcs=[0, 0x7f, 0xfb])
+        versions[package] = "Not installed" if rc == 0x7f else version.rstrip('\n')
+
+    versions.update(import_versions)
+
+    for package in ['robotframework-angularjs', 'robotframework-scplibrary',
+                    'robotframework-extendedselenium2library']:
+        rc, version = gc.shell_cmd("pip show " + package
+                                   + " | grep Version | sed -re 's/.*: //g'")
+        versions[package] = "Not installed" if not version else version.rstrip('\n')
+
+    rc, version = gc.shell_cmd("lsb_release -d -s")
+    versions["host OS"] = "Failed" if not version else version.rstrip('\n')
+    return versions
