ActiveDirectory에 PowerShell로 사용자 일괄 등록
dsadd 명령에 의한 것이 유명하지만, 여기에서는 Power Shell로 작성해 보자.
사양
net user /times
로 전달합니다. yyyy/MM/dd
형식으로 지정할 수 있습니다. 스크립트
CSV 파일 이름을 users.csv
로 설정하고 스크립트와 동일한 폴더에 넣습니다.
일괄 등록 스크립트ipcsv users.csv -Encoding Default | %{
$staffCode = $_.'スタッフコード'
# ユーザ定義用の連想配列を作成
$users = @{
SamAccountName = $staffCode # ログオン名
employeeID = $staffCode # 従業員ID
employeeNumber = $staffCode # 従業員番号
Name = $_.'スタッフ名'
Surname = $staffCode # 姓
GivenName = $_.'スタッフ名' # 名
DisplayName = $staffCode + ' ' + $_.'スタッフ名' # 表示名
Path = 'OU=XXXXX,OU=Users,OU=XXX,DC=xxx,DC=ne,DC=jp' # OUは固定
Description = $_.'AD説明' # 説明欄
UserPrincipalName = $staffCode + '@xxx.xxx.ne.jp' # ユーザプリンシパル名
AccountPassword = (ConvertTo-SecureString -AsPlainText $_.'AD初期パスワード' -force) # 暗号化したパスワード
ChangePasswordAtLogon = $True # 次回ログオン時にパスワード変更が必要
AccountExpirationDate = $_.'AD有効期限' # アカウントの有効期限
Enabled = $True # ユーザを有効にする
}
New-ADUser @users # アカウント追加
# ログオン可能時間帯
if($_.'ADログオン可能時間' -ne '') {
$cmdstr = '/c net user ' + $staffCode + ' /DOMAIN /TIMES:' + $_.'ADログオン可能時間'
cmd $cmdstr
}
# 所属させるグループ
$groups = $_.'AD所属グループ' -split ':'
foreach($group in $groups) {
Add-ADGroupMember -Identity $group -Members $staffCode
}
}
실행 결과
스크립트에서 정의한 OU 아래를 확인합니다.
개조해보자
이 섹션에서는 위의 스크립트를 기반으로 다양한 수정을 수행합니다.
직원 이름을 성과 이름으로 나누어 등록하려면
정규 표현(하나 이상의 공백)으로, 성과 이름으로 split
한다. 공백이 없으면 성에 치우쳐진다.
$fullNameArray = $Name -split '\s+'
Surname = $fullNameArray[0] # 姓
GivenName = $fullNameArray[1] # 名
후리가나를 등록하려면
후리가나는 벤더 고유의 확장 속성이다. LDAP의 표준 규약에는 없다.
확장 속성은 New-ADUser의 OtherAttributes
파라미터로 지정할 수 있지만, 여기에서는 Set-ADUser로 추가한다.
$fullNameKana = ($_.'スタッフ名カナ').trim()
$fullNameKanaArray = $fullNameKana -split '\s+'
## フリガナの追加
Set-ADUser -Identity $staffCode -Add @{
'msDS-PhoneticLastName' = $fullNameKanaArray[0]
'msDS-PhoneticFirstName' = $fullNameKanaArray[1]
}
만료일을 실행일 기준으로 설정하려면
계정 만료일을 작성일로부터 90일 후로 한다면 다음과 같이 수정한다.
AccountExpirationDate = (Get-Date).AddDays(90).ToString("yyyy/MM/dd")
Active Directory 사용자와 컴퓨터 화면에서 '계정 기한'을 확인하면 설정한 날짜와 하루가 어긋나 있는 것이 옳다.
예를 들어 왼쪽 이미지에서 설정 한 만료일 (AccountExpires
)은 시간 포함 2019/12/27 00:00:00(JST)
이지만 오른쪽 이미지에서는 전날 2019/12/26
로 표시됩니다. 이는 '계정 기한'에서는 시간 정보가 생략되어 그 날짜가 종일 유효한지 여부로 생각하기 때문이다. GMT이니까 하루 어긋난다고 해설하고 있는 사이트가 있지만, 그것은 잘못이다.
※ 속성 편집기를 표시하려면 [보기] 메뉴에서 [확장 기능 표시]를 활성화합니다.
기존 계정을 잠그려면
항목 '잠금' 필드에 무언가를 입력했을 때 계정을 잠그려면 다음 코드를 추가합니다.
Get-ADUser에서 계정이 있는지 확인한 다음 Set-ADUser에서 Enabled
를 false
로 재설정합니다.
if ($_.'ロック' -ne '') {
$users = Get-ADUser -Filter {SamAccountName -eq $staffCode}
if ($users -eq $null) {
Write-Host "存在しないのでロックできません :$staffCode"
return # 次のエントリへ
}
Set-ADUser -Identity $staffCode -Enabled $false
Write-Host "ロックしました :$staffCode"
return # 次のエントリへ
}
ForEach-Object (%)
의 경우, continue
에서는 루프의 선두로 이동할 수 없기 때문에 return
를 사용한다.
모든 그룹에서 벗어나려면
소속시키는 그룹을 바꾸는 경우 등 일단 모든 그룹에서 벗어나려면 Get-ADGroup과 Remove-ADGroupMember를 조합하여 사용한다.
$user = Get-ADUser $staffCode -Properties memberOf
$groups = $user.memberOf | %{Get-ADGroup $_}
$groups | %{Remove-ADGroupMember -Identity $_ -Members $user -Confirm:$false}
보충
로그온 가능 시간은 logonHours
옵션으로도 지정할 수 있지만, New-ADUser cmdlet만으로 처리하려고 하면 byte형의 배열(1시간 1비트로 24x7=168비트=21byte)로 주어야 하고, 추천 할 수 없다.net user /times
라면, 예를 들면 평일 9시~22시까지 로그인을 인정하는 경우에 M-F,09:00-22:00
와 같이 쓸 수 있다. (쉼표가 포함되어 있으므로 더블 따옴표로 둘러싸는 것)
임시 스태프(파견이나 아르바이트)를 대량으로 고용하는 것을 반복하고 있는 회사에서는 유용할 것이다.
Reference
이 문제에 관하여(ActiveDirectory에 PowerShell로 사용자 일괄 등록), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/mindwood/items/6c4324604bec234f050c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
ipcsv users.csv -Encoding Default | %{
$staffCode = $_.'スタッフコード'
# ユーザ定義用の連想配列を作成
$users = @{
SamAccountName = $staffCode # ログオン名
employeeID = $staffCode # 従業員ID
employeeNumber = $staffCode # 従業員番号
Name = $_.'スタッフ名'
Surname = $staffCode # 姓
GivenName = $_.'スタッフ名' # 名
DisplayName = $staffCode + ' ' + $_.'スタッフ名' # 表示名
Path = 'OU=XXXXX,OU=Users,OU=XXX,DC=xxx,DC=ne,DC=jp' # OUは固定
Description = $_.'AD説明' # 説明欄
UserPrincipalName = $staffCode + '@xxx.xxx.ne.jp' # ユーザプリンシパル名
AccountPassword = (ConvertTo-SecureString -AsPlainText $_.'AD初期パスワード' -force) # 暗号化したパスワード
ChangePasswordAtLogon = $True # 次回ログオン時にパスワード変更が必要
AccountExpirationDate = $_.'AD有効期限' # アカウントの有効期限
Enabled = $True # ユーザを有効にする
}
New-ADUser @users # アカウント追加
# ログオン可能時間帯
if($_.'ADログオン可能時間' -ne '') {
$cmdstr = '/c net user ' + $staffCode + ' /DOMAIN /TIMES:' + $_.'ADログオン可能時間'
cmd $cmdstr
}
# 所属させるグループ
$groups = $_.'AD所属グループ' -split ':'
foreach($group in $groups) {
Add-ADGroupMember -Identity $group -Members $staffCode
}
}
스크립트에서 정의한 OU 아래를 확인합니다.
개조해보자
이 섹션에서는 위의 스크립트를 기반으로 다양한 수정을 수행합니다.
직원 이름을 성과 이름으로 나누어 등록하려면
정규 표현(하나 이상의 공백)으로, 성과 이름으로 split
한다. 공백이 없으면 성에 치우쳐진다.
$fullNameArray = $Name -split '\s+'
Surname = $fullNameArray[0] # 姓
GivenName = $fullNameArray[1] # 名
후리가나를 등록하려면
후리가나는 벤더 고유의 확장 속성이다. LDAP의 표준 규약에는 없다.
확장 속성은 New-ADUser의 OtherAttributes
파라미터로 지정할 수 있지만, 여기에서는 Set-ADUser로 추가한다.
$fullNameKana = ($_.'スタッフ名カナ').trim()
$fullNameKanaArray = $fullNameKana -split '\s+'
## フリガナの追加
Set-ADUser -Identity $staffCode -Add @{
'msDS-PhoneticLastName' = $fullNameKanaArray[0]
'msDS-PhoneticFirstName' = $fullNameKanaArray[1]
}
만료일을 실행일 기준으로 설정하려면
계정 만료일을 작성일로부터 90일 후로 한다면 다음과 같이 수정한다.
AccountExpirationDate = (Get-Date).AddDays(90).ToString("yyyy/MM/dd")
Active Directory 사용자와 컴퓨터 화면에서 '계정 기한'을 확인하면 설정한 날짜와 하루가 어긋나 있는 것이 옳다.
예를 들어 왼쪽 이미지에서 설정 한 만료일 (AccountExpires
)은 시간 포함 2019/12/27 00:00:00(JST)
이지만 오른쪽 이미지에서는 전날 2019/12/26
로 표시됩니다. 이는 '계정 기한'에서는 시간 정보가 생략되어 그 날짜가 종일 유효한지 여부로 생각하기 때문이다. GMT이니까 하루 어긋난다고 해설하고 있는 사이트가 있지만, 그것은 잘못이다.
※ 속성 편집기를 표시하려면 [보기] 메뉴에서 [확장 기능 표시]를 활성화합니다.
기존 계정을 잠그려면
항목 '잠금' 필드에 무언가를 입력했을 때 계정을 잠그려면 다음 코드를 추가합니다.
Get-ADUser에서 계정이 있는지 확인한 다음 Set-ADUser에서 Enabled
를 false
로 재설정합니다.
if ($_.'ロック' -ne '') {
$users = Get-ADUser -Filter {SamAccountName -eq $staffCode}
if ($users -eq $null) {
Write-Host "存在しないのでロックできません :$staffCode"
return # 次のエントリへ
}
Set-ADUser -Identity $staffCode -Enabled $false
Write-Host "ロックしました :$staffCode"
return # 次のエントリへ
}
ForEach-Object (%)
의 경우, continue
에서는 루프의 선두로 이동할 수 없기 때문에 return
를 사용한다.
모든 그룹에서 벗어나려면
소속시키는 그룹을 바꾸는 경우 등 일단 모든 그룹에서 벗어나려면 Get-ADGroup과 Remove-ADGroupMember를 조합하여 사용한다.
$user = Get-ADUser $staffCode -Properties memberOf
$groups = $user.memberOf | %{Get-ADGroup $_}
$groups | %{Remove-ADGroupMember -Identity $_ -Members $user -Confirm:$false}
보충
로그온 가능 시간은 logonHours
옵션으로도 지정할 수 있지만, New-ADUser cmdlet만으로 처리하려고 하면 byte형의 배열(1시간 1비트로 24x7=168비트=21byte)로 주어야 하고, 추천 할 수 없다.net user /times
라면, 예를 들면 평일 9시~22시까지 로그인을 인정하는 경우에 M-F,09:00-22:00
와 같이 쓸 수 있다. (쉼표가 포함되어 있으므로 더블 따옴표로 둘러싸는 것)
임시 스태프(파견이나 아르바이트)를 대량으로 고용하는 것을 반복하고 있는 회사에서는 유용할 것이다.
Reference
이 문제에 관하여(ActiveDirectory에 PowerShell로 사용자 일괄 등록), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/mindwood/items/6c4324604bec234f050c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
$fullNameArray = $Name -split '\s+'
Surname = $fullNameArray[0] # 姓
GivenName = $fullNameArray[1] # 名
$fullNameKana = ($_.'スタッフ名カナ').trim()
$fullNameKanaArray = $fullNameKana -split '\s+'
## フリガナの追加
Set-ADUser -Identity $staffCode -Add @{
'msDS-PhoneticLastName' = $fullNameKanaArray[0]
'msDS-PhoneticFirstName' = $fullNameKanaArray[1]
}
AccountExpirationDate = (Get-Date).AddDays(90).ToString("yyyy/MM/dd")
if ($_.'ロック' -ne '') {
$users = Get-ADUser -Filter {SamAccountName -eq $staffCode}
if ($users -eq $null) {
Write-Host "存在しないのでロックできません :$staffCode"
return # 次のエントリへ
}
Set-ADUser -Identity $staffCode -Enabled $false
Write-Host "ロックしました :$staffCode"
return # 次のエントリへ
}
$user = Get-ADUser $staffCode -Properties memberOf
$groups = $user.memberOf | %{Get-ADGroup $_}
$groups | %{Remove-ADGroupMember -Identity $_ -Members $user -Confirm:$false}
로그온 가능 시간은
logonHours
옵션으로도 지정할 수 있지만, New-ADUser cmdlet만으로 처리하려고 하면 byte형의 배열(1시간 1비트로 24x7=168비트=21byte)로 주어야 하고, 추천 할 수 없다.net user /times
라면, 예를 들면 평일 9시~22시까지 로그인을 인정하는 경우에 M-F,09:00-22:00
와 같이 쓸 수 있다. (쉼표가 포함되어 있으므로 더블 따옴표로 둘러싸는 것)임시 스태프(파견이나 아르바이트)를 대량으로 고용하는 것을 반복하고 있는 회사에서는 유용할 것이다.
Reference
이 문제에 관하여(ActiveDirectory에 PowerShell로 사용자 일괄 등록), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/mindwood/items/6c4324604bec234f050c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)