-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathInvoke-GSM.ps1
38 lines (36 loc) · 1.52 KB
/
Invoke-GSM.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
function Invoke-GSM {
param(
[Parameter()]$OriginalParams,
[Parameter()]$ParameterMap,
[Parameter()]$OutputHandlers,
[Parameter()]$CommandArgs
)
if ($OriginalParams["Debug"]) { Wait-Debugger }
foreach ($paramName in $OriginalParams.Keys | Sort-Object { $ParameterMap[$_].OriginalPosition }) {
$value = $OriginalParams[$paramName]
$param = $ParameterMap[$paramName]
if ($param) {
if ( $value -is [switch] ) { $CommandArgs += if ( $null -ne $OriginalParams.$paramName ) { if (!$value.ToBool()) { $param.OriginalName + "=false" } else { $param.OriginalName } } else { $param.DefaultMissingValue } }
elseif ( $param.NoGap ) { $CommandArgs += "{0}""{1}""" -f $param.OriginalName, $value }
else { $CommandArgs += $param.OriginalName; $CommandArgs += $value | ForEach-Object { $_ } }
}
}
$CommandArgs = $CommandArgs | Where-Object { $_ }
if ($OriginalParams["Debug"]) { Wait-Debugger }
if ( $OriginalParams["Verbose"]) {
Write-Verbose -Verbose -Message gsm
$CommandArgs | Write-Verbose -Verbose
}
$__handlerInfo = $OutputHandlers[$PSCmdlet.ParameterSetName]
if (! $__handlerInfo ) {
$__handlerInfo = $OutputHandlers["Default"] # Guaranteed to be present
}
$__handler = $__handlerInfo.Handler
if ( $__handlerInfo.StreamOutput ) {
& "gsm" $CommandArgs | ForEach-Object $__handler
}
else {
$result = & "gsm" $CommandArgs
& $__handler $result
}
}