PowerShellパラメーター:構文、タイプ、属性、引数、および例

2021年6月15日 16760 ビュー PowerShellパラメーター:構文、タイプ、属性、引数、および例

PowerShellスクリプト開発者は、Powershell Paramブロックを使用して、高度な機能にパラメーターを追加します。関数を実行しているユーザーは誰でも、PowerShellParamで追加されたパラメーターにアクセスできます。





さらに、Paramブロックを使用して関数に追加されたパラメーターとは別に、WindowsPowerShellは自動的に共通パラメーターを追加します。



このガイドでは、Powershell Paramの構文、Powershellパラメーターの種類、それらの属性、および引数について説明します。また、Paramブロックを使用してスクリプトまたは関数にパラメーターを追加する方法の例もいくつか示します。

投稿トピックを閲覧する



PowerShellパラメーターブロックの構文

PowerShellパラメーターブロックの構文

PowerShellParamの構文は…



)

関数にパラメータを追加するには、単語で始まります 止まる 、その後にパラメータブロック、()が続きます。これがパラメータブロックの単純な形式です…

) The CmdletBinding 属性はオプションであり、paramブロックの外部で定義されている唯一の属性です。これについては、ガイドの後半で詳しく説明します

Paramブロック– param()–内で、Parameter属性とその引数を定義します。さらに、パラメータ属性は[()]ブロックで囲まれています。



上記の構文コードでは、すべてのパラメーター引数を太字で示しています。パラメータ引数は他にもたくさんあります。構文の引数は説明のみを目的としており、網羅的なものではありません。

パラメータブロック内で、コンマで区切ってパラメータ引数を定義します。 PowerShell Param属性の例は、 パラメータ 属性。



さらに、param引数の例は 必須 口論。 param引数の別の例は次のとおりです。 ParameterSetName 。

最後に、パラメーターの名前を定義します。さらに、パラメータのデータ型も指定します。

次のセクションでは、PowerShellパラメーターの一般的なタイプについて説明します。次に、セクション3では、一般的なパラメーター属性とその引数について説明します。

最後に、このガイドの最後のセクションで、PowerShellパラメーターの実際のSysAdminの例を示します。このセクションでは、高度な関数でparamブロックを使用する方法の例も示します。

PowerShellパラメーターの種類

PowerShellパラメーターの種類

設定できるパラメータの最も一般的なタイプは次のとおりです。 ストリング また スイッチ パラメーター。さらに、次のように定義することもできます int 、 ブール 、 日付時刻 またはcharパラメータタイプ。

このセクションでは、これらのタイプのパラメーターのいくつかについて説明します。また、paramブロックでそれらを定義する方法の例をいくつか示します。

PowerShellパラメーター 弦 パラメータ

PowerShellパラメーターを作成するときは、 ストリング パラメータ。 A ストリング パラメータは任意の文字列値を受け入れます。

Windows PowerShellでは、文字列は数字、単語、または文字にすることができます。具体的には、二重引用符または一重引用符で宣言するものはすべて文字列です。

PowerShellでは、文字列のオブジェクトタイプは次のとおりです。 System.String 。

PowerShellパラメーターを文字列パラメーターとして宣言するには、パラメーターの名前の前に、単語を囲みます ストリング 括弧内の。ここに例があります…

