forked from PowerShell/PowerShell
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcimCmdletInvocationContext.cs
More file actions
128 lines (100 loc) · 4.66 KB
/
Copy pathcimCmdletInvocationContext.cs
File metadata and controls
128 lines (100 loc) · 4.66 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
using System;
using System.Management.Automation;
using Microsoft.Management.Infrastructure;
using Dbg = System.Management.Automation.Diagnostics;
namespace Microsoft.PowerShell.Cmdletization.Cim
{
internal class CimCmdletInvocationContext
{
internal CimCmdletInvocationContext(
CimCmdletDefinitionContext cmdletDefinitionContext,
Cmdlet cmdlet,
string namespaceOverride)
{
this.CmdletDefinitionContext = cmdletDefinitionContext;
this.NamespaceOverride = namespaceOverride;
// Cmdlet might have a shorter lifespan than CimCmdletInvocationContext
// - we need to extract information out of Cmdlet to extend information's lifespan
this.CmdletInvocationInfo = cmdlet.MyInvocation;
var runtime = cmdlet.CommandRuntime as MshCommandRuntime;
Dbg.Assert(runtime != null, "CIM cmdlets should only be run from within PS runtime");
this.DebugActionPreference = runtime.DebugPreference;
WarnAboutUnsupportedActionPreferences(
cmdlet,
this.DebugActionPreference,
"Debug",
inquireMessageGetter: () => CmdletizationResources.CimCmdletAdapter_DebugInquire,
stopMessageGetter: () => string.Empty);
this.WarningActionPreference = runtime.WarningPreference;
WarnAboutUnsupportedActionPreferences(
cmdlet,
this.WarningActionPreference,
"WarningAction",
inquireMessageGetter: () => CmdletizationResources.CimCmdletAdapter_WarningInquire,
stopMessageGetter: () => CmdletizationResources.CimCmdletAdapter_WarningStop);
this.VerboseActionPreference = runtime.VerbosePreference;
this.ErrorActionPreference = runtime.ErrorAction;
this.ShouldProcessOptimization = runtime.CalculatePossibleShouldProcessOptimization();
}
private static void WarnAboutUnsupportedActionPreferences(
Cmdlet cmdlet,
ActionPreference effectiveActionPreference,
string nameOfCommandLineParameter,
Func<string> inquireMessageGetter,
Func<string> stopMessageGetter)
{
string message;
switch (effectiveActionPreference)
{
case ActionPreference.Stop:
message = stopMessageGetter();
break;
case ActionPreference.Inquire:
message = inquireMessageGetter();
break;
default:
return; // we can handle everything that is not Stop or Inquire
}
bool actionPreferenceComesFromCommandLineParameter = cmdlet.MyInvocation.BoundParameters.ContainsKey(nameOfCommandLineParameter);
if (actionPreferenceComesFromCommandLineParameter)
{
Exception exception = new ArgumentException(message);
ErrorRecord errorRecord = new ErrorRecord(exception, "ActionPreferenceNotSupportedByCimCmdletAdapter", ErrorCategory.NotImplemented, null);
cmdlet.ThrowTerminatingError(errorRecord);
}
}
public CimCmdletDefinitionContext CmdletDefinitionContext { get; private set; }
public InvocationInfo CmdletInvocationInfo { get; private set; }
public MshCommandRuntime.ShouldProcessPossibleOptimization ShouldProcessOptimization { get; private set; }
public ActionPreference ErrorActionPreference { get; private set; }
public ActionPreference WarningActionPreference { get; private set; }
public ActionPreference VerboseActionPreference { get; private set; }
public ActionPreference DebugActionPreference { get; private set; }
public string NamespaceOverride { get; private set; }
public bool IsRunningInBackground
{
get
{
return this.CmdletInvocationInfo.BoundParameters.ContainsKey("AsJob");
}
}
public bool ShowComputerName
{
get
{
return this.CmdletInvocationInfo.BoundParameters.ContainsKey("CimSession");
}
}
private readonly Lazy<CimSession> _defaultCimSession = new Lazy<CimSession>(CreateDefaultCimSession);
private static CimSession CreateDefaultCimSession()
{
return CimSession.Create(null);
}
public CimSession GetDefaultCimSession()
{
return _defaultCimSession.Value;
}
}
}