Warning: preg_match(): Compilation failed: unrecognized character follows \ at offset 1 in /home/r5652521/public_html/soma-engineering.com/wp-content/themes/affinger/functions.php on line 1548
Warning: preg_match(): Compilation failed: unrecognized character follows \ at offset 1 in /home/r5652521/public_html/soma-engineering.com/wp-content/themes/affinger/functions.php on line 1548
Warning: preg_match(): Compilation failed: unrecognized character follows \ at offset 1 in /home/r5652521/public_html/soma-engineering.com/wp-content/themes/affinger/functions.php on line 1548
Warning: preg_match(): Compilation failed: unrecognized character follows \ at offset 1 in /home/r5652521/public_html/soma-engineering.com/wp-content/themes/affinger/functions.php on line 1548
Warning: preg_match(): Compilation failed: unrecognized character follows \ at offset 1 in /home/r5652521/public_html/soma-engineering.com/wp-content/themes/affinger/functions.php on line 1548
Warning: preg_match(): Compilation failed: unrecognized character follows \ at offset 1 in /home/r5652521/public_html/soma-engineering.com/wp-content/themes/affinger/functions.php on line 1548
Warning: preg_match(): Compilation failed: unrecognized character follows \ at offset 1 in /home/r5652521/public_html/soma-engineering.com/wp-content/themes/affinger/functions.php on line 1548
Warning: preg_match(): Compilation failed: unrecognized character follows \ at offset 1 in /home/r5652521/public_html/soma-engineering.com/wp-content/themes/affinger/functions.php on line 1548
Warning: preg_match(): Compilation failed: unrecognized character follows \ at offset 1 in /home/r5652521/public_html/soma-engineering.com/wp-content/themes/affinger/functions.php on line 1548
こんにちは!そーまんです。
今回は、PowerShell を使い、ユーザーアカウントを管理(作成・移動・無効・グループに追加など)をする方法について書きました。
ユーザーを作成する
まず、AD のユーザーアカウントを作成するコマンドレットは New-ADUser になります。コマンドの詳細については以下のリンク先が参考になりました。
New-ADUserコマンド | POWERSHELL FROM JAPAN!! BLOG
アカウント名と OU の指定
ユーザーアカウントを作成する OU を指定する場合は、-Path オプションを付けて、OU を指定します。
ここでは単純にユーザーアカウント名と OU を指定してアカウントを作成します。
1 |
New-ADUser labuser01 -Path "OU=Sales,DC=soma-engineering,DC=local" |
パスワードの指定とアカウントの有効化
上記コマンドでアカウントを作成した後には、ユーザーアカウントが無効の状態になっています。これを有効化にするには以下のようにパスワードの指定とアカウントを有効化するオプションを使います。
パスワードの指定は、-AccountPassword オプションを使います。またアカウント有効化は、-Enabled オプションを使います。また、パスワードは平文では保存できないので、ConvertTo-SecureString を使って文字列を暗号化します。
1 2 |
$passwd = ConvertTo-SecureString "P@ssW0rd" -AsPlainText -Force New-ADUser labuser01 -Path "OU=Sales,DC=soma-engineering,DC=local" -AccountPassword $passwd -Enabled $true |
一度で多くの属性を登録する
一度に多くの属性を登録したいという場合は、以下のように必要な分をオプションとして付けて値を入れてあげれば登録ができます。
1 2 3 4 5 6 7 8 9 10 11 12 |
$passwd = ConvertTo-SecureString "P@ssW0rd" -AsPlainText -Force $ou = "OU=Sales,DC=soma-engineering,DC=local" New-ADUser luser03 ` -Surname Lab -GivenName User03 -DisplayName "Lab User03" ` -Path $ou -AccountPassword $passwd -Enabled $true ` -UserPrincipalName "luser03@soma-engineering.local" ` -EmailAddress "user03.lab@soma-engineering.local" ` -OfficePhone "0312345678" ` -EmployeeNumber "0003" -EmployeeID "SL0003" ` -Division "第三営業課" -Department "営業部" -Company "相馬エンジニアリング" ` -City “千代田区”-Country "JP |
エラーチェックも含めたほうが良いかと思います。ユーザーが存在しない場合はユーザーを作成し、存在しない場合は作成せずに警告メッセージを返すようにしました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
$passwd = ConvertTo-SecureString "P@ssW0rd" -AsPlainText -Force $ou = "OU=Sales,DC=soma-engineering,DC=local" $Name = "luser03" $User = Get-ADUser -Filter {sAMAccountName -eq $Name} if ($User -eq $NULL) { New-ADUser luser03 ` -Surname Lab -GivenName luser03 -DisplayName "Lab User03" ` -Path $ou -AccountPassword $passwd -Enabled $true ` -UserPrincipalName "luser03@soma-engineering.local" ` -EmailAddress "user03.lab@soma-engineering.local" ` -OfficePhone "0312345678" ` -EmployeeNumber "0003" -EmployeeID "SL0003" ` -Division "第三営業課" -Department "営業部" -Company "相馬エンジニアリング" ` -City “千代田区” Write-Host "ユーザー($Name)が登録されました。" -ForegroundColor green } else { Write-Host "ユーザーは既に登録されています。" -ForegroundColor Yellow } |
ユーザーを移動する
ユーザーアカウントを別の OU に移動するには、Move-ADObject コマンドレットを使います。
1 |
Move-ADObject -Identity "CN=luser03,OU=Sales,DC=soma-engineering,DC=local" -TargetPath "OU=IT,DC=soma-engineering,DC=local" |
ユーザーアカウントをまとめて移動したい場合は、以下のようなスクリプトを使えば移動ができます。
- $Name にユーザーアカウント名の途中まで入力し、Like 検索するのでワイルドカードの部分は * にしておきます。
- ここでは、luser01,02,03 が対象なので、luser* と指定しました。
- Get-ADUser コマンドレットで $Name を Like 検索するので、複数のユーザーがヒットします。それを $Users に代入します。
- foreach で 1 個ずつ Move-ADObject で別の OU に移動します。
1 2 3 4 5 6 7 8 9 |
$Name = "luser*" $Users = Get-AdUser -Filter {sAMAccountName -Like $Name} $Ou = "OU=IT,DC=soma-engineering,DC=local" foreach ($User in $Users) { Move-ADObject -Identity $User -TargetPath $Ou } |
ユーザーを無効にする
ユーザーアカウントを無効にするコマンドレットは、Set-ADUser コマンドレットで -Enable オプションを $false にすれば無効にできます。
1 |
Get-AdUser -Filter {sAMAccountName -eq "luser03"} | Set-ADUser -Enabled $false |
ユーザーを削除する
ユーザーアカウントを削除します。ただし、いきなりユーザーアカウントを削除してしまうのは問題があると思いますので、削除用の OU に一時退避しておくと良いでしょう。あと個人的にユーザーの削除をスクリプトで実行するのはやりたくない為に、ここでは一時退避したユーザーアカウントを無効にしています。
ユーザーアカウントを別の OU に一時退避し、無効化する場合は以下のようなスクリプトを使えばできます。
- $Name にユーザーアカウント名の途中まで入力し、Like 検索するのでワイルドカードの部分は * にしておきます。
- ここでは、luser01,02,03 が対象なので、luser* と指定しました。
- Get-ADUser コマンドレットで $Name を Like 検索するので、複数のユーザーがヒットします。それを $Users に代入します。
- foreach で 1 個ずつ 処理します。
- ユーザーアカウントを無効にします。既に無効になっていれば警告メッセージを返します。
- ユーザーアカウントを Delete OU に移動します。既に当該 OU にあれば警告メッセージを返します。
- 3 を繰り返し処理します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
$Name = "luser*" $Users = Get-AdUser -Filter {sAMAccountName -Like $Name} $Dn = "OU=Delete,DC=soma-engineering,DC=local" foreach ($User in $Users) { if ($User.Enabled -eq "false") { $User | Set-ADUser -Enabled $false } else { Write-Host "$user は既に無効になっています。" } if ($User.DistinguishedName -notmatch $Dn) { Move-ADObject -Identity $User -TargetPath $Dn } else { Write-Host "$user は $Delete OUに既に入っています。" } } |
ユーザーをグループに追加する
ユーザーをグループに追加するには、Add-ADGroupMember コマンドレットを使います。まずはシンプルな方法で追加してみます。
【 Add-ADGroupMember 】コマンドレット――Active Directoryのグループにユーザーを追加する | @IT
1 |
Add-ADGroupMember "LabGroup" -Members luser03 |
上の処理ですと、グループに追加できるユーザーは 1 ユーザーのみです。(同じ処理を複数行追加してユーザー名を変更すれば複数ユーザーをグループに追加する事はできます。)
ユーザー名が全く異なるのであればこの方法が一番シンプルで分かり易いと思います。
一方で、特定のユーザー名があり(例:user01, user02, user03)、名前の規則がある程度一致している場合はもう少し効率的な方法で追加する事ができます。
1 2 3 4 5 6 7 |
$Name = "luser*" $Users = Get-ADUser -Filter {sAMAccountName -Like $Name } foreach ($User in $Users) { Add-ADGroupMember -Identity "LabGroup" -Members $Users } |
上の処理を一行で書くとこう書けます。
1 |
Get-ADUser -Filter {sAMAccountName -Like "luser*"} | foreach {Add-ADGroupMember -Identity "LabGroup" -Members $_} |
これでユーザーをグループに追加する事ができましたので、グループにユーザーが追加されたか確認してみましょう。
グループに追加されているユーザーの一覧を取得する
グループにユーザーが追加されているか確認します。Get-ADGroupMember コマンドレットを使います。
【 Get-ADGroupMember 】コマンドレット――Active Directoryのグループのメンバーを表示する | @IT
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
Get-ADGroupMember "LabGroup" # 実行結果 distinguishedName : CN=Lab User01,OU=Users,OU=Lab,DC=soma-engineering,DC=local name : Lab User01 objectClass : user objectGUID : dde8870d-a203-4075-a2aa-54da1e7bf2c3 SamAccountName : luser01 SID : S-1-5-21-1588114628-1561702856-3468549428-1103 distinguishedName : CN=Lab User02,OU=Users,OU=Lab,DC=soma-engineering,DC=local name : Lab User02 objectClass : user objectGUID : e10d53d1-4fa9-4b63-8a58-09dd03813914 SamAccountName : luser02 SID : S-1-5-21-1588114628-1561702856-3468549428-1106 distinguishedName : CN=luser03,OU=Users,OU=Lab,DC=soma-engineering,DC=local name : luser03 objectClass : user objectGUID : 1eeb3ea5-ac5d-472f-9bb5-286ec23b9df5 SamAccountName : luser03 SID : S-1-5-21-1588114628-1561702856-3468549428-2108 |
上の取得結果ですと、ユーザー名だけではなく、他の情報も取ってきてしまいます。そこで、ユーザー名の一覧を取得するには以下の方法を使います。
1 2 3 4 5 6 7 8 |
Get-ADGroupMember "LabGroup" | Select name, SamAccountName | Format-Table -AutoSize # 実行結果 name SamAccountName ---- -------------- Lab User01 luser01 Lab User02 luser02 Lab User03 luser03 |
ユーザーアカウントの属性を表示する
ユーザーアカウントのオブジェクトには、多くの属性(プロパティ)を持っています。PowerShell を使えば、特定の属性を簡単に取得する事ができます。とりあえず、サンプルとして属性を見てみましょう。(属性の一部は省略しております。)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
Get-ADUser luser01 -Properties * # 実行結果 AccountExpirationDate : accountExpires : 9223372036854775807 AccountLockoutTime : Created : 2018/07/19 6:03:19 createTimeStamp : 2018/07/19 6:03:19 DisplayName : Lab User01 DistinguishedName : CN=Lab User01,OU=Users,OU=Lab,DC=soma-engineering,DC=local ... LastBadPasswordAttempt : ... lastLogon : 131772991434688644 LastLogonDate : 2018/07/19 6:14:14 lastLogonTimestamp : 131764220545603796 LockedOut : False logonCount : 22 LogonWorkstations : Manager : MemberOf : {CN=LabGroup,OU=Groups,DC=soma-engineering,DC=local} ... PasswordExpired : False PasswordLastSet : 2018/07/19 6:03:19 PasswordNeverExpires : True PasswordNotRequired : False ... whenChanged : 2018/07/29 9:51:46 whenCreated : 2018/07/19 6:03:19 |
一部は省略していますが、これだけでもかなりの量になります。この属性から最終ログオン日時を取得したい場合はどうしたら良いでしょうか。
Get-ADUser で取得したオブジェクトをパイプラインでつなぎ、Select-Object コマンドレットで指定してあげれば良いだけです。
1 2 3 4 5 6 7 8 |
[powershell] Get-ADUser luser01 -Properties * | Select-Object Name,LastLogonDate | Format-Table -AutoSize # 実行結果 Name LastLogonDate ---- ------------- Lab User01 2018/07/19 6:14:14 |
最後に
いかがでしょうか。管理する対象のユーザーアカウントが多いと、GUI でいちいち管理するのは面倒なので、バッチや PowerShell を使うと良いと思います。
では最後までお読みいただきありがとうございました!