[  CmdletBinding  (DefaultParameterSetName=, SupportsShouldProcess=$true | $false ) ] Param( [  Parameter  (Mandatory=$true | $false, ValueFromPipeline=$true | $false, Position=, ParameterSetName = 'ParameterSetName')] [  Alias  ('')] [  ValidateNotNullOrEmpty  ()] [data type]$parametername |_+_| 

PowerShellパラメーター int パラメータ

アン int データ型は32ビットの符号付き整数です。英語では、 int は数字です。たとえば、1、2、3などです。

とは異なり ストリング 任意のタイプのデータを取得できるパラメータデータタイプ、 int パラメータは非常に規範的です。

を定義する場合 int パラメータの場合、パラメータは数値のみを受け入れることができます。さらに、の値として単語を入力すると、 int パラメータを指定すると、PowerShellはエラーメッセージをスローします。

PowerShellパラメーターを定義する方法を説明する前に int パラメータ、これはintデータ型を定義する方法の一般的な例です…

[CmdletBinding()] Param( [Parameter()] $ParameterName )

PowerShellでコードを実行すると、 123 。

PowerShell Paramintパラメーター

逆に、123をこれに置き換えるとintになり、PowerShellはエラーメッセージをスローします。

[string]$ReportPath

今、あなたは int PowerShellパラメーターを作成するためのデータ型クラッシュコース int 番号と呼ばれるパラメータ、ここにコードがあります…

[int]'123'

これにより、スクリプトまたは関数のユーザーは適切なデータ型を提供するように強制されます。

PowerShellパラメーター 日付時刻 パラメータ

のように int パラメータ、 日付時刻 パラメータは、受け入れる入力のタイプを非常に規定しています。名前が示すように、 日付時刻 パラメータは、日付と時刻の形式の入力のみを受け入れます。

日付のみを受け入れるPowerShellパラメーターを定義する場合は、以下のサンプルコードを使用してください…

[int]'this is an int'

この例では、 EnterDate パラメータの名前です。さらに、 日付時刻 データ型を定義します。

PowerShellパラメーター スイッチ パラメータ

このセクションの最初の3つのサブセクションでは、ユーザーからの入力が必要なPowerShellパラメーターの種類について説明しました。

ただし、ユーザーからの入力を必要としないPowerShellパラメータータイプがあります。他のタイプのパラメータとは異なり、 スイッチ パラメータはユーザー入力を必要としません。

あなたが定義する方法 スイッチ パラメータは、他のタイプのパラメータを定義する方法と似ています。ただし、代わりに スイッチ 、 int 、 また 日付時刻 、単語を使用します スイッチ 。

たとえば、PowerShellパラメータを定義します スイッチ パラメータ、 ExportCSV 、以下のコードを使用してください…

[int]$Number

最後に、このセクションでは、 スイッチ パラメーター。 Powershellコンソールに結果を表示できるPowerShellスクリプトまたは関数について考えてみてください。

また、結果をテキストファイルまたはCSVファイルにエクスポートするオプションをユーザーに提供することもできます。

ルートなしでbuild.propを編集する

関数をコーディングする1つの方法は、3つのスイッチパラメーターを作成することです。次に、ユーザーは、関数が結果をどのように提供するかに応じて、パラメーターの1つを選択できます。

このタイプのパラメーターでは、ユーザーが入力を入力する必要はありません。パラメータを選択するだけで、関数はそれに応じて出力を表示します。

特定のデータ型を使用して他のPowerShellパラメーターを定義することもできます。 PowerShellデータ型については、次のリンクにアクセスしてください– PowerShellデータ型を定義する方法 。

PowerShellパラメーターの属性と引数

PowerShellパラメーターの属性と引数

このガイドのPowerShellパラメーター構文では、PowerShellパラメーターに属性があることを示唆しました。さらに、各パラメーター属性にも引数があることも指摘しました。

このセクションでは、パラメーター属性とその引数について説明します。

パラメーター属性とその引数を説明するために、このガイドの最初のセクションで紹介したPowerShellパラメーターの構文を参照します。

[  DateTime  ]$EnterDate

PowerShellパラメーター CmdletBinding 属性

The CmdletBinding 属性は通常、paramブロックの前に指定されます。あなたが定義するとき CmdletBinding 属性の場合、PowerShellはスクリプトを高度な関数として認識します。

このガイドの構文セクションでは、このコードをパラメーターブロックの簡略化されたバージョンとして使用しました。

[    Switch   ]$ExportCSV

このセクションでは、 CmdletBinding 属性 コードの一部。を定義する方法は次のとおりです 属性 …

[  CmdletBinding  (DefaultParameterSetName=, SupportsShouldProcess=$true | $false ) ] Param( [  Parameter  (Mandatory=$true | $false, ValueFromPipeline=$true | $false, Position=, ParameterSetName = 'ParameterSetName')] [  Alias  ('')] [  ValidateNotNullOrEmpty  ()] [data type]$parametername |_+_| 

次の3つのサブセクションでは、一般的な引数のいくつかについて説明します。 CmdletBinding 属性。

誤解を避けるために、すべてを定義する必要があります 引数 の()ブロック内 属性 。また、最後の属性を除いて、すべての属性をコンマ(、)で区切る必要があります 引数 以内 属性 。

PowerShellパラメーター DefaultParameterSetName 口論

PowerShell関数を開発する場合、ユーザーが同じコマンドで使用できる複数のパラメーターを含めることができます。さらに、同じPowerShell関数に、ユーザーが別のコマンドで使用できる別のパラメーターのセットを含めることができます。

ただし、ユーザーは最初のセットのパラメーターと2番目のセットのパラメーターを混在させることはできません。

さらに、関数開発者は、ユーザーが同じコマンドで使用できるすべてのパラメーターを定義します。 ParameterSetName 口論。 The ParameterSetName 引数はパラメータ属性内で定義されます(これについては次のセクションで詳しく説明します)。

グループ化されたパラメーターのセットが異なることの意味は、異なるものになるということです。 ParameterSetName s。

異なる ParameterSetName ■パラメータブロックに違反している場合は、次のいずれかを定義することができます。 ParameterSetName sデフォルトとして。これはあなたが使用する場所です DefaultParameterSetName 口論。

The DefaultParameterSetName 引数は内で定義されます CmdletBinding 属性ブロック。ここに例があります…

[CmdletBinding()] Param( [Parameter()] $ParameterName )

最後に、PowerShell paramブロック形式を保持するために、以下のparamブロックを再紹介します…

[CmdletBinding()]

PowerShellパラメーター SupportsShouldProcess 口論

これは、で定義できるもう1つの引数です。 CmdletBinding 属性 。以下のような DefaultParameterSetName 引数、 SupportsShouldProcess 引数はオプションです。

The SupportsShouldProcess 引数は 確認 と 仮に 関数に共通のパラメーター。

この引数を追加するには、末尾にコンマ(、)を追加します DefaultParameterSetName 口論。次に、行を追加します– SupportsShouldProcess = $ trueまたは$ false。

この新しい議論が含まれていると、 CmdletBinding 属性 これで次のようになります…

[CmdletBinding(  DefaultParameterSetName  ='ParameterSetName1')]

PowerShellパラメーター HelpURI 口論

PowerShellに精通している場合 助けを得ます コマンドレット、あなたはそのに出くわしたかもしれません オンライン パラメータ。あなたが走るとき 助けを得ます とともに オンライン パラメータを指定すると、PowerShellはコマンドレットのオンラインヘルプページを開きます。

たとえば、Out-Fileコマンドレットのオンラインヘルプページを開くには、次のコマンドを実行します…

[CmdletBinding(  DefaultParameterSetName  ='ParameterSetName1')] Param( [Parameter()] $ParameterName )

このコマンドによって開かれるページは、関数で次のように定義されます。 HelpURI 口論。したがって、ユーザーが関数のオンラインヘルプページにアクセスできるようにする場合は、 HelpURI 口論。

ここに例があります…

[CmdletBinding(  DefaultParameterSetName  ='ParameterSetName1', SupportsShouldProcess=$true)] Param( [Parameter()] $ParameterName )

この最後の引数を CmdletBinding 属性 。これが更新されたコードです…

  Get-Help  Out-File -  Online  

PowerShellパラメーター パラメータ 属性

PowerShellパラメータで CmdletBinding 属性サブセクションでは、に含めることができる3つの引数について説明しました。 CmdletBinding 属性ブロック。

あなたが見てきたように、 CmdletBinding 属性ブロックは、paramブロックの外部で定義された唯一の属性です。

このサブセクションでは、パラメータ属性について学習します。さらに、この属性に追加できる一般的な引数についても学習します。

このガイドですでに使用されている例から推測できるように、パラメーター属性は、PowerShellパラメーターパラメーターの動作を制御する引数を定義します。

パラメータ属性を定義するには、パラメータという単語の後に[]ブロックで角かっこ()を付けます。ここに例があります…

HelpURI='https://www.itechguides.com/category/technology-explained/powershell-cmd-explained/'

次に、()ブロック内でパラメータ属性のすべての引数を定義する必要があります。

PowerShellパラメーターパラメーター属性セクションの次のサブセクションでは、パラメーター属性内で定義できる一般的な引数を紹介し、説明します。

PowerShellパラメーター ParameterSetName 口論

説明したとき DefaultParameterSetName このガイドの前半で、 ParameterSetName 口論。この引数を使用して、ユーザーが同じコマンドで実行できるパラメーターをバッチ処理またはグループ化できます。

スマートテレビにkodiをインストールできますか

たとえば、 ParameterSetName と呼ばれる ParameterSetName1 、パラメータ属性()ブロックに以下のコードを入力します。

[CmdletBinding(  DefaultParameterSetName  ='ParameterSetName1', SupportsShouldProcess=$true, HelpURI='https://www.itechguides.com/category/technology-explained/powershell-cmd-explained/')] Param( [Parameter()] $ParameterName )

この更新されたコードを紹介すると、サンプルコードのparamブロックはこれになります。

Param(  
[Parameter()]
$ParameterName
)

持ち帰ったら CmdletBinding 属性、サンプルのPowerShellパラメータコードは次のようになります…

ParameterSetName='ParameterSetName1'

PowerShellパラメーター 必須 口論

あなたは使用することができます 必須 パラメータが必須かオプションかを定義する引数。 The 必須 引数は$ trueまたは$ falseの値を受け入れます– $ trueはrequire、$ false、必須ではないことを意味します。

さらに、 必須 引数はオプションです。ただし、この引数が定義されていない場合、パラメーターはオプションとして扱われます。

を定義するには 必須 引数、以下のコードをParameterAttributeブロックに追加します…

Param( [Parameter(ParameterSetName='ParameterSetName1')] $ParameterName )

最後に、 必須 PowerShellパラメーターコードへの引数コード、これで…

[CmdletBinding(  DefaultParameterSetName  ='ParameterSetName1', SupportsShouldProcess=$true, HelpURI='https://www.itechguides.com/category/technology-explained/powershell-cmd-explained/')] Param( [Parameter(ParameterSetName='ParameterSetName1')] $ParameterName )

PowerShellパラメーター ポジション 口論

The ポジション パラメータ属性の引数は、パラメータの位置を定義します。値は、0(ゼロ)から始まる整数です。

の利点 ポジション 引数は、ユーザーがパラメーターの位置を使用して関数を実行できるようにすることです。具体的には、 ポジション 引数、ユーザーはパラメーターを指定せずにコマンドラインで各パラメーターの値を入力できます。

PowerShellは、パラメーターの位置に従って、コマンドラインの各値を割り当てます。

たとえば、 Get-ChildItem コマンドレットには、というパラメータがあります 道 (位置0)。コマンドレットには、別のパラメーターもあります。 フィルター (位置1)。

デフォルトでは、 Get-ChildItem コマンドでは、値を追加する前にパラメータ名を含める必要があります。以下のコマンドを参照してください…

Mandatory=$true

このコマンドでは、パラメーターを呼び出してから、それらの値を指定しました。

PowerShellパラメーターの位置の引数

ただし、これら2つのパラメーターの位置がわかっているので、パラメーターを明示的に呼び出さなくても、それらの位置に値を追加できます。次に、以下に示すようにコマンドを変更します…

[CmdletBinding(  DefaultParameterSetName  ='ParameterSetName1', SupportsShouldProcess=$true, HelpURI='https://www.itechguides.com/category/technology-explained/powershell-cmd-explained/')] Param( [Parameter(ParameterSetName='ParameterSetName1', Mandatory=$true)] $ParameterName )

明らかに、これは私に時間を節約します!ただし、長いPowerShellコードを表示している場合は、混乱が生じる可能性があります。

このコマンドは、PowerShellでも同じ結果になります…

PowerShellは、位置の値をパラメーターに基づいてパラメーターに自動的に割り当てます ポジション 口論。

出力の開始に失敗したobsエラー

次に、これがあなたがどのように定義するかです ポジション 口論…

Get-ChildItem -Path D:G-Drive -Filter *.txt
この例では、パラメーターの位置は0(ゼロ)です。次のパラメーターを定義すると、位置1になります。同じ位置に2つのパラメーターを置くことはできません。このガイドの後半で、同じ位置に異なるParameterSetNamesに1つのパラメーターを追加する方法を学習します。

この引数をサンプルコードに追加します…

Get-ChildItem D:G-Drive *.txt

PowerShellパラメーター ValueFromPipeline 口論

別の一般的に使用されるパラメータ拡張は、 ValueFromPipeline 口論。名前が示すように、この引数は、パラメーターがパイプラインからの値を受け入れるかどうかを決定します。

彼女はあなたがこの議論をどのように定義するかです…

Position=0

この新しい引数をコードに追加すると、次のようになります…

[CmdletBinding(  DefaultParameterSetName  ='ParameterSetName1', SupportsShouldProcess=$true, HelpURI='https://www.itechguides.com/category/technology-explained/powershell-cmd-explained/')] Param( [Parameter(ParameterSetName='ParameterSetName1', Mandatory=$true, Position=0)] $ParameterName )

と呼ばれる別の議論があります ValueFromPipelineByPropertyName 。この議論について読むには、次のWebサイトにアクセスしてください。 about_Functions_Advanced_Parameters 。

PowerShellパラメーター HelpMessage 口論

この引数を使用して、パラメーターの使用方法をユーザーに示すメッセージを指定できます。を定義するには HelpMessage パラメータの引数は、以下のようなコードを使用してください…

ValueFromPipeline=$true or $false

そして、これが私の更新されたコードです…

[CmdletBinding(  DefaultParameterSetName  ='ParameterSetName1', SupportsShouldProcess=$true, HelpURI='https://www.itechguides.com/category/technology-explained/powershell-cmd-explained/')] Param( [Parameter(ParameterSetName='ParameterSetName1', Mandatory=$true, Position=0, ValueFromPipeline=$true)] $ParameterName )

このセクションのこれまでのところ、2つのPowerShellパラメーター属性について説明しました– CmdletBinding と パラメータ 。さらに、これらの属性に対して定義できる一般的な引数についても説明しました。

このセクションの残りの3つのサブセクションでは、より一般的に使用される3つのPowerShellパラメーター属性について説明します。ただし、これら3つの属性では、引数を定義する必要はありません。

PowerShellパラメーター エイリアス 属性

エイリアス属性は、パラメータのエイリアスを指定するために使用されます。ご想像のとおり、パラメーターの代わりにPowerShellパラメーターのエイリアスを使用できます。

パラメータのエイリアス属性を定義する方法を説明する前に、まず、コンピュータ上のすべてのコマンドレットと関数のエイリアスを検索する方法を説明します。

コマンドレットと関数のすべてのエイリアスを一覧表示するには、次のコマンドを実行します

HelpMessage='Specifiy your message here'

これにより、すべてのエイリアスが一覧表示されます…

PowerShellパラメータエイリアス属性

に移ります エイリアス 属性、PowerShell paramパラメーターの属性を定義するには、次のようなコードを使用します…

[CmdletBinding(  DefaultParameterSetName  ='ParameterSetName1', SupportsShouldProcess=$true, HelpURI='https://www.itechguides.com/category/technology-explained/powershell-cmd-explained/')] Param( [Parameter(ParameterSetName='ParameterSetName1', Mandatory=$true, Position=0, ValueFromPipeline=$true, HelpMessage='Specifiy your message here')] $ParameterName )
この例では、FPがパラメーターのエイリアスです。

これをコードに追加すると、更新されたバージョンは次のようになります…

Get-Alias

PowerShellパラメーター ワイルドカードをサポート 属性

このパラメーターparam属性は、パラメーターがワイルドカードを受け入れるかどうかを決定します。この属性を定義する方法は次のとおりです…

[Alias('FP')]

PowerShellパラメーター ValidateNotNullOrEmpty 検証属性

このガイドですでに説明されているほとんどの属性と同様に、この属性の名前もそれを示しています。これは検証属性です。

この属性を定義すると、パラメーターはnull($ null)値を受け入れません。さらに、空の()値は受け入れません。

ユーザーが$ null、またはを入力すると、関数はエラーをスローします。この属性を定義するには、以下のコードを入力してください…

[CmdletBinding(  DefaultParameterSetName  ='ParameterSetName1', SupportsShouldProcess=$true, HelpURI='https://www.itechguides.com/category/technology-explained/powershell-cmd-explained/')] Param( [Parameter(ParameterSetName='ParameterSetName1', Mandatory=$true, Position=0, ValueFromPipeline=$true, HelpMessage='Specifiy your message here', [Alias('FP')])] $ParameterName )

最後に、最後の2つの属性でコードを更新します…

[SupportsWildcards()]

PowerShellパラメーターのパラメーター名

パラメータのすべての属性と引数を定義したら、パラメータ名を追加する必要があります。 PowerShellパラメーターパラメーターは変数のように定義されます–ドル記号($)の後にパラメーターの名前が続きます。

オプションで、パラメータのデータ型を入力することもできます。このガイドのセクション2では、さまざまな種類のPowerShellパラメーターについて説明しました。

受け入れることができるパラメータを定義する方法は次のとおりです ストリング データ・タイプ。

[ValidateNotNullOrEmpty()]

これが私の更新されたコード例です…

[CmdletBinding(  DefaultParameterSetName  ='ParameterSetName1', SupportsShouldProcess=$true, HelpURI='https://www.itechguides.com/category/technology-explained/powershell-cmd-explained/')] Param( [Parameter(ParameterSetName='ParameterSetName1', Mandatory=$true, Position=0, ValueFromPipeline=$true, HelpMessage='Specifiy your message here', [Alias('FP')])] [SupportsWildcards()] [ValidateNotNullOrEmpty()] $ParameterName )

複数のパラメーターセットで1つのPowerShellパラメーターを定義する方法

複数のパラメーターセットで1つのPowerShellパラメーターを定義する方法

PowerShell関数のコーディングに慣れていない場合は、1つのパラメーターを複数回定義したくなる可能性があります。

パラメーターを複数回持つ必要がある理由の1つは、パラメーターが複数のParameterSetNames(複数のパラメーターセット)で使用されている場合です。

この家を運転するために、次のようなPowerShell関数を開発しているとします。 道 パラメータ。ただし、Pathパラメーターを必要とする2つのParameterSetNamesがあります。

PowerShellスクリプトを初めて使用するほとんどの人は、以下に示すパラメーターを定義する可能性があります…

[  string  ]$ParameterName

上記のようにパラメータを定義すると、エラーメッセージが表示されます。この理論をテストするために、コードをPowerShellISEにコピーします。

複数のパラメーターセットで1つのPowerShellパラメーターを定義する方法

では、これをどのように修正しますか?解決策は、2つのパラメーター属性とその引数(ParameterSetNamesを含む)を定義することです。

次に、両方のパラメーター属性の最後に、両方のパラメーター属性に共通する単一のパラメーター名を定義します。前の例では、最初のパラメーター名を削除し、最後のパラメーター名を残します。

[CmdletBinding(  DefaultParameterSetName  ='ParameterSetName1', SupportsShouldProcess=$true, HelpURI='https://www.itechguides.com/category/technology-explained/powershell-cmd-explained/')] Param( [Parameter(ParameterSetName='ParameterSetName1', Mandatory=$true, Position=0, ValueFromPipeline=$true, HelpMessage='Specifiy your message here', [Alias('FP')])] [SupportsWildcards()] [ValidateNotNullOrEmpty()] [string]$ParameterName )

このコードをPowerShellISEにコピーすれば、問題ありません。

この例では、両方のパラメーター属性のパラメーター引数が完全に異なる可能性があることに注意してください。さらに、必要な数のパラメーター属性を定義できます。

PowerShellパラメーターの例

PowerShellパラメーターの例

ガイドのこの最後のセクションでは、実際のSysAdminPowerShellパラメーターの例を示します。

このガイドを書いているときに、フォルダーサイズとファイル数を取得するためのPowerShellスクリプト/関数の開発を開始しました。これが関数のparam部分です…

Param( [Parameter(ParameterSetName='  ParameterSetName1  ', Mandatory=$true, Position=0)] [string]$  Path  , [Parameter(ParameterSetName='  ParameterSetName2  ', Mandatory=$true, Position=0)] [string]$  Path  )

このセクションの次のいくつかのサブセクションでは、パラメーターのさまざまな要素について説明します。最後に、最後のセクションで関数ブロックを紹介し、paramブロックを関数に追加します。

次のサブセクションで参照されているコードの行を簡単にたどるには、PowerShellParamExample.zipをダウンロードしてください。次に、ファイルを解凍し、PowerShellISEで.ps1ファイルを開きます。

ParameterSetNamePowerShellパラメーターの例

私のPowerShellパラメータサンプルコードには3つのParameterSetNamesがあります– DisplayResult 、 ExportTxt と ExportCSV 。私はこれらの名前を使用して、それらが何をしているのかを簡単に識別できるようにしました。

このセクションの冒頭で、このパラメーターコードを使用して作成している関数は、指定されたフォルダー内の各サブフォルダーのフォルダーサイズとファイル数を表示することを説明しました。

したがって、3つのParameterSetNameは、PowerShellコンソールに結果を表示するオプションをユーザーに提供します。または、ユーザーは結果をテキストファイルまたはCSVファイルにエクスポートするオプションがあります。

さらに、それぞれ ParameterSetName ユーザーが1つのコマンドで呼び出すことができるすべてのパラメーターを定義します。この考えに基づいて、私が構築している関数には、3つのコマンドオプションまたは構文があります。

このアイデアについては、以降のサブセクションと例で詳しく説明します。

CmdletBinding 属性と DefaultParameterSetName 引数の例

このガイドの前のセクションで、 CmdletBinding 属性。さらに、あなたはその議論の1つにも出くわしました– DefaultParameterSetName 。

The DefaultParameterSetName 引数は、関数が呼び出すデフォルトのパラメータセットを定義するために使用されます。この例では、デフォルトのパラメータセット名は次のとおりです。 DisplayResult 。

The DefaultParameterSetName コードの1行目で宣言されています。

PowerShellは、によって宣言されたパラメーターセットを使用しようとします DefaultParameterSetName 使用するパラメータセットを判別できない場合。ただし、必須パラメーターを設定すると、この問題を回避できます。

いずれの場合も、デフォルトのパラメータセット名を宣言しても問題はありません。

FolderPath 文字列パラメータの例

ここから楽しみが始まります! The FolderPath パラメータは、関数がそのサブフォルダのサイズを取得するフォルダパスを入力するために使用され、各サブフォルダ内のファイルの数をカウントします。

これは文字列パラメータです。入力として任意の文字列を受け入れることを意味します。

のエキサイティングな機能の1つ FolderPath パラメータは、3つのパラメータセット名に共通であるということです。この記事の前半で、新しいPowerShellスクリプト開発者がこの状況で直面する可能性のある課題について説明しました。

宣言するには FolderPath 3つのパラメーターセット名のパラメーター、3つのパラメーター属性を作成しました。

最初のパラメーター属性は5行目と11行目の間にあります。さらに、この最初のパラメーター属性には複数の引数があります。

ただし、特に注意していただきたいと思います。 ParameterSetName 口論 - DisplayResult 。

FolderPath文字列パラメータの例

次に、12行目と18​​行目の間で、別のパラメーター属性を次のように宣言しました。 ParameterSetName と呼ばれる引数 ExportTxt 。

最後に、19行目と25行目で、3番目のパラメーター属性を次のように宣言しました。 ParameterSetName と呼ばれる引数 ExportCSV 。

FolderPath文字列パラメータの例

さらに、3つのパラメーター属性を宣言するのとは異なり、私は1つを宣言しました。 エイリアス 、 と ValidateNotNullOrEmpty 属性。これらの属性は、26行目と27行目にあります。

FolderPath文字列パラメータの例

最後に、すべての属性とその引数のすぐ下に、パラメーターの名前を含めました– FolderPath 。パラメータ名は28行目にあります。

FolderPath文字列パラメータの例このセクションの最後のサブセクションでは、関数がこのパラメーターを3つのコマンド構文でどのように表示するかを確認します。

DisplayResult 、 ExportTxt と ExportCSV スイッチパラメータの例

パラメータコードの29行目から、別のパラメータ属性のセットとその引数を宣言しました。

まず、29行目と37行目で、パラメータの属性と引数を宣言します。 DisplayResult パラメータ。

次に、38行目と47行目で、次のパラメータを宣言します。 ExportTxt 。

DisplayResult、ExportTxt、およびExportCSVスイッチのパラメーターの例

最後に、48行目と57行目の間で、 ExportCSV パラメータ。

このセクションで説明した3つのパラメーターはすべて スイッチ パラメーター。すでにご存知のように、これはパラメータがユーザーからの入力を必要としないことを意味します。

ユーザーがパラメーターのいずれかを選択すると、関数は結果の表示方法を変更します。

PowerShell関数でPowerShellパラメーターを使用する方法

このサブセクションでは、PowerShell関数ブロックをサンプルコードに導入します。

PowerShell関数ブロックの構文は…

Param( [Parameter(ParameterSetName='  ParameterSetName1  ', Mandatory=$true, Position=0)] [Parameter(ParameterSetName='  ParameterSetName2  ', Mandatory=$true, Position=0)] [string]$  Path  )

このガイドの最後の例では、関数の構文内のPowerShell paramブロックを、最後のサブセクションのパラメーターコードに置き換えます。さらに、関数を次のように置き換えます Get-FolderSizeFileCount 、関数の名前。

最終的な関数は次のようになります…

[CmdletBinding(  DefaultParameterSetName  ='DisplayResult', SupportsShouldProcess=$true, HelpURI='https://www.itechguides.com/category/technology-explained/powershell-cmd-explained/')] Param( [Parameter( ParameterSetName='DisplayResult', Mandatory=$true, Position=0, HelpMessage='Specifiy the folder path to calculate size and file count for its sub-folders', ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true)] [Parameter( ParameterSetName='ExportTxt', Mandatory=$true, Position=0, HelpMessage='Specifiy the folder path to calculate size and file count for its sub-folders', ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true)] [Parameter( ParameterSetName='ExportCSV', Mandatory=$true, Position=0, HelpMessage='Specifiy the folder path to calculate size and file count for its sub-folders', ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true)] [Alias('FP')] #attribute must appear once [ValidateNotNullOrEmpty()] [string[]]$FolderPath, #can specify multiple paths separated by commas [Parameter( ParameterSetName='DisplayResult', Mandatory=$true, Position=1, HelpMessage='USe this parameter to display result on the console', ValueFromPipeline=$false, ValueFromPipelineByPropertyName=$false)] [Alias('DR')] [Switch]$DisplayResult, [Parameter( ParameterSetName='ExportTxt', Mandatory=$true, Position=1, HelpMessage='USe this parameter to send result to a text file', ValueFromPipeline=$false, ValueFromPipelineByPropertyName=$false)] [Alias('ExTxt')] [ValidateNotNullOrEmpty()] [Switch]$ExportTxt, [Parameter( ParameterSetName='ExportCSV', Mandatory=$true, Position=1, HelpMessage='USe this parameter to send result to a CSV file', ValueFromPipeline=$false, ValueFromPipelineByPropertyName=$false)] [Alias('ExCSV')] [ValidateNotNullOrEmpty()] [Switch]$ExportCSV, [Parameter( ParameterSetName='ExportTxt', Mandatory=$true, Position=2, ValueFromPipeline=$false, ValueFromPipelineByPropertyName=$true)] [Parameter( ParameterSetName='ExportCSV', Mandatory=$true, Position=2, ValueFromPipeline=$false, ValueFromPipelineByPropertyName=$true)] [ValidateNotNullOrEmpty()] #attribute must appear once [string]$ReportPath )
この例では、Begin {}、Process {}、およびEnd {}ブロックは空です。

PowerShell関数でのPowerShellパラメーターのテスト

この最後のセクションでは、前のセクションで作成した関数のパラメーターをテストします。

自分でテストしたい場合は、次のリンクをクリックしてコードをダウンロードできます–Get-FolderSizeFileCount.zip。次に、zipファイルを解凍します。

ファイルを解凍したら、PowerShellを開き、次のコマンドを実行します。

Function { Param( ) Begin { } Process { } End { } }
解凍したファイルへのフルパスに変更します。

コマンドを実行すると、警告メッセージが表示されます。メッセージプロンプトで、次のように入力します。 R キーボードのEnterキーを押します。

PowerShell関数でのPowerShellパラメーターのテスト

モジュールがインポートされたら、同じPowerShellコンソールで、次のコマンドを実行します。

Function Get-FolderSizeFileCount { [CmdletBinding(  DefaultParameterSetName  ='DisplayResult', SupportsShouldProcess=$true, HelpURI='https://www.itechguides.com/category/technology-explained/powershell-cmd-explained/')] Param( [Parameter( ParameterSetName='DisplayResult', Mandatory=$true, Position=0, HelpMessage='Specifiy the folder path to calculate size and file count for its sub-folders', ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true)] [Parameter( ParameterSetName='ExportTxt', Mandatory=$true, Position=0, HelpMessage='Specifiy the folder path to calculate size and file count for its sub-folders', ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true)] [Parameter( ParameterSetName='ExportCSV', Mandatory=$true, Position=0, HelpMessage='Specifiy the folder path to calculate size and file count for its sub-folders', ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true)] [Alias('FP')] #attribute must appear once [ValidateNotNullOrEmpty()] [string[]]$FolderPath, #can specify multiple paths separated by commas [Parameter( ParameterSetName='DisplayResult', Mandatory=$true, Position=1, HelpMessage='USe this parameter to display result on the console', ValueFromPipeline=$false, ValueFromPipelineByPropertyName=$false)] [Alias('DR')] [Switch]$DisplayResult, [Parameter( ParameterSetName='ExportTxt', Mandatory=$true, Position=1, HelpMessage='USe this parameter to send result to a text file', ValueFromPipeline=$false, ValueFromPipelineByPropertyName=$false)] [Alias('ExTxt')] [ValidateNotNullOrEmpty()] [Switch]$ExportTxt, [Parameter( ParameterSetName='ExportCSV', Mandatory=$true, Position=1, HelpMessage='USe this parameter to send result to a CSV file', ValueFromPipeline=$false, ValueFromPipelineByPropertyName=$false)] [Alias('ExCSV')] [ValidateNotNullOrEmpty()] [Switch]$ExportCSV, [Parameter( ParameterSetName='ExportTxt', Mandatory=$true, Position=2, ValueFromPipeline=$false, ValueFromPipelineByPropertyName=$true)] [Parameter( ParameterSetName='ExportCSV', Mandatory=$true, Position=2, ValueFromPipeline=$false, ValueFromPipelineByPropertyName=$true)] [ValidateNotNullOrEmpty()] #attribute must appear once [string]$ReportPath ) Begin { } Process { } End { } }

これがコマンドの結果です…

私がお見せしたいのは、私の関数のヘルプページの構文セクションです。上のスクリーンショットから、Get-FolderSizeFileCountコマンドを3つの異なるコマンドで実行できます。

ドアダッシュからクレジットカードを削除する方法
Import-Module    Get-FolderSizeFileCountGet-FolderSizeFileCountGet-FolderSizeFileCount.psm1

最初に注意することは、3つの構文には FolderPath 文字列パラメータ。このガイドを読むと、その理由がわかります。

さらに、最初の構文には DisplayResult パラメータも切り替えます。最後に、2番目と3番目の構文では、 ExportCSV 、 と ExportTxt それぞれパラメータを切り替えます。

に加えて FolderPath 、 と ExportCSV パラメータと ExportTxt それぞれ2番目と3番目の構文のパラメーター。 ReportPath 文字列パラメータ。宣言コードは FolderPath コード、いくつかの小さな違いがあります。 The ReportPath 関数がテキストおよびCSVファイルレポートを保存するパスを指定するために使用されます。

それだけです– PowerShellパラメーターに関する包括的なガイドです!お役に立てば幸いです。

役に立ったと思ったら、親切に投票してください はい この投稿は以下の役立つ質問でした。

または、このページの最後にある[返信を残す]フォームを使用して、質問したり、コメントを残したり、フィードバックを提供したりすることもできます。

最後に、PowerShell tech Sゾーンの詳細については、WindowsPowerShellハウツーガイドページにアクセスしてください。また、ホームページからの作業が非常に役立つ場合があります。

参考文献と参考資料

  1. PowerShellデータ型を定義する方法
  2. about_Functions_Advanced_Parameters
  3. about_Functions_CmdletBindingAttribute