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

Function handle_set

resources/dism_dsc/src/optional_feature/set.rs:11–70  ·  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 feature_list: OptionalFeatureList = serde_json::from_str(input)
13 .map_err(|e| t!("set.failedParseInput", err = e.to_string()).to_string())?;
14
15 if feature_list.features.is_empty() {
16 return Err(t!("set.featuresArrayEmpty").to_string());
17 }
18
19 let session = DismSessionHandle::open()?;
20 let mut results = Vec::new();
21 let mut reboot_required = false;
22
23 for feature_input in &feature_list.features {
24 let feature_name = feature_input
25 .feature_name
26 .as_ref()
27 .ok_or_else(|| t!("set.featureNameRequired").to_string())?;
28
29 let desired_state = feature_input
30 .state
31 .as_ref()
32 .ok_or_else(|| t!("set.stateRequired").to_string())?;
33
34 let needs_reboot = match desired_state {
35 FeatureState::Installed => {
36 session.enable_feature(feature_name)?
37 }
38 FeatureState::NotPresent => {
39 session.disable_feature(feature_name, false)?
40 }
41 FeatureState::Removed => {
42 session.disable_feature(feature_name, true)?
43 }
44 _ => {
45 return Err(t!(
46 "set.unsupportedDesiredState",
47 state = desired_state.to_string()
48 )
49 .to_string());
50 }
51 };
52
53 reboot_required = reboot_required || needs_reboot;
54
55 let info = session.get_feature_info(feature_name)?;
56 results.push(info);
57 }
58
59 let restart_required_meta = if reboot_required {
60 let mut entry = Map::new();
61 entry.insert("system".to_string(), Value::String(get_computer_name()));
62 Some(vec![entry])
63 } else {
64 None
65 };
66
67 let output = OptionalFeatureList { restart_required_meta, features: results };
68 serde_json::to_string(&output)

Callers

nothing calls this directly

Calls 9

enable_featureMethod · 0.80
disable_featureMethod · 0.80
get_feature_infoMethod · 0.80
from_strFunction · 0.50
newFunction · 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