facebook twitter hatena line email

Windows/powershell/クラス

提供: 初心者エンジニアの簡易メモ
2021年8月27日 (金) 18:31時点におけるAdmin (トーク | 投稿記録)による版 (クラスを別ファイルにする場合)

移動: 案内検索

サンプル(インスタンス生成)

HelloClass.ps1

class HelloClass {
    [string] hello() {
        return "Hello!!"
    }
    [void] test() {
        Write-Host "hoge"
    }
}
$helloObj = New-Object HelloClass
# $helloObj = [HelloClass]::new() #こちらでもよい
$helloObj.hello()
$helloObj.test() # hoge

参考:https://www.vwnet.jp/Windows/PowerShell/2017082401/PSv5Class06.htm

サンプル(コンストラクト)

HelloClass.ps1

class HelloClass {
    [string] $name
    HelloClass([string] $name) {
        Write-Host $name
        $this.name = $name
    }
    [string] hello() {
        return "Hello!! " + $this.name
    }
}
$helloObj = [HelloClass]::new("taro")
$helloObj.hello()

参考:https://www.vwnet.jp/Windows/PowerShell/2017082401/PSv5Class06.htm

サンプル静的クラス

HelloUtil.ps1

class HelloUtil {
    static [int] hello([int] $test) {
        return $test
    }
}
[HelloUtil]::hello(11)

ハッシュの値を返す

ハッシュの型はhashtableになる。

class HashClass {
    static [hashtable] load() {
        $hash = @{ Number = 1; Shape = "Square"; Color = "Blue"}
        return $hash
    }
}
$config1 = [IniClass]::load()
Write-Host $config1.number # 1

globalにしたデータは取得できない

class HashClass {
    static [hashtable] load() {
        $global.hash = @{ Number = 1; Shape = "Square"; Color = "Blue"}
        return $hash
    }
}
$hashData = [HashClass]::load()
> Unable to find type [HashClass].

staticメソッドからstaticメソッドを呼ぶ

呼べなかった。インスタンス生成したメソッドからstaticメソッドは呼べる

クラスを別ファイルにする場合

HelloClass.ps1

class HelloClass {
    [string] hello() {
        return "Hello!!"
    }
}

main.ps1

. ./HelloClass.ps1
$helloObj = New-Object HelloClass
$helloObj.hello()