Upgrade to Pro — share decks privately, control downloads, hide ads and more …

運用スクリプトの作り方

 運用スクリプトの作り方

Ryota Nakamura

November 16, 2019
Tweet

More Decks by Ryota Nakamura

Other Decks in Programming

Transcript

  1. 自己紹介 • もともとインフラ上がりのエンジニアです。 • Power Appsでゲーム作ったり、IoTと組み合わせたりとかしてます • 最近はPower PlatformやLogic AppsといったLow-Code関連だけ

    でなく、IoTとOffice365をうまく連携できないか試行錯誤 みたいなこともしてます。 R_t_A_n_M rnakamuramartiny 株式会社ソントレーゾ 取締役 最高技術責任者(CTO / Co-Founder) DX推進事業部 (DX OverDrive Business Dept.) 事業部長 ▪主催 Office 365 User Group 福岡支部 / IoT365 User Group ▪運営 JAPAN Power Apps User Group JAPAN Power Virtual Agents User Group ▪YouTube Martinysystem Channel 中村亮太 rnakamuramartiny rtanm
  2. 運用スクリプトとは?? 処理時間の算出や、異常時の原因追及など、様々な用途に使用する必要があるため 処理の実行開始と終了、異常時は何が起きたのかを、実行、エラーログとして必ず残す必要があります。 2019/11/21 23:47:57 DBメンテナンス処理を開始します 2019/11/21 23:47:57 DB再編成を行います 2019/11/22

    02:24:45 DB再編成が完了しました 2019/11/22 02:24:45 バックアップ処理を開始します 2019/11/22 03:12:23 バックアップ処理が完了しました 2019/11/22 03:12:23 DBメンテナンス処理が完了しました 2018/11/19 23:19:24 DBメンテナンス処理を開始します 2018/11/19 23:19:24 DB再編成を行います 2018/11/19 23:57:32 DB再編成が完了しました 2018/11/19 23:57:32 バックアップ処理を開始します 2018/11/20 00:23:13 バックアップ処理が完了しました 2018/11/20 00:23:13 DBメンテナンス処理が完了しました 2019/11/21 19:23:11 XXデータ取り込み処理を開始します 2019/11/21 19:23:11 XXデータファイルをチェックします 2019/11/21 19:23:56 XXデータファイルのチェックが完了しました 2019/11/21 19:23:56 XXデータインポート処理を開始します 2019/11/21 19:57:32 XXデータインポート処理に失敗しました(エラーコード447) 2019/11/21 19:57:32 XXデータ取り込み処理は異常終了しました。 このログでわかること このログでわかること 1年前に比べて処理に時間が かかっている データファイルのチェックは問題なかったが、 取り込みに失敗し、エラーコード447だった
  3. Windows の運用スクリプトでよく使われる言語 代表的なものは以下の3つです。 言語名 特徴 備考 バッチスクリプト Windows コマンドプロントで使用 可能なコマンドを使って作成する

    スクリプト あまり細かい制御はできない VBScript VBAによく似た言語。細かい制御 が可能で、PowerShellが実用的に なるまでは主にこちらを使用して いた。 クラウドサービスへの利用不可。 また今後なくなる可能性大。 PowerShell バッチスクリプトのような感覚で、 VBScriptのような柔軟な処理が作 成可能な言語。バージョンが上が るにつれ、どんどん拡張されてい る。 クラウドサービスへの利用可。ま た各種コマンドレットを追加使用 することで、コマンド拡張も可能。 Windows だけでなく、MacやLinux でも使用可能。
  4. 変数の宣言 変数は SET コマンドを使用する。 例1)nameという変数に文字列「XXX」を代入し、表示させる @echo off Set name=“XXX” echo

    %name% 例2)datedataという変数にdateコマンドの結果を代入し、表示させる @echo off for /F “usebackq delims=” %%a in (`date`) do set datedata=%%aEcho %name% echo %datedata%
  5. 条件分岐 ・If文 if 条件A ( 処理A ) else if 条件B

    ( 処理B ) else ( 処理C ) 条件Aに合致する場合は 処理Aを実行 条件Bに合致する場合は 処理Bを実行 それ以外は処理Cを実行 ・for文 for /l %%n in (1,2,10) do ( 処理D ) 変数nに2ずつ加算し 変数nが10になるまで 処理Dを実行する
  6. ファイル出力 特定のファイルに処理の結果を出力したいときに使用する ・コマンド名 > 出力ファイル名 ・コマンド名 >> 出力ファイル名 新規作成 追記書き

    標準出力や標準出力エラーが出た場合はこちらを使用する ・コマンド名 1 > 標準出力ファイル名 ・コマンド名 2 > 標準出力エラーファイル名
  7. コマンド PowerShellのコマンドは以下のような構成となっている Get-Command どうする なにを? Get : 取得 Set :

    設定 Add : 追加 New : 新規作成 Remove : 削除 Write : 書込/表示 Format : 整形
  8. 変数の宣言 変数は変数名に$をつけて宣言することができる。 例1)nameという変数に文字列「XXX」を代入し、表示させる $name=“XXX” Write-Host $name 例2)datedataという変数にget-dateコマンドの結果を代入し、表示させる $datedata=get-date Write-Host $datedata

    例3)valuesという変数に複数のデータを代入し、3番目のデータを表示させる $values=“データ1”, “データ2”, “データ3”, “データ4”, “データ5” Write-Host $values[2]
  9. カスタムオブジェクト スクリプト内で使用できる独自テーブルを宣言することができる Id Name Age 1 Tarou 20 2 Hanako

    25 3 Seiya 34 例)下記のようなテーブルを作成したい場合 $table = ( [pscustomobject]@{Id=1;name="Tarou";Age=20}, [pscustomobject]@{Id=2;name="Hanako";Age=25} ) $table += [pscustomobject]@{Id=3;name="Saiya";Age=34} 新規作成時 レコード追加時
  10. 比較演算子 比較演算は以下のように指定する必要がある PowerShell C言語など 意味・使い方 -eq == 等しい -ne !=

    等しくない -gt > より大きい -ge >= 以上 -lt < より小さい -le <= 以下 -like なし ワイルドカードより前(もしくは後)と一致 -like “Power*” -notlike なし ワイルドカードより前(もしくは後)と不一致 -notlike “*Shell” -match なし 正規表現で検索し一致 -match “[a-z]Power” -notmatch なし 正規表現で検索し不一致 -notmatch “[a-z]Power”
  11. 条件分岐 ・If文 if (条件A) { 処理A } elseif (条件B) {

    処理B } else { 処理C } 条件Aに合致する場合は 処理Aを実行 条件Bに合致する場合は 処理Bを実行 それ以外は処理Cを実行 ・for文 for ($i = 0; $i -lt 10 ; $i++) { 処理D } 変数iに1ずつ加算し 変数iが10より小さいときは 処理Dを実行する
  12. 条件分岐 ・while文 $i = 0 while ($i -le 10) {

    処理E $i++ } ・Do While文 変数iが10以下のときは 処理Eを実行し、変数iを 1加算する $i = 0 do { 処理F $i++ } ($i -lt 10) 処理Fを実行し、変数iを 1加算する。 変数iが10より小さいときは 繰り返す
  13. 条件分岐 ・foreach文 $day = 1,2,3,4,5,6 Foreach ($d in $day) {

    処理G } 配列変数 day にある値を 1つ取りだし、$dに格納した のち、処理Gを実行する 配列変数内の値の数だけ 繰り返す
  14. 処理したいサーバーに認証が求められる PowerCLIとかよくありますよね。処理を実行する前に必ず認証を求められるパターン。 その時は以下のようにするとよいです。 1.パスワードファイルの作成 $Cred = Get-Credential ユーザー名と パスワードを入力 $Cred.Password

    | ConvertFrom- SecureString | Out-File パスワードファイルフ ルパス 2.パスワード平文取出 $secpass = Get-Content パスワードファイルフルパス | ConvertTo-SecureString $BSTR=[System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($secpass) $Password = [System.Runtime.InteropServices.Marshal]::PtrToStringBSTR($BSTR) ※上記はすべて同じユーザーで実施する必要がある。