面倒なWindows Server OS設定を一部自動化してみた

# 本記事の目的
業務でWindows Serverの構築及び設定をすることが多くなってきましたので、一部の設定をGUIでなくPower Shellで実施する方法をまとめます
設定項目は以下となります
・サービス
・役割と機能
・レジストリ

可能な限りコマンドで設定値を変更することで、ミスの削減につながれば良いと思っております
今回実施した環境は**Windows Server 2012** となります。



#### サービス

サービス一覧を取得する場合は、以下のコマンドになります
```powershell.
PS> Get-Service 
```
サービスによっては長くなっていることがあるので、[Format-table]コマンドを併用することで、より見やすくすることができます

```powershell.
PS> Get-Service | Format-Table -AutoSize
```
特定のサービスについては、[-Name]オプションを使用します

```powershell.
PS> Get-Service -Name <サービス名> | Format-Table -AutoSize
```
その他詳細については、以下リンクを参照ください

https://4thsight.xyz/19380

今回は、**AJRouterというサービスのスタートアップの状態を変更**してみます

```
PS C:\Users\Administrator> Get-Service -Name AJRouter

Status   Name               DisplayName
------   ----               -----------
Stopped  AJRouter           AllJoyn Router Service

PS C:\Users\Administrator> Set-Service -Name AJRouter -startupType Manual
PS C:\Users\Administrator> Set-Service -Name AJRouter -startupType Automatic
```
以下は実際のAJRouterの設定です
上記のコマンドで実施したように、[StartupTpye]がAutomaticに設定されています
![スクリーンショット 2022-11-20 13.22.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2666121/397720e7-3f98-edc4-bca8-c4a4fb72a0be.png)

以下は、[Set-Service -Name AJRouter -startupType Automatic]を実施した後です。
そのため[startupTpye]がAutomaticに設定されています
![スクリーンショット 2022-11-20 13.22.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2666121/3c9d3c58-541c-f525-455f-abf30cca5ec9.png)


#### 役割と機能
次に[役割と機能]の設定方法を記載します

一覧の取得は以下のコマンドで実施できます

```powershell.
PS> Get-WindowsFeature
```

情報が多いので、インストール済みの役割と機能の名前のみ必要な場合は、以下コマンドで実施可能です

```powershell.
PS> Get-WindowsFeature | Where-object {$_.Installed -eq $True} | Format-List DisplayName
```
役割や機能をインストールする場合は、役割「IIS」のインストロールを例にとると、以下のコマンドで実施可能です
※役割「IIS」の内部名は``Web-Server``です

```powershell.
PS> Install-WindowsFeature -Name Web-Server
```

コマンド実行後は以下のように表示され、「Success」が「True」であるなら、インストールは成功です

```
Success Restart Needed Exit Code      Feature Result
------- -------------- ---------      --------------
True    No             Success        {Common HTTP Features, Default Document, D...
```
参考

https://learn.microsoft.com/ja-jp/windows-server/administration/server-manager/install-or-uninstall-roles-role-services-or-features#install-roles-role-services-and-features-by-using-windows-powershell-cmdlets

https://dev.classmethod.jp/articles/some-ways-to-install-windows-roles-and-features/



#### レジストリ

最後にレジストリの設定方法についてまとめます
主なコマンドは三つあります

・``reg query``
・``reg add``
・``reg delete``

今回は「Windows で通常使うプリンターを管理する」という設定を、上記コマンドを使用して設定変更する、というシナリオで進めていきます

![スクリーンショット 2022-11-20 21.44.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2666121/4d8f058a-0020-8f46-9d19-f10f29eb9ef9.png)

まずは現状の設定を``reg query``コマンドで確認します
コマンドは
reg query “パス” /v “名前”ですので、以下のようになります

```powershell.
PS> reg query “HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows” /v “LegacyDefaultPrinterMode”
```

すると以下のような結果が返ってきます

```powershell.
HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows
    LegacyDefaultPrinterMode    REG_DWORD    0x1
```
次は実際に値を変えてみます
コマンドは
・reg add “パス” /v “名前” /t “種類” /d “データ” (/f)
で実行可能です
※(/f)をつけることで、ユーザの同意を求めず変更が可能です

```powershell.
PS> reg add “HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows” /v LegacyDefaultPrinterMode /t “REG_DWORD” /d “0” /f
The operation completed successfully.
```

実際に``reg query``コマンドで結果を確認すると、確かにデータが変更されていることがわかります

```powershell.
PS >reg query “HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows” /v “LegacyDefaultPrinterMode”

HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows
    LegacyDefaultPrinterMode    REG_DWORD    0x0
```
https://oozappase.com/windows/regcommand/

# 終わりに
今回まとめた
・サービス
・役割と機能
・レジストリ

これらは、GUIで設定すると恐ろしく時間がかかり、ミスにもつながります
ミスをしないように注意を払うことは大切ですが、**ミスをしない努力をすること**より**ミスをしない環境を作ることに努める**ほうがより確実だと思います

せっかくエンジニアとして働かせてもらっているので、**自動化できるところは自動化し、可能な限りヒューマンエラーを減らす努力**を、今後とも続けていきたいと思います