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:
@@ -622,3 +622,19 @@ _version: 2
|
|||||||
en: "Would upgrade OpenBSD packages"
|
en: "Would upgrade OpenBSD packages"
|
||||||
es: "Actualizaría los paquetes de OpenBSD"
|
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 應用,需手動幹預"
|
||||||
|
|||||||
@@ -111,6 +111,7 @@ pub enum Step {
|
|||||||
Mas,
|
Mas,
|
||||||
Maza,
|
Maza,
|
||||||
Micro,
|
Micro,
|
||||||
|
MicrosoftStore,
|
||||||
Mise,
|
Mise,
|
||||||
Myrepos,
|
Myrepos,
|
||||||
Nix,
|
Nix,
|
||||||
|
|||||||
@@ -206,6 +206,9 @@ fn run() -> Result<()> {
|
|||||||
runner.execute(Step::Scoop, "Scoop", || windows::run_scoop(&ctx))?;
|
runner.execute(Step::Scoop, "Scoop", || windows::run_scoop(&ctx))?;
|
||||||
runner.execute(Step::Winget, "Winget", || windows::run_winget(&ctx))?;
|
runner.execute(Step::Winget, "Winget", || windows::run_winget(&ctx))?;
|
||||||
runner.execute(Step::System, "Windows update", || windows::windows_update(&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")]
|
#[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<()> {
|
pub fn reboot() -> Result<()> {
|
||||||
// If this works, it won't return, but if it doesn't work, it may return a useful error
|
// If this works, it won't return, but if it doesn't work, it may return a useful error
|
||||||
// message.
|
// message.
|
||||||
|
|||||||
@@ -119,4 +119,43 @@ impl Powershell {
|
|||||||
.args(["-NoProfile", &install_windowsupdate_verbose, accept_all])
|
.args(["-NoProfile", &install_windowsupdate_verbose, accept_all])
|
||||||
.status_checked()
|
.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