この連載では、Microsoftが提供している新しいシェル、Windows Power Shellの使い方を解説します。今回は、関数の作成基礎と引数、戻り値、Switchパラメータについて説明します。

はじめに

 この連載では、Microsoftが提供している新しいシェル、Windows Power Shellの使い方を解説します。今回は、関数の作成基礎と引数、戻り値、Switchパラメータについて説明します。

対象読者

  • Windows PowerShellでコマンドレット操作ができる方
  • 何らかのプログラミング経験があればなお良い

必要環境

  • Windows PowerShell

関数の基礎

 PowerShellでの関数の基本構文は、

function 関数名 {
処理内容
}

 です。このようにして作成した関数は、

関数名[Enter]

 と入力して呼び出します。

 早速ですが関数を1つ作成してみましょう。コンソールウィンドウで下記のように入力してください。

PS > function Hello {
>> Write-Host "Hello PowerShell World!!"
>> }
>>

 上記は関数名がHelloで、呼び出されたらWrite-Hostコマンドレットを使用して"Hello PowerShell World!!"と表示するものです。

 では実際にHello関数を使用してみましょう。コマンドラインでHelloと入力し、[Enter]キーを押下してください。

PS > Hello
Hello PowerShell World!!

 関数が実行され、"Hello PowerShell World!!"と表示されます。

引数

引数のある関数

 引数のある関数の構文は、

function 関数名 (引数1, 引数2, ...引数n) {
処理内容
}

 またはparamキーワードを使用して、

function 関数名 {
Param(引数1, 引数2, ...引数n)
}

 と書きます。この連載では前者の方で説明していきます。

 引数のある関数の例として、足し算をする関数addを作成してみましょう。

PS > function add ($x, $y)
>> {
>> Write-Host ($x + $y)
>> }
>>

 この関数は引数$x$yの2つを持っています。このように複数の引数を持つ関数を実行する場合は、

PS > add 3 5

 のようにし、引数に渡す値はスペースで区切ります。

 実はこの関数は、

PS > add Code Zine
CodeZine

 のように引数に文字列を渡すこともできます。これは引数に型が指定されていないためです。また加算演算子+は文字列の場合は連結を行うため、上記は"CodeZine"と表示されます。

引数の型指定

 先ほどの関数addでは、引数の型が指定されていませんでした。今度は、引数に型を指定してみましょう。

PS > function add2 ([int]$x, [int]$y)
>> {
>> Write-Host ($x + $y)
>> }
>>

 引数に型を指定するには、上記[int]のように[型]を引数の前に記述します。ここでは、関数add2の引数の型を[int]としました。

 この関数に文字列を渡したらどうなるでしょうか?

PS > add2 Code Zine

add2 : 値 "Code" を型 "System.Int32" に変換できません。エラー: "入力文字列の形式が正しく
ありません。"
発生場所 行:1 文字:5
+ add2 <<<< Code Zine

 引数に型指定([int])を行ったため、文字列は受け取ることができずエラーとなります。

引数の初期値

 引数には初期値を与えることが可能です。引数を省略して関数が呼び出された場合に、あらかじめ与えておいた初期値が使用されます。

 初期値を与えるには引数を、

変数 = 値

 のように記述します。

 下記は引数$favoriteに"CodeZine"を与えています。

PS > function MyFavorite ($favorite="CodeZine") {
>> Write-Host ("My favorite is $favorite")
>> }

 関数名のみで呼び出すと、

PS > MyFavorite
My favorite is CodeZine

 となり、初期値が変数にセットされることが分かります。

 先ほどは引数の初期値に定数を与えましたが、式を与えることも可能です。

PS > function Get-Year ([DateTime]$ymd = $(Get-Date)) {
>> Write-Host $ymd.Year
>> }
>>

 上記の関数Get-Yearは受け取った引数(年月日)の年のみを表示する関数です。引数が省略された場合は、Get-Dateコマンドレットの結果(実行したときの年月日)が$ymdの初期値となります。

暗黙の引数

 ここまでの引数の例は、どのような値をいくつ受け取るかを事前に指定しています。

 PowerShellには$argsという自動変数があり、明示的に引数を指定していない関数でも値を受け取ることができます。例として引数のない関数Hello2を作成して$argsの動作を確認したいと思います。

PS > function Hello2 {
>> Write-Host ("こんにちは" + $args + "さん")
>> }
>>

 入力が完了したら次のように実行してみましょう。

PS > Hello2 CodeZine
こんにちはCodeZineさん

 このように明示的な引数がなくても値を受け取ることができます。

 また、$args変数は複数の値を受け取ることができます。関数へ複数の値を渡す場合は、値をスペースで区切ります。

