PowerShell関数でパラメーターを作成する方法はありますか?
コマンドレットで与えられた例(太字は私がやりたいことです):
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"が存在する場合、スクリプトで何かが発生するようにします。 「-Domain」が存在し、引数が指定されている場合、set引数ではなく、それを使用する必要があります。
Powershellは、必須パラメーター、オプションパラメーター、「スイッチ」(別名フラグ)パラメーター、「パラメーターセット」など、一般的なパラメーターシナリオに対して多くの組み込みサポートを提供します。
デフォルトでは、すべてのパラメーターはオプションです。最も基本的なアプローチは、それぞれの$null
を単純にチェックし、そこから必要なロジックを実装することです。これは基本的に、サンプルコードで既に示したものです。
Powershellが提供できるすべての特別なサポートについて知りたい場合は、次のリンクをご覧ください。
あなたの質問は非常に明確ではないと思いますが、このコードは、-domainパラメーターを含める場合、常に「名前付き」であると想定しています(つまり、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"
}
}
質問を正しく理解しているかどうかわかりません。
私が収集したものから、Domainがnullの場合にDomainに値を割り当て、$ 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"
それは役に立ちましたか?