forked from PowerShell/PowerShell
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathNewAliasCommand.cs
More file actions
131 lines (113 loc) · 4.27 KB
/
Copy pathNewAliasCommand.cs
File metadata and controls
131 lines (113 loc) · 4.27 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
129
130
131
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
using System.Management.Automation;
using System.Management.Automation.Internal;
namespace Microsoft.PowerShell.Commands
{
/// <summary>
/// The implementation of the "new-alias" cmdlet.
/// </summary>
[Cmdlet(VerbsCommon.New, "Alias", SupportsShouldProcess = true, ConfirmImpact = ConfirmImpact.Low,
HelpUri = "https://go.microsoft.com/fwlink/?LinkID=2097022")]
[OutputType(typeof(AliasInfo))]
public class NewAliasCommand : WriteAliasCommandBase
{
#region Command code
/// <summary>
/// The main processing loop of the command.
/// </summary>
protected override void ProcessRecord()
{
// If not force, then see if the alias already exists
if (!Force)
{
AliasInfo existingAlias = null;
if (string.IsNullOrEmpty(Scope))
{
existingAlias = SessionState.Internal.GetAlias(Name);
}
else
{
existingAlias = SessionState.Internal.GetAliasAtScope(Name, Scope);
}
if (existingAlias != null)
{
// Throw if alias exists and is private...
SessionState.ThrowIfNotVisible(this.CommandOrigin, existingAlias);
// Since the alias already exists, write an error.
SessionStateException aliasExists =
new(
Name,
SessionStateCategory.Alias,
"AliasAlreadyExists",
SessionStateStrings.AliasAlreadyExists,
ErrorCategory.ResourceExists);
WriteError(
new ErrorRecord(
aliasExists.ErrorRecord,
aliasExists));
return;
}
}
// Create the alias info
AliasInfo newAlias =
new(
Name,
Value,
Context,
Option);
newAlias.Description = Description;
string action =
AliasCommandStrings.NewAliasAction;
string target =
StringUtil.Format(AliasCommandStrings.NewAliasTarget, Name, Value);
if (ShouldProcess(target, action))
{
// Set the alias in the specified scope or the
// current scope.
AliasInfo result = null;
try
{
if (string.IsNullOrEmpty(Scope))
{
result = SessionState.Internal.SetAliasItem(newAlias, Force, MyInvocation.CommandOrigin);
}
else
{
result = SessionState.Internal.SetAliasItemAtScope(newAlias, Scope, Force, MyInvocation.CommandOrigin);
}
}
catch (SessionStateException sessionStateException)
{
WriteError(
new ErrorRecord(
sessionStateException.ErrorRecord,
sessionStateException));
return;
}
catch (PSArgumentOutOfRangeException argOutOfRange)
{
WriteError(
new ErrorRecord(
argOutOfRange.ErrorRecord,
argOutOfRange));
return;
}
catch (PSArgumentException argException)
{
WriteError(
new ErrorRecord(
argException.ErrorRecord,
argException));
return;
}
// Write the alias to the pipeline if PassThru was specified
if (PassThru && result != null)
{
WriteObject(result);
}
}
}
#endregion Command code
}
}