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 のコンテキストメニューには[管理者権限で実行する]コマンドはないんだな。バッチファイルならあるのに。
――というわけで、スクリプトをキックするためのバッチファイルも書いた。
@powershell -NoProfile -ExecutionPolicy RemoteSigned -File "C:\Users\Hideto\OneDrive\Initialize.ps1"
Surface 3 を初期化してテストした後に、デスクトップ PC でも試してみたのだけど、choco install -y dropbox
が失敗して面倒くさいことになった*1以外は、割とスムーズにいった。
実は以前からところどころを自動化していたのだけど、ちゃんとメンテナンスすればいろいろ楽になるかなーと思った。Windows ストアからのインストールもコマンドでできたらいいんだけど……かつて「OneGet」で Windows ストアをプロバイダーにできるようになるとか聞いた覚えがあるんだが、どうなったんだろう。
*1:利用したバージョンのオフラインインストーラーがどうにも動かない。Web インストーラーをダウンロード&実行して解決