@@ -202,6 +202,7 @@ ${operation_get_code}
202
202
$st = Set-Content - Path $file_full_path - Value $cmdlet_source_code_text - Force;
203
203
}
204
204
205
+ # Sample: InvokeAzureVirtualMachineGetMethod.cs
205
206
function Write-OperationCmdletFile
206
207
{
207
208
param (
@@ -212,10 +213,10 @@ function Write-OperationCmdletFile
212
213
$opShortName ,
213
214
214
215
[Parameter (Mandatory = $True )]
215
- [System.Reflection.MethodInfo ]$operationMethodInfo
216
+ [System.Reflection.MethodInfo ]$operation_method_info
216
217
)
217
218
218
- $methodName = ($operationMethodInfo .Name.Replace (' Async' , ' ' ));
219
+ $methodName = ($operation_method_info .Name.Replace (' Async' , ' ' ));
219
220
$cmdlet_verb = " Invoke" ;
220
221
$cmdlet_noun_prefix = ' Azure' ;
221
222
$cmdlet_noun_suffix = ' Method' ;
@@ -226,9 +227,9 @@ function Write-OperationCmdletFile
226
227
$get_set_block = ' { get; set; }' ;
227
228
228
229
$cmdlet_generated_code = ' ' ;
229
- # $cmdlet_generated_code += $indents + '// ' + $operationMethodInfo + $new_line_str;
230
+ # $cmdlet_generated_code += $indents + '// ' + $operation_method_info + $new_line_str;
230
231
231
- $params = $operationMethodInfo .GetParameters ();
232
+ $params = $operation_method_info .GetParameters ();
232
233
[System.Collections.ArrayList ]$param_names = @ ();
233
234
foreach ($pt in $params )
234
235
{
@@ -288,7 +289,95 @@ ${cmdlet_generated_code}
288
289
$st = Set-Content - Path $file_full_path - Value $cmdlt_source_template - Force;
289
290
}
290
291
291
- # Code Generation Main:
292
+ # Sample: VirtualMachineCreateParameters
293
+ function Get-ClientComplexParameter
294
+ {
295
+ param (
296
+ [Parameter (Mandatory = $True )]
297
+ [System.Reflection.MethodInfo ]$op_method_info ,
298
+
299
+ [Parameter (Mandatory = $True )]
300
+ [string ]$client_name_space
301
+ )
302
+
303
+ $params = $op_method_info.GetParameters ();
304
+ $params = $params | where { -not $_.ParameterType.IsEnum };
305
+
306
+ # Assume that each operation method has only one complext parameter type
307
+ $param_info = $params | where { $_.ParameterType.Namespace -like " ${client_name_space} .Model?" } | select - First 1 ;
308
+
309
+ return $param_info ;
310
+ }
311
+
312
+ # Sample: NewAzureVirtualMachineCreateParameters.cs
313
+ function Write-ParameterCmdletFile
314
+ {
315
+ param (
316
+ [Parameter (Mandatory = $True )]
317
+ [string ]$fileOutputFolder ,
318
+
319
+ [Parameter (Mandatory = $True )]
320
+ [string ]$operation_short_name ,
321
+
322
+ [Parameter (Mandatory = $True )]
323
+ [System.Reflection.ParameterInfo ]$parameter_info
324
+ )
325
+
326
+ $param_type_full_name = $parameter_info.ParameterType.FullName ;
327
+ $param_type_short_name = $parameter_info.ParameterType.Name ;
328
+ if (($param_type_short_name -like " ${operation_short_name} *" ) -and ($param_type_short_name.Length -gt $operation_short_name.Length ))
329
+ {
330
+ # Remove the common part between the parameter type name and operation short name, e.g. 'VirtualMachineDisk'
331
+ $param_type_short_name = $param_type_short_name.Substring ($operation_short_name.Length );
332
+ }
333
+
334
+ $cmdlet_verb = " New" ;
335
+ $cmdlet_noun_prefix = ' Azure' ;
336
+ $cmdlet_noun_suffix = ' ' ;
337
+
338
+ $cmdlet_noun = $cmdlet_noun_prefix + $operation_short_name + $param_type_short_name + $cmdlet_noun_suffix ;
339
+ $cmdlet_class_name = $cmdlet_verb + $cmdlet_noun ;
340
+
341
+ # Construct Code Content
342
+ $indents = " " * 8 ;
343
+ $get_set_block = ' { get; set; }' ;
344
+
345
+ $cmdlet_generated_code = ' ' ;
346
+
347
+ $cmdlet_client_call_template =
348
+ @"
349
+ protected override void OnProcessRecord()
350
+ {
351
+ ServiceManagementProfile.Initialize();
352
+ base.OnProcessRecord();
353
+ var parameter = new ${param_type_full_name} ();
354
+ WriteObject(parameter);
355
+ }
356
+ "@ ;
357
+
358
+ $cmdlet_generated_code += $cmdlet_client_call_template ;
359
+
360
+ $cmdlt_source_template =
361
+ @"
362
+ ${code_common_header}
363
+
364
+ $code_using_strs
365
+
366
+ namespace ${code_common_namespace}
367
+ {
368
+ [Cmdlet(`" ${cmdlet_verb} `" , `" ${cmdlet_noun} `" )]
369
+ public class ${cmdlet_class_name} : ComputeAutomationBaseCmdlet
370
+ {
371
+ ${cmdlet_generated_code}
372
+ }
373
+ }
374
+ "@ ;
375
+
376
+ $file_full_path = $fileOutputFolder + ' /' + $cmdlet_class_name + ' .cs' ;
377
+ $st = Set-Content - Path $file_full_path - Value $cmdlt_source_template - Force;
378
+ }
379
+
380
+ # Code Generation Main Run
292
381
Write-Output $dllFolder ;
293
382
Write-Output $outFolder ;
294
383
323
412
$clientClassType = $types | where { $_.Namespace -eq $dllname -and $_.Name -eq ' IComputeManagementClient' };
324
413
Write-BaseCmdletFile $baseCmdletFileFullName $opNameList $clientClassType ;
325
414
326
- # Write Cmdlet Files
415
+ [System.Reflection.ParameterInfo []]$parameter_type_info_list = @ ();
416
+
417
+ # Write Operation Cmdlet Files
327
418
foreach ($ft in $filtered_types )
328
419
{
329
420
Write-Output ' =============================================' ;
@@ -340,6 +431,17 @@ else
340
431
{
341
432
Write-Output ($new_line_str + $mt.Name.Replace (' Async' , ' ' ));
342
433
Write-OperationCmdletFile $opOutFolder $opShortName $mt ;
434
+
435
+ [System.Reflection.ParameterInfo ]$parameter_type_info = (Get-ClientComplexParameter $mt $client_library_namespace );
436
+
437
+ if (($parameter_type_info -ne $null ) -and (($parameter_type_info_list | where { $_.ParameterType.FullName -eq $parameter_type_info.FullName }).Count -eq 0 ))
438
+ {
439
+ $parameter_type_info_list += $parameter_type_info ;
440
+
441
+ Write-Output ' ---------------------------------------------' ;
442
+ Write-ParameterCmdletFile $opOutFolder $opShortName $parameter_type_info ;
443
+ Write-Output ' ---------------------------------------------' ;
444
+ }
343
445
}
344
446
}
345
447
0 commit comments