1

パラメーターを宣言するときは、変数の名前を指定します。その名前は、コマンドラインでパラメーターの名前として使用されます。ただし、スクリプト変数には、コマンドラインパラメーターの名前と同じ命名規則を常に使用する必要はありません。

例えば:

function Some-Function {
  param (
    $some_variable
  )
  ...
}

Some-Function -some_variable <value>呼び出しは$some_variableに割り当てます。関数を呼び出すときに使用するパラメーターの名前を、関数の本体で使用する変数の名前とは異なるものにしたい場合はどうすればよいですか?たとえば、呼び出しSome-Function -ElegantName <value>は$ some_variableという変数に割り当てられますか?

確かに、私はこのようなことをすることができます:

Some-Function {
  param (
    $ElegantName
  )
  $some_variable = $ElegantName
}

しかし、それは醜い恨みのように思えます。パラメーター宣言で1セットの変数を宣言してから、それらを新しい変数に再割り当てして、スクリプト内の変数がパラメーターと同じ名前である必要がないようにします。宣言でそれを行う方法はありますか?

[alias('ElegantName')]$some_variable「some_variable」はタブ補完に表示される名前であるため、これは適切な解決策ではないことに注意してください。

4

2 に答える 2

1

わかりました、実際の変数名をそのエイリアスに置き換え、既存のコードには触れないことにしました。たとえば、次のとおりです。

[Parameter(Mandatory=$false)][alias("ServiceAccount")][string]$svc_user='somedata'

そして、次のようになりました。

[Parameter(Mandatory=$false)][alias("svc_user")][string]$ServiceAccount='somedata'

アップデート。残念ながら、これは機能しません。エイリアスはコードで認識されません。エイリアス名を持つ変数を自動的に作成し、それに元の値を割り当てるには、さらにコードを追加する必要がありました。

$standardparameters = @("Verbose", "Debug", "ErrorAction", "WarningAction", "ErrorVariable", "WarningVariable","OutVariable","OutBuffer","PipelineVariable")
$allparameters = ((Get-Command -Name $MyInvocation.InvocationName).Parameters).values  
$customparameters = @()
 ForEach ($par in $allparameters) { if ($par.name -notin $standardparameters) {$customparameters += $par}}
ForEach ($par in $customparameters) { foreach ($al in $par.Aliases) {try{Set-Variable -Name $al -Value $(Get-Variable $par.Name -ValueOnly) -ErrorAction stop} Catch {new-Variable -Name $al -Value $(Get-Variable $par.Name -ValueOnly)}}}

コードは、スクリプトまたは関数自体を起動するときにのみ実行できることに注意してください。コードを選択して選択を起動しようとすると、エラーが発生します。

于 2017-08-09T11:44:23.840 に答える
0

高度なパラメーターを使用できます。これは、「ファイル」のフランス語パラメーター名にエイリアスを付けた例です。

Function TestAdvParam
{
  Param ([Alias("Fichier")]
         [string]
         [ValidateNotNullOrEmpty()]
         $file)
  Write-Host $file
}

TestAdvParam -file "coucou 1"
TestAdvParam -fichier "coucou 2"

about_functions_advanced_pa​​rameters (get-help)をご覧ください。

注 :エイリアスの目的は、開発者にとって覚えやすい、または使いやすい名前を付けることです。そのため、オートコンプリートに表示されないことはそれほど奇妙ではありません。

于 2013-03-01T04:25:14.743 に答える