【Powershell】(Tips集)PowerShellよく使うコードの紹介

今回は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
    }
}


とりまこんなところで!