Создайте функцию с необязательными переменными вызова
Есть ли способ создать параметр в функции PowerShell, где вы должны называть его, чтобы он считался?
Пример, заданный commandlet (жирным существом, что я хочу сделать):
Invoke-Command
-computername
Server01
-Scriptblock
{...}
Вот пример того, что я хочу сделать с помощью функции
Function DoStuff($computername, -arg2, -domain $domain)
Test-parameter(-domain) if (-domain -eq $true) {
use $domain
}
Else {
$domain = "Domain1"
}
test-parameter($arg2) {
if ($arg2 -eq $true) {
Do something
}
else {
Do the opposite
}
}
Итак, вкратце:
Если присутствует "-arg2", я хочу, чтобы что-то произошло в script. Если "-Domain" присутствует и имеет с ним аргумент, я хочу, чтобы это использовалось, а не заданный аргумент.
Ответы
Ответ 1
Powershell предоставляет много встроенной поддержки общих сценариев параметров, включая обязательные параметры, необязательные параметры, параметры "switch" (aka flag) и "наборы параметров".
По умолчанию все параметры являются необязательными. Самый простой подход - просто проверить каждый из них на $null
, а затем реализовать любую логику, которую вы хотите оттуда. Это в основном то, что вы уже указали в своем примере кода.
Если вы хотите узнать обо всех специальных предложениях, которые может предоставить вам Powershell, ознакомьтесь с этими ссылками:
about_Functions
about_Functions_Advanced
about_Functions_Advanced_Parameters
Ответ 2
Я не думаю, что ваш вопрос очень ясен, этот код предполагает, что если вы собираетесь включить параметр -domain, он всегда будет "named" (т.е. dostuff computername arg2 -domain domain); это также делает параметр computername обязательным.
Function DoStuff(){
param(
[Parameter(Mandatory=$true)][string]$computername,
[Parameter(Mandatory=$false)][string]$arg2,
[Parameter(Mandatory=$false)][string]$domain
)
if(!($domain)){
$domain = 'domain1'
}
write-host $domain
if($arg2){
write-host "arg2 present... executing script block"
}
else{
write-host "arg2 missing... exiting or whatever"
}
}
Ответ 3
Не уверен, что я правильно понял вопрос.
Из того, что я собираю, вы хотите иметь возможность присвоить значение Domain, если оно равно null, а также, что нужно проверить, задан ли $args2 и в соответствии со значением, выполнить определенный код?
Я изменил код, чтобы собрать сделанные выше предположения.
Function DoStuff($computername, $arg2, $domain)
{
if($domain -ne $null)
{
$domain = "Domain1"
}
if($arg2 -eq $null)
{
}
else
{
}
}
DoStuff -computername "Test" -arg2 "" -domain "Domain2"
DoStuff -computername "Test" -arg2 "Test" -domain ""
DoStuff -computername "Test" -domain "Domain2"
DoStuff -computername "Test" -arg2 "Domain2"
Помогло ли это?
Ответ 4
Я наткнулся на этот вопрос в поисках ответа на ту же проблему. Я нашел великолепный обзор/учебник, который я хочу поделиться с вами, будущие путешественники:
PowerShell ABC - P для параметров