だるろぐ

明日できることは、今日しない。

PowerShell:環境構築を(なるべく)自動化する

Windows 10 は[回復]オプションで割と簡単に初期化できるので、なんか調子悪くなったときは気軽にキレイサッパリにしているのだけど、そのあとの環境構築を毎回手動でやるのがいい加減かったるいので、できるだけスクリプトでできんもんかなーと考えてみた。

ウチは OS をわりとプレーンな状態で使う派なので、実はやることがそんなにないんだけど、それでも以下のことが必要っぽかった。

  • (データは OneDrive で同期する。スタンドアロンアプリもだいたい OneDrive で)
  • Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
  • chocolatey で必要なアプリをセットアップ
    • chocolatey で管理できない(するとかえって面倒)なものは OneDrive へ保存済みのインストーラーでセットアップ
  • シンボリックリンクを張る
    • Picture\Screenshots -> OneDrive\Screenshots(スクリーンショットを同期するため)

これだったら自分の PowerShell 力でもなんとかなると思った。

Write-Host "STEP 0: Set-ExecutionPolicy を RemoteSigned に書き換えます……"

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
Write-Host ""

Write-Host "STEP 1: chocolatey をセットアップしています……"

if (Test-Path "C:\ProgramData\chocolatey")
{
    Write-Host "すでにインストールされています。"
}
else
{
    iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
    # Get-PackageProvider -name chocolatey
    Write-Host "インストールが完了しました。"
}

Write-Host ""

Write-Host "STEP 2: ソフトウェアをインストールしています……"

choco install -y paint.net
choco install -y sizer
choco install -y dotnetcore-sdk  
choco install -y visualstudiocode 
choco install -y dropbox 
choco install -y vlc 

# Nullsoft Install System
Start-Process -FilePath "$Home\OneDrive\Apps\WinSnap_4.5.8-setup.exe" -ArgumentList "/S"
# Advanced Installer
Start-Process -FilePath "$Home\OneDrive\Apps\emed64_16.7.2.exe" -ArgumentList "/quiet"

Write-Host ""

Write-Host "STEP 3: シンボリックリンクを作成しています……"

Write-Host "Picture\Screenshots -> OneDrive\Screenshots"
Set-Location "$Home\Pictures"
Remove-Item "Screenshots"
New-Item -Type SymbolicLink -Path "Screenshots" -Value "$Home\OneDrive\Screenshots"

Write-Host ""

Write-Host "セットアップが終了しました。キーを押すと終了します。"
$host.UI.ReadLine()

このスクリプトを管理者権限で起動すればよいのだけど、PowerShell のコンテキストメニューには[管理者権限で実行する]コマンドはないんだな。バッチファイルならあるのに。

f:id:daruyanagi:20170517072412p:plain

――というわけで、スクリプトをキックするためのバッチファイルも書いた。

@powershell -NoProfile -ExecutionPolicy RemoteSigned -File "C:\Users\Hideto\OneDrive\Initialize.ps1"

f:id:daruyanagi:20170517072704p:plain

Surface 3 を初期化してテストした後に、デスクトップ PC でも試してみたのだけど、choco install -y dropbox が失敗して面倒くさいことになった*1以外は、割とスムーズにいった。

実は以前からところどころを自動化していたのだけど、ちゃんとメンテナンスすればいろいろ楽になるかなーと思った。Windows ストアからのインストールもコマンドでできたらいいんだけど……かつて「OneGet」で Windows ストアをプロバイダーにできるようになるとか聞いた覚えがあるんだが、どうなったんだろう。

*1:利用したバージョンのオフラインインストーラーがどうにも動かない。Web インストーラーをダウンロード&実行して解決