Я думаю, вы ищете автоматизированную переменную $PSBoundParameters
, которая фиксирует входные параметры, их значения и т. д.
Пока я еще не уверен на 100%, что именно вы ищете, я попытаюсь дать вам пару советов.
Вот примеры кода, которые я только что сделал:
Я надеюсь, что благодаря этому вы поняли, как работает $PSBoundParameters.
function Do-This
{
param(
[String[]]$Employees,
[String[]]$Departments,
[String[]]$Courses
)
$Keys = $PSBoundParameters.Keys
foreach ($Key in $Keys)
{
New-Object PSObject -Property @{
Name=$Key
Type=$PSBoundParameters[$Key].GetType()
}
}
}
Do-This -Employees @('EmployeeA','EmployeeA','EmployeeC') -Departments @('Communication','Mathematics','ComputerScience') -Courses @('CourseA','CourseB','CourseC')
Также есть отличный способ получить информацию о функциях, такую как имена параметров и их типы — командлет Get-Help
. Вот функция, которую я сделал на основе ее вывода.
function Get-FunctionParams
{
param([Parameter(Mandatory=$true,ValueFromPipelineByPropertyName=$true,Position=0)][string]$FunctionName)
$Results = @()
$Parameters = @((Get-Help $FunctionName).parameters.parameter)
if ($Parameters.Count -eq 0)
{
Write-Host $('Function {0} has no parameters' -f $FunctionName)
break
}
foreach ($Parameter in $Parameters){
$Object = New-Object -TypeName PSObject
$Object | Add-Member -MemberType NoteProperty -Name Name -Value $Parameter.name
$Object | Add-Member -MemberType NoteProperty -Name aliases -Value $Parameter.aliases
$Object | Add-Member -MemberType NoteProperty -Name required -Value $Parameter.required
$Object | Add-Member -MemberType NoteProperty -Name type -Value $Parameter.type.name
$Object | Add-Member -MemberType NoteProperty -Name position -Value $Parameter.position
$Object | Add-Member -MemberType NoteProperty -Name defaultValue -Value $Parameter.defaultValue
$Object | Add-Member -MemberType NoteProperty -Name parameterSetName -Value $Parameter.parameterSetName
$Results += $Object
}
Write-Output $Results | Sort-Object position,Name | Format-Table -AutoSize -Wrap
}
Пример использования Get-FunctionParams -FunctionName Get-Process
Вывод примера использования:
Name aliases required type position defaultValue parameterSetName
---- ------- -------- ---- -------- ------------ ----------------
Name ProcessName false string[] 0 Name
ComputerName Cn false string[] Имя задано (Все)
FileVersionInfo FV, FVI false switch Имя задано (Все)
Id PID true int[] Имя задано Id
InputObject Отсутствует true Process[] Имя задано InputObject
Module Отсутствует false switch Имя задано (Все)
person
Kirill Pashkov
schedule
15.06.2018