今回はPowerShellのスクリプト作成時に、自分がよく使うコードをTipsとして紹介します。
1.実行場所(カレントディレクトリ)をスクリプトのフォルダに指定
Set-Location -Path (Split-Path -Parent $MyInvocation.MyCommand.Path);
2.XML読込
$ConfigXmlPath = "D:\hoge\etc\ConfigHoge.xml"; $XMLConfig = [xml](Get-Content $ConfigXmlPath); foreach ($LogConfig in $XMLConfig.config.LogConfig) { } foreach ($HogeServiceConfig in $XMLConfig.config.HogeService) { } # 参照方法は $LogConfig.LogFol のように。下記なら"yyyyMMdd_Query.log"の文字列が生成される。 $TodayLogFileName = [string]::Join("", (Get-Date).ToString("yyyyMMdd"), $LogConfig.LogFileName);
xmlファイル(ConfigHoge.xml) <?xml version="1.0"?> <config> <LogConfig> <LogFol>D:\</LogFol> <LogFileName>_Query.log</LogFileName> </LogConfig> <HogeService> <PhpExePath>D:\app\php\php.exe</PhpExePath> <HogeProductFol>D:\hoge\laravelsite\</HogeProductFol> </HogeService> </config>
3.連想配列(string, string)定義、追加、抽出
$ArrString = @{ }; $ArrString.Add( "Mysql", $MysqlMessage ); $ArrString.GetEnumerator() | Where-Object { $_.Value -eq "だめぽよ" } | ForEach-Object { $Message = "今夜は" + $_.Key + "が、" + $_.Value + "<br />" }
4.簡単なクラスの扱い方
.("./class/Class_Yomikomare.ps1"); # スクリプト冒頭で読込 $Yomikomare = New-Object YomikomareClass($ValueForConstructor); #インスタンス化、コンストラクタへ変数渡す $ResultValue = $Yomikomare.StartHoge(); # クラスメソッド実行
5.ファイルコピー等
if ((Test-Path $this.FilePath) -eq $false) { # ファイルパスにファイルが存在しないなら New-Item $this.FilePath; # ファイル作成 icacls $this.FilePath /grant Everyone:F; # Everyone権限付与 }
6.Y秒間ごとにX回繰り返し
$maxrepeat = 30 # X回 do { $Status = $this.IsMentananceMode_Larvel() # クラスメソッドなど判定を行える変数を返せるメソッド等 $maxrepeat-- # 繰り返しを進める Start-Sleep -Milliseconds 1000 # Y秒間sleepする } until ($Status -eq $false -or $maxRepeat -eq 0) # 変数の状態と回数をチェックし、どちらかの条件にtrueになるまで続ける
6.Webリクエスト定型(Getのみ最小限)
try { $Response = Invoke-WebRequest -Uri $WebURL -Method Get $StatusCode = $Response.StatusCode } catch { $StatusCode = $error[0].Exception.Response.StatusCode.value__ }
7.タスクスケジューラ起動
$TaskName = "Honyararatask"; if (((Get-ScheduledTask -TaskName $TaskName).State) -ne "Running") { try { Get-ScheduledTask -TaskName $TaskName | Start-ScheduledTask } catch { return $_.Exception } }
とりまこんなところで!