hakeの日記

Windows環境でプログラミングの勉強をしています。

2016-12-01から1ヶ月間の記事一覧

PowerShell - 関数(値渡しと参照渡し)

参照渡しの場合、呼び出し側の引数に[ref]をつける、また引数に括弧がないとエラーになった。 関数定義の仮引数の[ref]は無くても良い、関数内では仮引数のValueプロパティにアクセスする。 # 値渡し function byVal($arg){ $arg = "Good Bye" Write-Host "i…

PowerShell - 関数(パイプ)

パイプで渡されるてくるデータの処理用の関数。 開始処理はbeginブロック、終了処理はendブロック、渡されてくるデータの処理はprocessブロックに記述する。渡されてきたデータは変数$_に格納されている。 returnで値を返すと関数の出力になる。 even.ps1 fu…

PowerShell - 関数(可変長引数)

引数は変数$argsという配列にわたされる。 test.ps1 function foo { $args.GetType() foreach( $i in $args ) { Write-Host $i } } 結果 PS C:\> . C:\test.ps1 # 関数読み込み PS C:\> foo 1 2 3 IsPublic IsSerial Name BaseType -------- -------- ---- -…

PowerShell - 再帰関数

function fact($i) { if($i -eq 0) { return 1 } else { return $i * (fact ($i - 1)) } } fact 5 # 120 2017/1/28追記 再帰回数に限界がある模様 Win10 PowerShell 5.1の環境で、以下の関数fooの引数が1000の場合は正常終了しましたが、5000の場合はエラー…

PowerShell - 文字列

変数展開 PS C:\> $a = "Hello " PS C:\> "${a} world" # " "で囲まれた中の変数は展開される Hello world PS C:\> '${a} world' # ' 'で囲まれた中の変数は展開されない ${a} world 部分式 PS C:\> $a = 100 PS C:\> "$($a + 1) is 101" 101 is 101 ヒアド…

PowerShell - 正規表現

match演算子 変数$Matchesでマッチした文字列を取得できる。要素0がマッチした文字列、要素1以降が部分マッチ(キャプチャ)された文字列になる。 ただし最初にマッチしたものしか得られないみたい。 PS C:\> "abcde" -match "(.)(.)" True PS C:\> $Matches…

PowerShell - 制御構造(条件分岐)

if if(条件){ 文 } elseif(条件){ 文 } else { 文 } switch switch($v){ 1 {文; break} 2 {文; break} ($_ -ge 3) {文; break} default {文; break} } # 正規表現 (-matchでないことに注意) $s = "abcd" switch -Regex($s){ "^a" {Write-Host 1;break} # aで…

PowerShell - 制御構造(ループ)

for for($i = 0; $i -lt 5; $i++){ Write-Host $i } 0 1 2 3 4 foreach foreach($i in (0..4)){ Write-Host $i } 0 1 2 3 4 while / do while $i = 0 while($i -lt 5){ Write-Host $i $i++ } 0 1 2 3 4 $i = 0 do { Write-Host $i $i++ }while($i -lt 5) 0 1…

PowerShell - データと変数の型

文字と数値が混ざった式は、左の型に合わせる? でにキャスト?すれば変換できるっぽい PS C:\> 1 + "1" 2 PS C:\> "1" + 1 11 PS C:\> [long]"1" + 1 2 変数の型 最初に使用するときに型の宣言をすれば、その型の変数になる。 使用をやめるときはRemove-Var…

PowerShell - ファイル/フォルダリストの取得

バージョン 5.1 PS C:\> Get-ChildItem -File PS C:\>Get-ChildItem -Directory バージョン 2.0 PSIsContainerプロパティ?がTrueならフォルダ、FalseならファイルなのでWhere-Objectで抽出する。 バージョン5.1でも使用可能。 PS C:\> Get-ChildItem | Wher…

PowerShell - テキストファイルの読み書き

書き込みはOut-Fileを使用する。文字列はパイプで渡すか、-InputObjectでオブジェクトを渡す。-Appendで追加書き込み。 読み込みはGet-Contentを使用する。各行毎の文字列の配列として変数に読み込まれる。ただし1行のみのファイルはStringになるため、GetTy…

PowerShell - 配列

代入 PS C:\> $ary = 1,2,3,4,5 PS C:\> $ary = 1 .. 5 PS C:\> $ary = @() #空配列 PS C:\> $ary = @(1,2,3,4,5) PS C:\> $ary = "abcdefg" -split "" # 1文字ずつに分割(前後に空文字の要素が入る) PS C:\> $ary = "abcdefg" -split "\B" # 1文字ずつに…

PowerShell - 連想配列

代入と参照 PS C:\> $h = @{"a" = 1; "b" = 2} PS C:\> $h["c"] = 3 PS C:\> $h Name Value ---- ----- c 3 a 1 b 2 PS C:\> $h["a"] 1 PS C:\> $h["z"] -eq $null # 存在しないキーでは$nullが返る True キーおよび値の配列取得 PS C:\> $ks = $h.Keys PS C…

PowerShell - 実行環境の設定、その他

次期のWindowsのアップデートでデフォルトがコマンドプロンプトからPowerShellに代わるそうなので学習開始です。 実行ポリシーの変更 デフォルトでは実行できなようになっている為、実行ポリシーを変更する必要がある。 一時的に変更してスクリプトを実行 コ…