Home > Windows にまつわる e.t.c.

関数を PowerShell プロンプトで実行する


僕が書いているコンテンツは、機能を PowerShell の関数(function)にした物が多いです。

どうやって使うの? って問い合わせがあったので、関数を PowerShell プロンプトで使う方法を解説します。

 

説明用のサンプル関数

function SumpleAdd( $a, $b ){
    return $a + $b
}

 

ざっくり言うと、関数の実行方法は以下の3通りがありますので、関数の使用頻度で使い分けてください。

関数をコピペする

関数を .ps1 にする

関数をプロファイルに登録する

 

 

関数をコピペする

関数の利用頻度が少ないのなら、一番お手軽な関数を PowerShell プロンプトにコピペして、関数を呼びます。

PS C:\> function SumpleAdd( $a, $b ){
>>     return $a + $b
>> }
PS C:\>
PS C:\> SumpleAdd 5 10
15
PS C:\>

 

 

関数を .ps1 にする

ちょくちょく関数を使うのなら、.ps1 にしておくと便利です。

.ps1 にした場合(プロファイル使う場合も同様)は、スクリプト実行許可が必要なので、以下コマンドを管理権限で実行して設定変更ておきます(一度設定すれば OK)

Set-ExecutionPolicy RemoteSigned -Force

 

.ps1 を作るには、メモ帳を開いて、スクリプトをコピペします。

関数名に「global:」を付けてスコープをグローバルにします。
(これを指定しないと、関数のスコープがスクリプトになるので、プロンプトから関数が呼び出せない)

function global:SumpleAdd( $a, $b ){
    return $a + $b
}

 

PowerShell スクリプトなので、ファイルの拡張子を .ps1 にして UTF8 で保存します。

 

Path が通っているフォルダにスクリプトを置くか、フルパスか相対パスを指定してスクリプトを実行(関数の登録)し、その後関数を呼び出します。

 

path が通ったフォルダに置いた場合

PS C:\> test.ps1
PS C:\> SumpleAdd 20 30
50
PS C:\>

 

フルパスを指定する場合

PS C:\> C:\test\test.ps1
PS C:\> SumpleAdd 7 8
15
PS C:\>

 

相対パス(同一フォルダ)を指定する場合

PS C:\test> .\test.ps1
PS C:\test> SumpleAdd 30 40
70
PS C:\test>

 

エクスプローラーで Shif + 右クリック してパスをコピーした場合は、ピリオドを付けてコピペします

PS C:\test> . "C:\Test\test.ps1"
PS C:\test> SumpleAdd 30 40
70
PS C:\test>

 

 

関数をプロファイルに登録する

頻繁に関数を使用する場合は、プロファイルに登録しておくとコマンドレット同様にいつでも呼び出せるので便利です。

メモ帳で編集する場合は

note[TAB] $pro[TAB]

と入力すると以下のように展開されるので入力を省力化できます。

PS C:\> notepad.exe $PROFILE

 

関数をコピペしたら上書き保存し、PowerShell プロンプトを開きなおすと関数が使えるようになります。

PS C:\> SumpleAdd 10 20
30
PS C:\>

 

プロファイルを使う場合、スクリプトの実行許可が必要なので、必要に応じて「Set-ExecutionPolicy RemoteSigned -Force」でスクリプト実行を許可します。

 

PowerShell で Profile に関数を追加する

PowerShell で Profile に関数を追加するのであれば、こんな感じで追加できます。

$HereString = @'

# ここに関数をコピペする

'@

# ヒア文字列を文字列配列にする
$Temp = $HereString.Replace("`r","")
$StringArray = $Temp.Split("`n")

# スクリプトの実行許可
if((Get-ExecutionPolicy) -ne "RemoteSigned"){Set-ExecutionPolicy RemoteSigned -Force}

# プロファイルの有無確認
if( -not (Test-Path $PROFILE)){
    # フォルダが無かったら作る
    if( -not (Test-Path (Split-Path $PROFILE -Parent))){md (Split-Path $PROFILE -Parent)}
}

# プロファイルに関数追加
Add-Content -Value $StringArray -Path $PROFILE -Encoding UTF8

 

モジュールとして登録する

Profile に関数を書くのはお手軽ですが、大量に関数を登録すると Profile 見通しが悪くなります。
そんな時は、関数をモジュールとして登録するのがお勧めです。

詳しくはこちらを見てください

PowerShell の関数をモジュールとしてインストールする
http://www.vwnet.jp/Windows/PowerShell/2019101401/InstallModule.htm

 

関連情報

.ps1 の情報ですが、関数の引数も同様です。

Get-Help 対応 .ps1 の書き方
http://www.vwnet.jp/Windows/PowerShell/SupportGetHelp.htm

PowerShell スクリプト引数(Param)の Tips
http://www.vwnet.jp/Windows/PowerShell/Param.htm

 

 

back.gif (1980 バイト)

home.gif (1907 バイト)

Copyright © MURA All rights reserved.