PS > function Test-Args {
>> foreach ( $val in $args )
>> {
>> Write-Host $val
>> }
>> }
>>

 上記は受け取った引数すべてを表示するというものです。

 試しに

PS > Test-Args "A" "B" "C"

 と入力してみてください。

PS > Test-Args "A" "B" "C"
A
B
C

 となり、3つの値を$args変数が受け取っていることを確認できます。

自動変数
 「自動変数」とは、Windows PowerShellによって自動的に設定される変数のこと。$Args以外にも多くの自動変数があります。興味のある方はコマンドラインで

help about_automatic_variables | more

 と入力してみてください。

参照渡し

 参照渡しをするには、引数の前に[ref]を付けます。

 また、関数内部では参照渡しで受け取った値は、

$変数名.value

 として使用する必要があります。

 下記は、参照渡しのの引数$xと値渡しの引数$yを持つ関数です。この関数は、内部で受け取った引数の値を数値の5で上書きするというものです。

PS > function Test-Ref([ref]$x, $y)
>> {
>> $x.value = 5
>> $y = 5
>> }
>>

 この関数を実行したらどうなるか実験してみましょう。

 まず、変数$x$yを準備し、初期値として1を代入しておきます。次に、関数Test-Refを実行するのですが、参照渡しの引数の書き方に注意が必要です。([ref]変数名)のように記述する必要があります。

PS > $x = 1
PS > $y = 1
PS > Test-Ref ([ref]$x) $y

 では、この関数の実行結果はどうなったかを確認します。

PS > $x, $y
PS > 5
PS > 1

 参照渡しである$xは"5"に書き換わり、$yは関数実行前の値"1"が格納されています。

戻り値

 戻り値を設定するにはreturnキーワードを使用します。

 下記は、引数で受け取った2つの値を足し算してreturnで返します。

PS > function Add3 ([int]$x, [int]$y)
>> {
>> return $x + $y
>> }
>>

 returnで返される値は、下記のようにして変数に代入することができます。

PS > $ret = Add3 3 4

 この場合は$retに3 + 4の結果が代入されます。

引数の位置指定

 関数呼び出し時に引数名を指定すると、引数の順番を変更することができます。

 下記はBMIを計算する関数です。

PS > function BMI($weight, $height) {
>> return $weight / [math]::pow($height,2)
>> }
>>

 関数の呼び出しを、

PS> BMI 65 1.75

 とした場合は、体重が65kg、身長が1.75mのBMIを求めることになり、結果として21.2244897959184という値が返されます。

 これを

PS > BMI -height 1.75 -weight 65

 として実行しても同じ結果が返されます。これは、関数呼び出し時に、引数heightには1.75、weightには65を渡すことを明示的に指定しているからです。

 このようにPowerShellでは、どの引数に何の値を渡すかを指定することで、引数の順番を変更することが可能です。

BMI
 BMI(ボディマス指数)は、体重と身長の関係から人の肥満度を表す指数です。
 BMIは 体重(kg)÷(身長(m)*身長(m)) で求めることができます。
 ちなみにBMI 25以上が肥満、22が標準、18以下がやせ です

switchパラメータ

 switchパラメータとは、その名の通りスイッチのような役割をする引数です。

PS > function Say-Hello ([switch]$help)
>> {
>> if ( $help )
>> {
>> Write-Host "これはSay-Hello関数の説明です"
>> }
>> else
>> {
>> Write-Host "Hello!!"
>> }
>> }

 この関数を、

PS > Say-Hello -help

 として呼び出すと、「これはSay-Hello関数の説明です」と表示されます。これは、関数Say-Helloにスイッチ-helpを指定すると、$helpにTrueの値がセットされるためです。

 このようにswitchパラメータは、引数に値を渡さずに、パラメータの指定によって処理内容を分岐させたいときに有効です。

まとめ

 今回は、次の内容について解説しました。

  • 関数の基礎
  • 引数の使い方
  • 戻り値
  • switchパラメータ

 今回の説明ではコンソールウィンドウで関数を作成しました。次回は関数をファイルとして作成し、利用する方法について解説したいと思います。

