2018年2月9日金曜日

2018年2月7日水曜日

Windows7大量展開メモ

WIMイメージ適用手順
1.      新規セットアップ用PCを準備し、標準イメージが格納されている外付けHDDを接続
2.      PCの電源を投入し、WinPEメディアを挿入
3.      「DVD(もしくはCD)よりブートする」メニューが表示されたら、「Enter」キーをクリック
4.      WinPE起動画面が表示されるので、しばらく待つ
5.      WinPEから以下コマンドで外付けHDDのドライブレターを確認
> Diskpart
> List volume
6.      確認したドライブレターをメモし、「exit」で「Dsskpart」を抜ける
7.      WinPEより以下コマンドでPCのHDDを初期化
> Diskpart /s  <外付けHDDのドライブレター>:\DP.txt
例:外付けHDDのドライブレターが「F」の場合、「Diskpart /s F:\DP.txt」
※上記コマンドを実施すると、PCの内蔵HDDのデータが全部消える

8.      WinPEより以下コマンドでイメージの適用を開始
> Imagex /apply /verify <保存先パス>\<適用イメージ名>.wim <イメージ番号> <適用先レータ番号>:
例:「Imagex /apply /verify F:\Windows7x86.wim 1 D:」

9.      イメージの適用が始まるので、10~30分程待つ。
※PCスペック、イメージ容量などにより適用時間が異なる。

10.    以下の文字が表示され、正常にイメージが適用出来たことを確認する。
  Progress:100%
      Successfully applied image.
      > x:\windows\system32

11.    以下コマンドでシステムブートドライブを明示的に指定
> D:\Windows\System32\bcdboot.exe D:\Windows
※CはTPM用なので

12.    以下コマンドでPCをシャットダウン
> wpeutil shutdown

13.    PCの電源を投入しイメージが適用されたことを確認

※DP.txtの例
select disk 0
clean
create partition primary size=100
select partition 1
format label ="システム予約済み" quick
assign letter C
active
create partition primary
select partition 2
format quick
assign letter D
list volume

2018年2月6日火曜日

Windowsタスクスケジューラの実行結果監視スクリプト

タスクスケジューラの実行結果をPowershellで監視しているので、メモ代わりに残す。

◆PSファイルの中身
# ローカルマシン上有効なタスクを取得し、指定ファイルに書き込む
  $OutPut = "C:\BatFolder\TaskResultchecker\tasklist.csv"
  $OutPut2 = "C:\BatFolder\TaskResultchecker\temp.txt"
Function gettasks()
{
  "HOST,TASKNAME,RUNTIME,RESULT" | Out-File $output -encoding default

  $Tasks = schtasks.exe /query /V /FO CSV | ConvertFrom-Csv | Where { $_."ユーザーとして実行" -Like "(特定アカウントでの実行されるタスクをフィルタ)" }
  ForEach ($Task in $Tasks) {
    If ($Task."実行するタスク" -match "TaskResultchecker"){
        #自分のタスクは除く
        continue
  }
   $HostName = $Task."ホスト名"
   $BeforeRunTime = $Task."前回の実行時刻"
   $TaskName = $Task."タスク名".SubString(1)
   $BeforeResult = $Task."前回の結果"
   "$HostName,$TaskName,$BeforeRunTime,$BeforeResult" | Out-File $OutPut -append -encoding default
  }
}

# -----------------------------
# 実行結果、戻り値1以上の場合メール送信
# -----------------------------

  $now = Get-Date -F F
 
  #システムよりデータ抽出処理
  gettasks
 
  $task1 = ""
  $task1 = Get-Content $OutPut | ConvertFrom-CSV | where {$_.RESULT -gt 0}

  if($task1 -ne $null){
$task2 = Get-Content $OutPut | ConvertFrom-CSV | where {$_.RESULT -gt 0} > $OutPut2
# メール送信処理開始
$subject = "タスク実行異常"
$body = "確認時刻 --" + $now
$body = $body + [String]::Join("`r`n",(Get-Content $OutPut2))

# メール情報。宛先は;で複数指定可能
$smtp = "(smtpサーバIPアドレス Or ホスト名)" #SMTPサーバ(必須項目)
$from = "(送信元アドレス)" #送信元(必須項目)

# New-Opjectコマンドレットで.NETクラスをインスタンス化。
$mail = New-Object Net.Mail.MailMessage
$mail.From = $from
$mail.ReplyTo = $replyTo
$mail.Subject = $subject
$mail.Body = $body

# エンコーディング。System.Text.Encodingの静的メンバにアクセスするため::を用いている。
$mail.SubjectEncoding = [Text.Encoding]::GetEncoding("csISO2022JP")
$mail.BodyEncoding = [Text.Encoding]::GetEncoding("csISO2022JP")

# To設定。複数設定可能。
#$mail.To.Add("宛先")
$mail.To.Add("宛先メールアドレス")

#CC設定(必要があれば)
# $mail.CC.Add("CC")
# ReplyTo設定。設定なしも可。
#if($replyTo -ne ""){ $mail.ReplyTo = $replyTo }

# 添付ファイル
$temp = New-Object Net.Mail.Attachment($OutPut)
      $mail.Attachments.Add($temp);

# New-Opjectコマンドレットで.NETクラスをインスタンス化。
$sc = New-Object Net.Mail.SmtpClient($smtp)
# 送信。
$sc.Send($mail)
$mail.Dispose() 
Remove-Item $OutPut2
  }
  #if($task1 -eq $null)
  # {
  # exit
  # }
  #else
  # {

 # }

◆PSファイルをキックするためのBATファイル
powershell.exe -executionPolicy RemoteSigned -F C:\BatFolder\TaskResultchecker\schmoniter.ps1