Skip to content

Commit

Permalink
feat(microsoft_store): Add Microsoft Store step for Windows (#963)
Browse files Browse the repository at this point in the history
* feat(microsoft_store): Add Microsoft Store step for Windows

Add Microsoft Store Apps update step for Windows as Winget cannot update all Microsoft Store apps yet.

Closes #912

* style(translation): modify `zh_TW` translation
  • Loading branch information
Andreas02-dev authored Oct 23, 2024
1 parent 8aad6ea commit ea2f3e0
Show file tree
Hide file tree
Showing 5 changed files with 68 additions and 1 deletion.
18 changes: 17 additions & 1 deletion locales/app.yml
Original file line number Diff line number Diff line change
Expand Up @@ -621,4 +621,20 @@ _version: 2
"Would upgrade OpenBSD packages":
en: "Would upgrade OpenBSD packages"
es: "Actualizaría los paquetes de OpenBSD"
zh_TW: "會升級 OpenBSD 套件"
zh_TW: "會升級 OpenBSD 套件"
"Microsoft Store":
en: "Microsoft Store"
es: "Tienda de Microsoft"
zh_TW: "Microsoft Store"
"Scanning for updates...":
en: "Scanning for updates..."
es: "Buscando actualizaciones..."
zh_TW: "正在掃描更新..."
"Success, Microsoft Store apps are being updated in the background":
en: "Success, Microsoft Store apps are being updated in the background"
es: "Éxito, las aplicaciones de Microsoft Store se están actualizando en segundo plano"
zh_TW: "成功,Microsoft Store 應用程式正在後台更新"
"Unable to update Microsoft Store apps, manual intervention is required":
en: "Unable to update Microsoft Store apps, manual intervention is required"
es: "No se pueden actualizar las aplicaciones de Microsoft Store, se requiere intervención manual"
zh_TW: "無法更新 Microsoft Store 應用,需手動幹預"
1 change: 1 addition & 0 deletions src/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,7 @@ pub enum Step {
Mas,
Maza,
Micro,
MicrosoftStore,
Mise,
Myrepos,
Nix,
Expand Down
3 changes: 3 additions & 0 deletions src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -206,6 +206,9 @@ fn run() -> Result<()> {
runner.execute(Step::Scoop, "Scoop", || windows::run_scoop(&ctx))?;
runner.execute(Step::Winget, "Winget", || windows::run_winget(&ctx))?;
runner.execute(Step::System, "Windows update", || windows::windows_update(&ctx))?;
runner.execute(Step::MicrosoftStore, "Microsoft Store", || {
windows::microsoft_store(&ctx)
})?;
}

#[cfg(target_os = "linux")]
Expand Down
8 changes: 8 additions & 0 deletions src/steps/os/windows.rs
Original file line number Diff line number Diff line change
Expand Up @@ -221,6 +221,14 @@ pub fn windows_update(ctx: &ExecutionContext) -> Result<()> {
}
}

pub fn microsoft_store(ctx: &ExecutionContext) -> Result<()> {
let powershell = powershell::Powershell::windows_powershell();

print_separator(t!("Microsoft Store"));

powershell.microsoft_store(ctx)
}

pub fn reboot() -> Result<()> {
// If this works, it won't return, but if it doesn't work, it may return a useful error
// message.
Expand Down
39 changes: 39 additions & 0 deletions src/steps/powershell.rs
Original file line number Diff line number Diff line change
Expand Up @@ -119,4 +119,43 @@ impl Powershell {
.args(["-NoProfile", &install_windowsupdate_verbose, accept_all])
.status_checked()
}

#[cfg(windows)]
pub fn microsoft_store(&self, ctx: &ExecutionContext) -> Result<()> {
let powershell = require_option(self.path.as_ref(), t!("Powershell is not installed").to_string())?;

let mut command = if let Some(sudo) = ctx.sudo() {
let mut command = ctx.run_type().execute(sudo);
command.arg(powershell);
command
} else {
ctx.run_type().execute(powershell)
};

println!("{}", t!("Scanning for updates..."));

// Scan for updates using the MDM UpdateScanMethod
// This method is also available for non-MDM devices
let update_command = "(Get-CimInstance -Namespace \"Root\\cimv2\\mdm\\dmmap\" -ClassName \"MDM_EnterpriseModernAppManagement_AppManagement01\" | Invoke-CimMethod -MethodName UpdateScanMethod).ReturnValue";

command.args(["-NoProfile", update_command]);

command
.output_checked_with_utf8(|output| {
if output.stdout.trim() == "0" {
println!(
"{}",
t!("Success, Microsoft Store apps are being updated in the background")
);
Ok(())
} else {
println!(
"{}",
t!("Unable to update Microsoft Store apps, manual intervention is required")
);
Err(())
}
})
.map(|_| ())
}
}

0 comments on commit ea2f3e0

Please sign in to comment.