Invoke-Expression schwierig sein wird, mit zu arbeiten, weil, was passierte als Strings alle immer wieder zitieren müssen, wenn sie in einem ausgedrückt Zeichenfolge. ProxyCommand ist der bessere Weg, wie Beatcracker vorgeschlagen hat.
Es gibt ein paar Alternativen für Spaß und Interesse. Sie könnten PSBoundParameters splattern, aber Sie müssen die Parameter deklarieren, die Sie voraussichtlich übergeben werden.
Dies ist ein unvollständiges Beispiel, in dem es sich leicht ärgern wird, wenn doppelte Parameter vorhanden sind (einschließlich allgemeiner Parameter, wenn Sie CmdletBinding für die Funktion Test festlegen).
function Test {
dynamicparam {
$dynamicParams = New-Object Management.Automation.RuntimeDefinedParameterDictionary
foreach ($parameter in (Get-Command Microsoft.PowerShell.Management\Get-ChildItem).Parameters.Values) {
$runtimeParameter = New-Object System.Management.Automation.RuntimeDefinedParameter(
$parameter.Name,
$parameter.ParameterType,
$parameter.Attribtes
)
$dynamicParams.Add($parameter.Name, $runtimeParameter)
}
return $dynamicParams
}
end {
Get-ChildItem @psboundparameters
}
}
'Get-ChildItem @ Args' – PetSerAl
@PetSerAl Waaay besser als IEX hacken, ich habe vergessen, dass man Arrays vollzuspritzen kann. Sollte eine Antwort sein. – beatcracker
@PetSerAl, können Sie Ihre Antwort posten? Ich glaube, das ist besser als IEX. und IEX unterstützt 'Leerzeichen getrennte Argumente' nicht. Dies unterstützt alles – Reddy