Windows PowerShell 入門(6)-関数編1的更多相关文章

  1. Windows PowerShell 入門(7)-関数編2

    この連載では.Microsoftが提供している新しいシェル.Windows Power Shellの使い方を解説します.前回に引き続きPowerShellにおける関数の取り扱いとして.変数と関数のスコ ...

  2. Windows PowerShell 入門(3)-スクリプト編

    これまでの記事 Windows PowerShell 入門(1)-基本操作編 Windows PowerShell 入門(2)-基本操作編 2 対象読者 Windows PowerShellでコマンド ...

  3. Windows PowerShell 入門(2)-基本操作編 2

    前回に引き続きMicrosoftが提供している新しいシェル.Windows Power Shellの基本操作方法を学びます.基本操作編第2弾の今回は.パイプの使用方法を中心としたコマンドレットの操作方 ...

  4. Windows PowerShell 入門(8)-関数編3

    この連載では.Microsoftが提供している新しいシェル.Windows PowerShellの使い方を解説します.今回は.フィルタ.スクリプトブロック.変数のスコープについて取り上げます. はじめ ...

  5. Windows PowerShell 入門(10)-デバッグ編

    対象読者 Windows PowerShellでコマンドレット操作ができる方 何らかのプログラミング経験があればなお良い 必要環境 Windows PowerShell デバッグメッセージの出力 Po ...

  6. Windows PowerShell 入門(9)-エラー編

    対象読者 Windows PowerShellでコマンドレット操作ができる方 何らかのプログラミング経験があればなお良い 必要環境 Windows PowerShell エラーをリダイレクトする リダ ...

  7. Windows PowerShell 入門(4)-変数と演算子

    Windows PowerShellにおける変数と演算子の使用方法について学びます.今回は代表的な演算子として.算術演算子.代入演算子.論理演算子.比較演算子.範囲演算子.置換演算子.ビット演算子.型 ...

  8. Windows PowerShell 入門(1)-基本操作編

    Microsoftが提供している新しいシェル.Windows Power Shellの基本操作方法を学びます.インストール.起動終了方法.コマンドレット.命名規則.エイリアス.操作方法の調べ方について ...

  9. Windows PowerShell 入門(5)-制御構文

    Windows PowerShellにおける制御構文について学びます.数ある制御構文の中でもSwitch文は.他の言語に比べ豊富な機能が用意されています. 対象読者 Windows PowerShel ...

随机推荐

  1. script weixin app / weixin xiao chen xu

    s 开发人员: 1.设置权限程序员管理人员-管理体验者-配置测试人员的真实微信号2.微信小程序的后台-上传体验版代码-生成体验码二维码测试人员: 1.你的台式机/笔记本申请内外网.有usb权限2.有W ...

  2. Nginx自定义404页面并返回404状态码

    Nginx定义404页面并返回404状态码, WebServer是nginx,直接告诉我应该他们配置了nginx的404错误页面,虽然请求不存在的资源可以成功返回404页面,但返回状态码确是200. ...

  3. I/O模型之二:Linux IO模式及 select、poll、epoll详解

    目录: <I/O模型之一:Unix的五种I/O模型> <I/O模型之二:Linux IO模式及 select.poll.epoll详解> <I/O模型之三:两种高性能 I ...

  4. React 记录(2)

    入门教程:https://www.reactjscn.com/tutorial/tutorial.html 慢慢学习:对照教程文档,逐句猜解,截图 React官网:https://reactjs.or ...

  5. Oracle了解(一)

    通常所说的Oracle数据库服务器由一个数据库和至少一个数据库实例组成. 数据库实例是由系统后台进程和分配的内存区域构成 实例你是提供服务的进程,数据库是存放的数据. 数据库是存储数据的文件 数据库实 ...

  6. 自学python 8.

    1.有如下文件,a1.txt,里面的内容为:LNH是最好的培训机构,全心全意为学生服务,只为学生未来,不为牟利.我说的都是真的.哈哈分别完成以下的功能:a,将原文件全部读出来并打印.b,在原文件后面追 ...

  7. javascript在计算浮点数(小数)不准确,解决方案

    方案来自网络,实现简单,便于做加减乘除使用,由于项目临时要用记录下 如需要更加复杂的计算类库,可以考虑 math.js等知名类库 /** * floatTool 包含加减乘除四个方法,能确保浮点数运算 ...

  8. ajax方式下载文件

    在web项目中需要下载文件,由于传递的参数比较多(通过参数在服务器端动态下载指定文件),所以希望使用post方式传递参数.通常,在web前端需要下载文件,都是通过指定<a>标签的href属 ...

  9. Spring Bean的ref属性和IoC注入集合

    这是一个Demo 1.Phone.java package com.cn.pojo; public class Phone { private String name; private double ...

  10. Kettle系列: kettle标准化trans模板

    =============================主控trans + sub trans 模式=============================针对一个具体的处理任务(比如增量加载一个 ...