@NewDevLab

Вызов функции с параметром по-умолчанию?

Как сделать, чтобы вызывать функцию во втором варианте?
function MyFunc() {
	param (
		[Alias("Param1")] [parameter(Mandatory=$false)] [string] $var1 = $null,
		[Alias("Param2")] [parameter(Mandatory=$false)] [string] $var2 = $null
	)
	Write-Host "*** '$var1' '$var2' ***"
}

# Вызывать не так
MyFunc -Param1 "" -Param2 "param2"
MyFunc -Param2 "param2"
# А так
MyFunc -Param1 -Param2 "param2"
  • Вопрос задан
  • 146 просмотров
Решения вопроса 1
@MaxKozlov Куратор тега PowerShell
Для этих целей лучше использовать не формирование в виде строки, а так называемый Splatting
$params = @{
  Param1 = "value1"
}
if ($something) { $params.Param2 = "*value" }

MyFunction @params


тогда в зависимости от сформированных в хеше параметров вызовется всё что надо

Свичи прекрасно привязываются в стиле Start-Process -Wait:$isWait
Вообще, все значения параметров можно передавать не через пробел, а через двоеточие, именно так их формирует splatting.

А еще внутри функции есть автоматическая переменная $PSBoundParameters в которй лежит хеш переданных параметров и их значений и оттуда можно узнать, передан ли параметр явно или получил значение по-умолчанию (проверив, есть ли ключ)
Или можно делать прокси-функции типа
Function Get-OtherCompProcess {
Param(
#здесь все обычные параметры для get-process кроме computername
)}
$PSBoundParameters.computername='othercomp'
Get-Process @PSBoundParameters
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@azarij
В меру опытный никто
а какова конечная цель этого упражнения? пока непонятен смысл так вызывать функцию. если вы указываете параметр при вызове, то нужно в параметр сунуть какое-то значение.
возможно, вам нужно что-то типа switch параметра?
function Switch-Item {
  param ([switch]$on)
  if ($on) { "Switch on" }
  else { "Switch off" }
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы