【Powershell/コマンド】AD関連

### Microsoft資料
[dsadd](https://learn.microsoft.com/ja-jp/previous-versions/windows/it-pro/windows-server-2012-r2-and-2012/cc753708(v=ws.11))
[csvde](https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-r2-and-2012/cc732101(v=ws.11))
[dsquery](https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-r2-and-2012/cc732952(v=ws.11))

### メモ
```bat:cmd
REM　dsadd user でADユーザー登録時に複数グループを紐付ける場合、グループは半角スペースで区切る
dsadd user "CN=ユーザー名,OU=xxx,DC=ドメイン名,DC=co,DC=jp" -memberof "CN=グループ1,OU=xxx,DC=ドメイン名,DC=co,DC=jp" "CN=グループ2,OU=xxx,DC=ドメイン名,DC=co,DC=jp" 

```

### OU取得
```bat:cmd
REM OU取得（limit 0 で全件取得、デフォルトは100件）
dsquery ou -name *
dsquery ou -name OU名
dsquery ou -limit 0 "OU=OU名,OU=OU名,DC=ドメイン名,DC=co,DC=jp"
```

### OU作成
```bat:cmd
dsadd ou "OU=OU名,OU=OU名,DC=ドメイン名,DC=co,DC=jp"
```

### OUとGPOをリンクさせる
```powershell:Powershell
# -Enforced YES で GPOの適用を強制
New-GPLink -Name "GPO名" -Enforced YES -Target "OU=OU名,OU=OU名,DC=ドメイン名,DC=co,DC=jp"
```

### ADオブジェクト取得
```bat:cmd
REM ユーザー一覧
csvde -m -u -f OUTPUT.csv -r objectClass=organizationalPerson -n

REM OU一覧
csvde -m -u -f OUTPUT.csv -r objectClass=organizationalUnit -n

REM グループ一覧
csvde -u -f export.csv -r objectCategory=group

REM ユーザー一覧
csvde -u -f export.csv -r objectCategory=user

REM （参考）インポート
csvde -i -u -f "C:\export.csv"

```

```powershell:Powershell
# ユーザー一覧
Get-ADObject -LDAPFilter "(objectClass=organizationalPerson)" -Propertie * | Export-Csv output.csv -Encoding Default

# OU一覧
Get-ADObject -LDAPFilter "(objectClass=organizationalUnit)" -Properties * | Export-Csv output-ou.csv -Encoding Default
Get-ADObject -Filter 'ObjectClass -eq "organizationalUnit"' -Properties * | Export-Csv output-ou.csv -Encoding Default

```

### ADコンピューター取得
```powershell:Powershell
Get-ADComputer -Filter * -SearchBase "OU=xxx,OU=Clients,DC=ドメイン,DC=co,DC=jp" | fl
Get-ADComputer -Filter "Name -eq 'computerName'" | fl
Get-ADComputer -Filter "Name -like '*computerName*'" | fl
```


### ADユーザー一覧取得
```powershell:Powershell
# ユーザーを指定して抽出
Get-ADUser -Properties * -Filter * | Where-Object{$_.sAMAccountName -eq 'XXXXXX'}

# CSVファイル出力
$path = [Environment]::GetFolderPath('Desktop') + "\ADUserListt.csv"
Get-ADUser -Properties * -Filter * | Export-Csv -Path $path -Encoding Default
Get-ADUser -Properties * -Filter * | Select-Object Company,Department,SamAccountName,CN,UserPrincipalName,DisplayName,Description,physicalDeliveryOfficeName,DistinguishedName,@{Label="Group";Expression={$_.MemberOf -join "`n"}},Created,PasswordExpired,PasswordNeverExpires,Enabled | Sort-Object SamAccountName | Export-Csv -Path $path -Encoding Default
```

### ADユーザー登録
``` bat:cmd
REM パスワード有効期限あり（既定値）
dsadd user "CN=ユーザーID,OU=OU名,OU=Users,DC=ドメイン,DC=co,DC=jp" -samid ユーザーID -display 表示名 -upn ユーザーID@xxx.co.jp -pwd パスワード

REM パスワード有効期限なし
dsadd user "CN=ユーザーID,OU=OU名,OU=Users,DC=ドメイン,DC=co,DC=jp" -samid ユーザーID -display 表示名 -upn ユーザーID@sxxx.co.jp -pwd パスワード -acctexpires never -pwdneverexpires yes
```

```powershell:powershell
New-ADUser  -UserPrincipalName "○○○@xxxx.co.jp" `
            -SamAccountName "○○○" `
            -Name "○○○ ●●●" `
            -DisplayName "○○○ ●●●" `
            -Surname "○○○" `
            -GivenName "●●●" `
            -Path "OU=OU名,DC=ドメイン名,DC=co,DC=jp" `
            -AccountExpirationDate $true `
            -PasswordNeverExpires $true `
            -Enabled $true `
            -AccountPassword(ConvertTo-SecureString -AsPlainText "パスワード" -Force)
```

### ADグループ登録
``` bat:cmd
dsadd group "CN=グループ名,OU=OU名,DC=ドメイン,DC=co,DC=jp"
```
``` bat:powershell
New-ADGroup -Name グループ名 -Path "OU=OC,DC=ドメイン,DC=co,DC=jp" -Description "説明"
```

### ADグループにリンクされているユーザー一覧
``` bat:cmd
dsquery group -name "グループ名" | dsget group -members > 出力先.txt
```

### ADユーザーとグループを紐付け
``` powershell:powershell
Add-ADGroupMember -Identity グループ名 -Members ユーザーID
```

### ADユーザーとグループを紐付け解除
``` powershell:powershell
Remove-ADGroupMember -Identity グループ名 -Members ユーザーID
```

### ADユーザー削除
``` powershell:powershell
# 確認メッセージ表示される
Remove-ADUser -Identity ユーザーID

# 確認メッセージ表示されずに削除
Remove-ADUser -Identity ユーザーID -Confirm:$false
```

### 一定期間ログインしていないアカウント特定
``` powershell:powershell
# 2010年1月20日以後にログオンしていないアカウントを取得する
Search-ADAccount -AccountInactive -DateTime "1/20/2010"

# 2010年1月20日以後にログオンしていないユーザーアカウントを取得する
Search-ADAccount -AccountInactive -DateTime "1/20/2010" -UsersOnly

# 2010年1月20日以後にログオンしていないコンピューターアカウントを取得する
Search-ADAccount -AccountInactive -DateTime "1/20/2010" -ComputersOnly
```

### AD　CN名変更
``` bat:cmd
dsmove "CN=現在のCN名,OU=OU名,OU=Users,DC=ドメイン,DC=co,DC=jp" -newname "新しいCN名"
```

### AD プロパティ値変更
``` powershell:powershell
# 会社名、部署名、説明変更
Set-ADUser -Identity "ユーザーID" -Company "会社名" -Department "部署名" -Description "説明文"

# CSVでインポート（属性：EmployeeID、mailなどはインスタンスで更新）
Import-Csv -Path "import.csv" `
| foreach {`
	$adusr=Get-ADUser -Identity $_.SamAccountName; `
	$adusr.EmployeeID=$_.EmployeeID; `
	$adusr.mail=$_.mail;`
	Set-ADUser -Instance $adusr; }

# 属性EmployeeIDを空欄にする
Set-ADUser  -Identity "xxxx" -Clear EmployeeID

```

### SYSVOLレプリケーション確認
```bat:cmd
REM:結果が返ってくればFRS
dsquery * "CN=Domain System Volume (SYSVOL share),CN=File Replication Service,CN=System,DC=<ドメイン名>,DC=co,DC=jp" -scope base

REM:結果が返ってくればDFSR
dsquery * "CN=Domain System Volume,CN=DFSR-GlobalSettings,CN=System,DC=<ドメイン名>,DC=co,DC=jp" -scope base

```

### フォレスト機能レベルの確認
```bat:cmd
dsquery * "CN=Partitions,CN=Configuration,DC=<ドメイン名>,DC=co,DC=jp" -scope base -attr msDS-Behavior-Version
```
```powershell:powershell
Get-ADForest | fl Name,ForestMode
```

### ドメインの機能レベルの確認
```bat:cmd
dsquery * "DC=<ドメイン名>,DC=co,DC=jp" -scope base -attr msDS-Behavior-Version ntMixedDomain
```
```powershell:powershell
Get-ADDomain | fl Name,DomainMode
```

|msDS-Behavior-version|ntMixedDomain|機能レベル|
|---|---|---|
|0|0|Windows 2000 Native|
|0|1|Windows 2000 Mixed|
|2|0|Windows 2003|
|3|0|Windows 2008|
|4|0|Windows 2008 R2|
|5|0|Windows 2012|
|6|0|Windows 2012 R2|
|7|0|Windows 2016|

参考：https://bizlog.tech/ad-ds-version-command/
　　　https://jpwinsup.github.io/blog/2023/04/24/ActiveDirectory/FunctionalLevel/impact-of-updating-functionallevel/

### AD複製確認
```bat:cmd
repadmin /replsummary
repadmin /showrepl /repsto
```

### FSMO役割保持サーバー確認
``` powershell:cmd、powershell
netdom /query fsmo
```

### FSMO役割を別のDCへ転送
``` powershell:cmd、powershell
#---------------------------------#
# 転送先サーバーへ接続
#---------------------------------#
PS C:\Users\Admi> ntdsutil
C:\Windows\system32\ntdsutil.exe: roles
fsmo maintenance: connections
server connections:connect to server 転送先ＤＣ(例：xxxx.local.domain)
server connections: quit

#---------------------------------#
# 名前付けマスタの転送
#---------------------------------#
# 通常
Transfer naming master

# 強制
seize naming master

#---------------------------------#
# インフラストラクチャマスタの転送
#---------------------------------#
# 通常
Transfer infrastructure master

# 強制
seize infrastructure master

#---------------------------------#
# PDCの転送
#---------------------------------#
# 通常
Transfer PDC

# 強制
seize PDC

#---------------------------------#
# RIDの転送
#---------------------------------#
# 通常
Transfer RID master

# 強制
seize Transfer RID master


#---------------------------------#
# スキーママスタの転送
#---------------------------------#
# 通常
Transfer schema master

# 強制
seize schema master

```