PowerShellでActiveDirectory管理をラクしよう

#前提条件
・WindowsServer2012R2
・PowerShell2.0
・ドメイン名：contoso.local
・利用ユーザ：Domain Adminsグループのユーザ

##実施前後の証跡（2018/7/19更新）
LinuxやNW機器でよく使うTeraTerm。あれの操作ログ保存機能がPowerShellにもあります。

###コマンド実行結果のログ取得開始（2018/7/19更新）

```powershell
Start-Transcript ログ保存先パス\ログファイル名.log
```

.logとしていますが、.txtでもなんでもいいです。

###コマンド実行結果のログ取得終了（2018/7/19更新）

```powershell
Stop-Transcript
```

作業が終わったら以上を打ってログ取得を終了します。


##参照、確認系コマンド
###OUの確認
```powershell

Get-ADOrganizationalUnit
```
これだけはでは見やすさがない結果が出るので、Select-Objectなどをパイプさせて組み合わせると見やすい。個人的によく使うのは以下。

```powershell
Get-ADOrganizationalUnit -filter "*" | Select-Object {$_.name, $_.DistinguishedName}
```

###ADユーザーの確認
```powershell

Get-ADUser

```
これもSelect-Objectでパイプさせる。

```powershell
Get-ADUser -filter * | Select-Object {$_.name, $_.DistinguishedName}
```
必要に応じて{}内の引数を足すと便利。

###ADコンピュータオブジェクトの確認
```powershell
Get-ADComputer
```
例のごとくフィルター。

```powershell
Get-ADComputer -filter * | Select-Object {$_.name, $_.DistinguishedName}
```

###グループポリシーオブジェクトの確認
どのようなグループポリシーが存在しているか、までを確認する。ポリシーの中身は関知しないコマンドである。

```powershell
Get-GPO -All
```

###DNSレコード関連
Aレコード（前方参照）確認。

```powershell
Get-DnsServerResourceRecord -ZoneName "contoso.local" -RRType "A"
```

逆引き参照ゾーンの内容確認。

```powershell
Get-DnsServerResourceRecord -ZoneName XXX.XXX.XXX.in-addr.arpa -RRType PTR
```

###レプリケーション確認(2018/7/19更新)
複数のADサーバがあり、冗長構成かつレプリケーション構成をしている場合に、双方の同期を確認するコマンド。(厳密に書くとPowerShellでないんだけど・・・cmdでもできる・・・)

```powershell
repadmin /showrepl
```



##追加、更新系コマンド
###OU追加
GUIで作成するのもありだが、大量にOUを作るのは不便。そこで以下コマンドを利用する。

```powershell
New-ADOrganizationalUnit
```
以下はこのようなOUを作るとき。
既存OU構成(上位OUから) ：OUComputer\Sales\CompanySales\
新規作成OU　　　　　　 ：OUComputer\Sales\CompanySales\section1

```powershell
New-ADOrganizationalUnit -Name section1 -Path "OU=CompanySales,OU=Sales,OU=OUComputer,DC=contoso,DC=local"
```

###ドメインユーザーのパスワード無期限(2018/7/20更新)
有効期限を設けているドメインユーザーでは問題ない。しかしサービスアカウントなどのドメインユーザーで、パスワード有効期限を不要とする場合、問題が発生する。
1ドメインユーザーに対してであれば、GUIで実施してもよいが、複数（数十～百以上）のユーザーが対象だと大変。以下コマンドでシンプルに変更できる。

```powershell
Set-ADUser
```

例。
パスワードを無期限にしたいドメインユーザー名：TestUser001

```powershell
Set-ADUser -Identity TestUser001 -PasswordNeverExpires $True
```

###DNS参照ゾーンの追加(2018/7/19更新)
「逆引き参照ゾーン」を作成する。
[link2]:https://www.rem-system.com/post-703/#i-4
[Active Directoryをインストールした後に、必要なDNSの逆引きを設定する：Rem System Techlog][link2]
以上リンク先手順のCLI化が以下となる。ちなみにDNSはActiveDirectory統合環境を想定。

```powershell
Add-DnsServerPrimaryZone -NetworkID ***.***.***.0/24 -ReplicationScope Domain DynamicUpdate None
```
「***.***.***.0/24」は作成する逆引き参照ゾーンのネットワークID名。24bitサブネットマスクでの例となる。必要に応じて変更する。
以下のゾーンを追加する場合はこんな感じ。
ゾーン名：0.168.192.in-addr.arpa

```powershell
Add-DnsServerPrimaryZone -NetworkID 192.168.0.0/24 -ReplicationScope Domain DynamicUpdate None
```
以上の例では、動的更新の設定は無効に指定している(DynamicUpdate None)。
これも必要に応じてNone以外に指定可能。
ゾーンデータのレプリケート方法は「ドメイン」に指定。GUI手順と同様にフォレストなどに指定可能。

###DNSレコード追加(2018/7/19更新)
前方参照レコード(Aレコード)/逆引き参照レコード(PTRレコード)を同時に作成する。以下のレコードを追加する場合。
ホスト名：TESTSRV
IPアドレス：192.168.0.1

```powershell
Add-DnsServerResourceRecordA -ZoneName contoso.local -Name "TESTSRV" -IPv4Address "192.168.0.1" -CreatePtr
```
「-CreatePtr」オプションをつけなければ、文字通り前方参照レコードのみ作成する。

###レプリケーション(2018/7/19更新)
ActiveDirectoryを複数立てて同期させている環境の場合、コマンドにより同期を実施。(これも厳密に書くとPowerShellでないんだけど・・・w)
障害で同期されなかった場合などに使えます。
以下のような例、状況の場合。
同期元ADサーバホスト名：ADSRV01
同期先ADサーバホスト名：ADSRV02
　・同期元ADサーバホストADSRV01でなんらかの更新作業実施。
　・作業後、同期先ADSRV02が同期されていないことが発覚。
　⇒手動で同期をかけたい。

```powershell
repadmin /replicate ADSRV02 ADSRV01 DC=contoso,DC=local 
```

###グループポリシーの更新処理(2018/7/19更新)
グループポリシーの管理などで新規にGPOを作成、既存のGPOを変更。またはGPOを対象のOUにリンクした場合。以下コマンドをADサーバ上で実施する。

```powershell
gpupdate /force
```

ActiveDirectoryはけっこうおバカさんなので、GPOの反映に時間がかかる。そこでAD自身でgpupdateをかけてあげることで、グループポリシーの更新を手動でかけてあげる。

その他追記予定。

[link1]:https://www.youtube.com/watch?v=LsoLEjrDogU

[Bruno Mars-Finesse(Remix) Feat.Cardi B][link1]で締める。
カーディーBのカーディーは「バカルディ（酒）」からとったものらしい。ビバ90年代なサウンドがたまらないです。