MCPcopy Create free account
hub / github.com/PowerShell/DSC / handle_set

Function handle_set

resources/dism_dsc/src/feature_on_demand/set.rs:11–90  ·  view source on GitHub ↗
(input: &str)

Source from the content-addressed store, hash-verified

9use crate::util::get_computer_name;
10
11pub fn handle_set(input: &str) -> Result<String, String> {
12 let capability_list: FeatureOnDemandList = serde_json::from_str(input)
13 .map_err(|e| t!("fod_set.failedParseInput", err = e.to_string()).to_string())?;
14
15 if capability_list.capabilities.is_empty() {
16 return Err(t!("fod_set.capabilitiesArrayEmpty").to_string());
17 }
18
19 let session = DismSessionHandle::open()?;
20 let mut results = Vec::new();
21 let mut reboot_required = false;
22
23 for cap_input in &capability_list.capabilities {
24 let identity = cap_input
25 .identity
26 .as_ref()
27 .ok_or_else(|| t!("fod_set.identityRequired").to_string())?;
28
29 let desired_state = cap_input
30 .state
31 .as_ref()
32 .ok_or_else(|| t!("fod_set.stateRequired").to_string())?;
33
34 let current = session.get_capability_info(identity)?;
35
36 if current.unknown {
37 return Err(t!("fod_set.capabilityNotFound", identity = identity).to_string());
38 }
39
40 let current_state = CapabilityState::from_dism(current.state);
41
42 let needs_reboot = match desired_state {
43 CapabilityState::Installed => {
44 match current_state {
45 Some(CapabilityState::Installed) => false,
46 _ => session.add_capability(identity)?,
47 }
48 }
49 CapabilityState::NotPresent => {
50 match current_state {
51 Some(CapabilityState::NotPresent) | Some(CapabilityState::Removed) => false,
52 _ => session.remove_capability(identity)?,
53 }
54 }
55 _ => {
56 return Err(t!(
57 "fod_set.unsupportedDesiredState",
58 state = desired_state.to_string()
59 )
60 .to_string());
61 }
62 };
63
64 reboot_required = reboot_required || needs_reboot;
65
66 let raw = session.get_capability_info(identity)?;
67 let info = FeatureOnDemandInfo {
68 identity: Some(raw.name),

Callers

nothing calls this directly

Calls 10

get_capability_infoMethod · 0.80
add_capabilityMethod · 0.80
remove_capabilityMethod · 0.80
from_strFunction · 0.50
newFunction · 0.50
defaultFunction · 0.50
get_computer_nameFunction · 0.50
to_stringFunction · 0.50
is_emptyMethod · 0.45
as_refMethod · 0.45

Tested by

no test coverage detected