use std::process::Command;
pub fn run_powershell(cmd: &str) -> Option<String> {
for exe in ["pwsh", "powershell"] {
let output = Command::new(exe)
.args(["-NoProfile", "-NonInteractive", "-Command", cmd])
.output();
match output {
Ok(out) if out.status.success() => {
let s = String::from_utf8_lossy(&out.stdout).to_string();
return Some(s);
}
_ => continue,
}
}
None
}
pub fn run_powershell_json<T: serde::de::DeserializeOwned>(cmd: &str) -> Option<T> {
let full = format!("({cmd}) | ConvertTo-Json -Depth 4");
let out = run_powershell(&full)?;
if out.is_empty() {
return None;
}
serde_json::from_str::<T>(out.trim()).ok()
}