feat(microsoft_store): Add Microsoft Store step for Windows (#963)
* 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
This commit is contained in:
@@ -111,6 +111,7 @@ pub enum Step {
|
||||
Mas,
|
||||
Maza,
|
||||
Micro,
|
||||
MicrosoftStore,
|
||||
Mise,
|
||||
Myrepos,
|
||||
Nix,
|
||||
|
||||
@@ -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")]
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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(|_| ())
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user