@@ -99,7 +99,8 @@ internal void Initialize<TCmdlet>(
99
99
string [ ] includeRuleNames = null ,
100
100
string [ ] excludeRuleNames = null ,
101
101
string [ ] severity = null ,
102
- bool suppressedOnly = false )
102
+ bool suppressedOnly = false ,
103
+ string profile = null )
103
104
where TCmdlet : PSCmdlet , IOutputWriter
104
105
{
105
106
if ( cmdlet == null )
@@ -115,7 +116,8 @@ internal void Initialize<TCmdlet>(
115
116
includeRuleNames ,
116
117
excludeRuleNames ,
117
118
severity ,
118
- suppressedOnly ) ;
119
+ suppressedOnly ,
120
+ profile ) ;
119
121
}
120
122
121
123
/// <summary>
@@ -128,7 +130,8 @@ public void Initialize(
128
130
string [ ] includeRuleNames = null ,
129
131
string [ ] excludeRuleNames = null ,
130
132
string [ ] severity = null ,
131
- bool suppressedOnly = false )
133
+ bool suppressedOnly = false ,
134
+ string profile = null )
132
135
{
133
136
if ( runspace == null )
134
137
{
@@ -143,7 +146,8 @@ public void Initialize(
143
146
includeRuleNames ,
144
147
excludeRuleNames ,
145
148
severity ,
146
- suppressedOnly ) ;
149
+ suppressedOnly ,
150
+ profile ) ;
147
151
}
148
152
149
153
private void Initialize (
@@ -154,7 +158,8 @@ private void Initialize(
154
158
string [ ] includeRuleNames ,
155
159
string [ ] excludeRuleNames ,
156
160
string [ ] severity ,
157
- bool suppressedOnly = false )
161
+ bool suppressedOnly = false ,
162
+ string profile = null )
158
163
{
159
164
if ( outputWriter == null )
160
165
{
@@ -178,6 +183,145 @@ private void Initialize(
178
183
this . includeRegexList = new List < Regex > ( ) ;
179
184
this . excludeRegexList = new List < Regex > ( ) ;
180
185
186
+ if ( ! String . IsNullOrWhiteSpace ( profile ) )
187
+ {
188
+ try
189
+ {
190
+ profile = path . GetResolvedPSPathFromPSPath ( profile ) . First ( ) . Path ;
191
+ }
192
+ catch
193
+ {
194
+ this . outputWriter . WriteError ( new ErrorRecord ( new FileNotFoundException ( ) ,
195
+ string . Format ( CultureInfo . CurrentCulture , Strings . FileNotFound , profile ) ,
196
+ ErrorCategory . InvalidArgument , this ) ) ;
197
+ }
198
+
199
+ if ( File . Exists ( profile ) )
200
+ {
201
+ Token [ ] parserTokens = null ;
202
+ ParseError [ ] parserErrors = null ;
203
+ Ast profileAst = Parser . ParseFile ( profile , out parserTokens , out parserErrors ) ;
204
+ IEnumerable < Ast > hashTableAsts = profileAst . FindAll ( item => item is HashtableAst , false ) ;
205
+ foreach ( HashtableAst hashTableAst in hashTableAsts )
206
+ {
207
+ foreach ( var kvp in hashTableAst . KeyValuePairs )
208
+ {
209
+ if ( ! ( kvp . Item1 is StringConstantExpressionAst ) )
210
+ {
211
+ this . outputWriter . WriteError ( new ErrorRecord ( new ArgumentException ( ) ,
212
+ string . Format ( CultureInfo . CurrentCulture , Strings . WrongKeyFormat , kvp . Item1 . Extent . StartLineNumber , kvp . Item1 . Extent . StartColumnNumber , profile ) ,
213
+ ErrorCategory . InvalidArgument , this ) ) ;
214
+ continue ;
215
+ }
216
+
217
+ // parse the item2 as array
218
+ PipelineAst pipeAst = kvp . Item2 as PipelineAst ;
219
+ List < string > rhsList = new List < string > ( ) ;
220
+ if ( pipeAst != null )
221
+ {
222
+ ExpressionAst pureExp = pipeAst . GetPureExpression ( ) ;
223
+ if ( pureExp is StringConstantExpressionAst )
224
+ {
225
+ rhsList . Add ( ( pureExp as StringConstantExpressionAst ) . Value ) ;
226
+ }
227
+ else
228
+ {
229
+ ArrayLiteralAst arrayLitAst = pureExp as ArrayLiteralAst ;
230
+ if ( arrayLitAst == null && pureExp is ArrayExpressionAst )
231
+ {
232
+ ArrayExpressionAst arrayExp = pureExp as ArrayExpressionAst ;
233
+ // Statements property is never null
234
+ if ( arrayExp . SubExpression != null )
235
+ {
236
+ StatementAst stateAst = arrayExp . SubExpression . Statements . First ( ) ;
237
+ if ( stateAst != null && stateAst is PipelineAst )
238
+ {
239
+ CommandBaseAst cmdBaseAst = ( stateAst as PipelineAst ) . PipelineElements . First ( ) ;
240
+ if ( cmdBaseAst != null && cmdBaseAst is CommandExpressionAst )
241
+ {
242
+ CommandExpressionAst cmdExpAst = cmdBaseAst as CommandExpressionAst ;
243
+ if ( cmdExpAst . Expression is StringConstantExpressionAst )
244
+ {
245
+ rhsList . Add ( ( cmdExpAst . Expression as StringConstantExpressionAst ) . Value ) ;
246
+ }
247
+ else
248
+ {
249
+ arrayLitAst = cmdExpAst . Expression as ArrayLiteralAst ;
250
+ }
251
+ }
252
+ }
253
+ }
254
+ }
255
+
256
+ if ( arrayLitAst != null )
257
+ {
258
+ foreach ( var element in arrayLitAst . Elements )
259
+ {
260
+ if ( ! ( element is StringConstantExpressionAst ) )
261
+ {
262
+ this . outputWriter . WriteError ( new ErrorRecord ( new ArgumentException ( ) ,
263
+ string . Format ( CultureInfo . CurrentCulture , Strings . WrongValueFormat , element . Extent . StartLineNumber , element . Extent . StartColumnNumber , profile ) ,
264
+ ErrorCategory . InvalidArgument , this ) ) ;
265
+ continue ;
266
+ }
267
+
268
+ rhsList . Add ( ( element as StringConstantExpressionAst ) . Value ) ;
269
+ }
270
+ }
271
+ }
272
+ }
273
+
274
+ if ( rhsList . Count == 0 )
275
+ {
276
+ this . outputWriter . WriteError ( new ErrorRecord ( new ArgumentException ( ) ,
277
+ string . Format ( CultureInfo . CurrentCulture , Strings . WrongValueFormat , kvp . Item2 . Extent . StartLineNumber , kvp . Item2 . Extent . StartColumnNumber , profile ) ,
278
+ ErrorCategory . InvalidArgument , this ) ) ;
279
+ break ;
280
+ }
281
+
282
+ switch ( ( kvp . Item1 as StringConstantExpressionAst ) . Value . ToLower ( ) )
283
+ {
284
+ case "severity" :
285
+ if ( this . severity == null )
286
+ {
287
+ this . severity = rhsList . ToArray ( ) ;
288
+ }
289
+ else
290
+ {
291
+ this . severity = this . severity . Union ( rhsList ) . ToArray ( ) ;
292
+ }
293
+ break ;
294
+ case "includerules" :
295
+ if ( this . includeRule == null )
296
+ {
297
+ this . includeRule = rhsList . ToArray ( ) ;
298
+ }
299
+ else
300
+ {
301
+ this . includeRule = this . includeRule . Union ( rhsList ) . ToArray ( ) ;
302
+ }
303
+ break ;
304
+ case "excluderules" :
305
+ if ( this . excludeRule == null )
306
+ {
307
+ this . excludeRule = rhsList . ToArray ( ) ;
308
+ }
309
+ else
310
+ {
311
+ this . excludeRule = this . excludeRule . Union ( rhsList ) . ToArray ( ) ;
312
+ }
313
+ break ;
314
+ default :
315
+ this . outputWriter . WriteError ( new ErrorRecord ( new ArgumentException ( ) ,
316
+ string . Format ( CultureInfo . CurrentCulture , Strings . WrongKey , kvp . Item1 . Extent . StartLineNumber , kvp . Item1 . Extent . StartColumnNumber , profile ) ,
317
+ ErrorCategory . InvalidArgument , this ) ) ;
318
+ break ;
319
+ }
320
+ }
321
+ }
322
+ }
323
+ }
324
+
181
325
//Check wild card input for the Include/ExcludeRules and create regex match patterns
182
326
if ( this . includeRule != null )
183
327
{
0 commit comments