サーチ…


前書き

PowerShellモジュールは、システム管理者、DBA、および開発者に拡張性をもたらします 。単に関数とスクリプトを共有する方法であるかどうか。

Powershell 関数は、繰り返しコードを避けることです。 [PS関数] [1] [1]: PowerShell関数を参照してください。

PowerShellスクリプトは、管理タスクを自動化するために使用されます。管理タスクは、コマンドラインシェルと、.NET Framework上に構築された関連するコマンドレットで構成されています。

関数

関数は、使い易い再利用可能なコードを定義するために使用されるコードの名前付きブロックです。これは通常、コードの再利用(コードの重複を避けるため)や複数のスクリプトの中で他の人に役立つようにモジュールの一部として配布されるスクリプトに含まれています。

関数が役に立つかもしれないシナリオ:

  • 数値のグループの平均を計算する
  • プロセスを実行するためのレポートを生成する
  • コンピュータにpingを実行してc$ -shareにアクセスして、コンピュータが「正常」であるかどうかをテストする関数を作成します

関数は、 functionキーワードを使用して作成され、その後に1単語の名前と関数名が呼び出されたときに実行されるコードを含むスクリプトブロックが続きます。

function NameOfFunction {
    Your code
}

デモ

function HelloWorld {
    Write-Host "Greetings from PowerShell!"
}

使用法:

> HelloWorld
Greetings from PowerShell!

スクリプト

スクリプトは、スクリプトの.ps1時に実行されるPowerShellコマンドを含むファイル拡張子.ps1を持つテキストファイルです。スクリプトは保存されたファイルなので、コンピュータ間で簡単に転送できます。

スクリプトは特定の問題を解決するためによく書かれています。例:

  • 毎週のメンテナンスタスクを実行する
  • コンピュータにソリューション/アプリケーションをインストールして構成するには

デモ

MyFirstScript.ps1:

Write-Host "Hello World!"
2+2

次のコマンドを使用して、ファイルへのパスを入力してスクリプトを実行できます。

  • 絶対パス、ex。 c:\MyFirstScript.ps1
  • PowerShellコンソールの現在のディレクトリがC:\場合は、相対パス(例: .\MyFirstScript.ps1

使用法:

> .\MyFirstScript.ps1
Hello World!
4

スクリプトはモジュールをインポートしたり、独自の関数などを定義することもできます。

MySecondScript.ps1:

function HelloWorld {
    Write-Host "Greetings from PowerShell!"
}

HelloWorld
Write-Host "Let's get started!"
2+2
HelloWorld

使用法:

> .\MySecondScript.ps1
Greetings from PowerShell!
Let's get started!
4
Greetings from PowerShell!

モジュール

モジュールは、他のPowerShellユーザーに簡単に配布したり、複数のスクリプトやコンソールで直接使用できる関連する再利用可能な関数(またはコマンドレット)の集合です。モジュールは通常、それ自身のディレクトリに保存され、次の要素で構成されます。

  • 機能を含むファイル拡張子.psm1持つ1つ以上のコードファイル、またはコマンドレットを含むバイナリアセンブリ( .dll
  • モジュールの名前、バージョン、作成者、説明、提供する関数/コマンドレットなどを記述するモジュールマニフェスト.psd1
  • それを含む他の要件が含まれています。依存関係、スクリプトなど

モジュールの例:

  • データセットに関する統計を実行する関数/コマンドレットを含むモジュール
  • データベースの照会と構成のためのモジュール

PowerShellがモジュールを見つけてインポートするのを容易にするために、 $env:PSModulePath定義されている既知のPowerShellモジュールの場所の1つに配置されることがよくあります。

デモ

既知のモジュール場所の1つにインストールされているモジュールを一覧表示します。

Get-Module -ListAvailable

元のモジュールをインポートします。 Hyper-Vモジュール:

Import-Module Hyper-V

モジュール内で使用可能なコマンドを一覧表示する(ex。 Microsoft.PowerShell.Archive - モジュール

> Import-Module Microsoft.PowerShell.Archive
> Get-Command -Module Microsoft.PowerShell.Archive

CommandType Name             Version Source                      
----------- ----             ------- ------                      
Function    Compress-Archive 1.0.1.0 Microsoft.PowerShell.Archive
Function    Expand-Archive   1.0.1.0 Microsoft.PowerShell.Archive

高度な機能

高度な機能は、コマンドレットと同じように動作します。 PowerShell ISEには、2つの高度な機能のスケルトンが含まれています。これらのメニューにアクセスするには、編集、コードスニペット、またはCtrl + Jを押します。 (PS 3.0以降、以降のバージョンは異なる場合があります)

高度な機能には、

  • Get-Help介してアクセス可能な組み込みのカスタマイズされたヘルプ機能
  • 関数をコマンドレットのように動作させる[CmdletBinding()]を使用できます
  • 拡張パラメータオプション

シンプルバージョン:

<#
.Synopsis
   Short description
.DESCRIPTION
   Long description
.EXAMPLE
   Example of how to use this cmdlet
.EXAMPLE
   Another example of how to use this cmdlet
#>
function Verb-Noun
{
    [CmdletBinding()]
    [OutputType([int])]
    Param
    (
        # Param1 help description
        [Parameter(Mandatory=$true,
                   ValueFromPipelineByPropertyName=$true,
                   Position=0)]
        $Param1,

        # Param2 help description
        [int]
        $Param2
    )

    Begin
    {
    }
    Process
    {
    }
    End
    {
    }
}

完全版:

<#
.Synopsis
   Short description
.DESCRIPTION
   Long description
.EXAMPLE
   Example of how to use this cmdlet
.EXAMPLE
   Another example of how to use this cmdlet
.INPUTS
   Inputs to this cmdlet (if any)
.OUTPUTS
   Output from this cmdlet (if any)
.NOTES
   General notes
.COMPONENT
   The component this cmdlet belongs to
.ROLE
   The role this cmdlet belongs to
.FUNCTIONALITY
   The functionality that best describes this cmdlet
#>
function Verb-Noun
{
    [CmdletBinding(DefaultParameterSetName='Parameter Set 1', 
                  SupportsShouldProcess=$true, 
                  PositionalBinding=$false,
                  HelpUri = 'http://www.microsoft.com/',
                  ConfirmImpact='Medium')]
    [OutputType([String])]
    Param
    (
        # Param1 help description
        [Parameter(Mandatory=$true, 
                   ValueFromPipeline=$true,
                   ValueFromPipelineByPropertyName=$true, 
                   ValueFromRemainingArguments=$false, 
                   Position=0,
                   ParameterSetName='Parameter Set 1')]
        [ValidateNotNull()]
        [ValidateNotNullOrEmpty()]
        [ValidateCount(0,5)]
        [ValidateSet("sun", "moon", "earth")]
        [Alias("p1")] 
        $Param1,

        # Param2 help description
        [Parameter(ParameterSetName='Parameter Set 1')]
        [AllowNull()]
        [AllowEmptyCollection()]
        [AllowEmptyString()]
        [ValidateScript({$true})]
        [ValidateRange(0,5)]
        [int]
        $Param2,

        # Param3 help description
        [Parameter(ParameterSetName='Another Parameter Set')]
        [ValidatePattern("[a-z]*")]
        [ValidateLength(0,15)]
        [String]
        $Param3
    )

    Begin
    {
    }
    Process
    {
        if ($pscmdlet.ShouldProcess("Target", "Operation"))
        {
        }
    }
    End
    {
    }
}


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow