diff --git a/scripts/machines.py b/scripts/machines.py
index c00596cf9bb25fb99744bbfc838d234216593de1..b926d62cc836ef8cf3e6760b043d24ecb140c76c 100755
--- a/scripts/machines.py
+++ b/scripts/machines.py
@@ -108,10 +108,20 @@ def users_ldap():
     }
 
 
-def machines_display(data, sort_by="datePeremption"):
+def machines_display(data, output_format, sort_by="datePeremption"):
     """Pandas & Tabulate magic to display machines data."""
-    df = pd.DataFrame(data).T.sort_values(by=sort_by)
-    print(tabulate(df.drop("cn", axis=1), headers="keys"))
+    df = pd.DataFrame(data).T.sort_values(by=sort_by).drop("cn", axis=1)
+    match output_format:
+        case "csv":
+            print(df.to_csv())
+        case "df":
+            print(pd.DataFrame(data))
+        case "dict":
+            print(df.to_dict())
+        case "json":
+            print(df.to_json())
+        case "table":
+            print(tabulate(df, headers="keys"))
 
 
 def get_parser() -> ArgumentParser:
@@ -124,6 +134,12 @@ def get_parser() -> ArgumentParser:
     parser.add_argument("-R", "--responsable")
     parser.add_argument("-u", "--utilisateur")
     parser.add_argument("-r", "--room")
+    parser.add_argument(
+        "-f",
+        "--output-format",
+        default="table",
+        choices=["csv", "df", "dict", "json", "table"],
+    )
 
     # Sorting
     parser.add_argument(
@@ -142,7 +158,7 @@ if __name__ == "__main__":
     if not machines_data:
         print("nothing was found.")
     else:
-        machines_display(machines_data, args.sort_by)
+        machines_display(machines_data, args.output_format, args.sort_by)
         print()
         users_data = users_ldap()
         for k, v in machines_data.items():