-
Notifications
You must be signed in to change notification settings - Fork 30
/
Copy pathGetExeArguments.ps1
47 lines (41 loc) · 1.27 KB
/
GetExeArguments.ps1
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
<#
.Synopsis
Converts Parameters and Command Metadata to executable arguments
.Description
Converts a Parameter dictionary and Command Metadata into executable arguments.
#>
param(
[Parameter(Mandatory)]
[Management.Automation.CommandMetaData]
$CommandMetaData,
[Parameter(Mandatory)]
[Collections.IDictionary]
$Parameter = @{},
[string[]]
$ArgumentList = @(),
[string[]]
$AdditionalArgument = @()
)
$ArgumentList + @(
foreach ($kv in $Parameter.GetEnumerator()) {
$paramMetadata = $CommandMetaData.Parameters[$kv.Key]
if (-not $paramMetadata) { continue }
if (-not $paramMetadata.Aliases) { continue }
if ($paramMetadata.Aliases[0] -match '[-/]') {
if ($paramMetadata.Aliases[0] -match '\=$') {
$paramMetadata.Aliases[0] + "$($kv.Value)"
} else {
$paramMetadata.Aliases[0]
if ($paramMetadata.ParameterType -ne [switch]) {
"$($kv.Value)"
}
}
}
elseif ($paramMetadata.Aliases[0] -match '\<\w+\>' ) {
foreach ($v in $kv.Value) { "$v" }
}
elseif (-not ($paramMetadata.Aliases -match '^\!')) {
foreach ($v in $kv.Value) { "$v" }
}
}
) + $AdditionalArgument