이 문서는 Bitbucket-Powershell 활용하여 Excel로 사용자 생성 및 그룹 추가 가이드를 공유하기 위해 작성되었다.
| 도구명 | Crowd, Powershell |
|---|---|
| 비고 |
Powershell 이용하여 Excel로 사용자 생성 및 그룹 추가
Excel에 정보 넣기
- 해당 형식으로 생성(첨부파일). 각 행마다 그룹 칸에 값이 없을 때까지 그룹 추가됨
- 1열 Name, 2열 DisplayName, 3열 EmailAddress, 4열 Password 5열부터 그룹명
Powershell Script
- 윈도우 키 → Powershell ISE 실행 → 새로 만들기
- 2행에 Bitbucket 주소
9열에 Default Group 넣을 지 여부 선택: stash-users
Script 실행 후 해당 Excel 파일 선택 가능
#url 입력
$bitbucketUrl = "https://bitbucket.almdemo.curvc.com/"
if(${bitbucketUrl}.ToString()[-1] -eq '/'){
$bitbucketUrl = $bitbucketUrl.ToString().Substring(0, $bitbucketUrl.Length - 1)
}
# DefaultGroup 확인: 유저 생성 시 자동으로 기본 그룹에 넣고 싶을 경우 $true, 아닌 경우 $false, 기본그룹: stash-users
$defaultGroup = $false
if($defaultGroup){
$defaultCheck = "true"
} else{
$defaultCheck = "false"
}
# Bitbucket ID, PW 입력 받기
# 관리자 ID,PW 입력받기
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
$form = New-Object System.Windows.Forms.Form
$form.Text = 'Bitbucket Login 정보'
$form.Size = New-Object System.Drawing.Size(300,200)
$form.StartPosition = 'CenterScreen'
$cancelButton = New-Object System.Windows.Forms.Button
$cancelButton.Location = New-Object System.Drawing.Point(150,120)
$cancelButton.Size = New-Object System.Drawing.Size(75,23)
$cancelButton.Text = '취소'
$cancelButton.DialogResult = [System.Windows.Forms.DialogResult]::Cancel
$form.AcceptButton = $cancelButton
$form.Controls.Add($cancelButton)
$okButton = New-Object System.Windows.Forms.Button
$okButton.Location = New-Object System.Drawing.Point(75,120)
$okButton.Size = New-Object System.Drawing.Size(75,23)
$okButton.Text = '확인'
$okButton.DialogResult = [System.Windows.Forms.DialogResult]::OK
$form.AcceptButton = $okButton
$form.Controls.Add($okButton)
$Labeltitle = New-Object System.Windows.Forms.Label
$Labeltitle.Location = New-Object System.Drawing.Point(10,20)
$Labeltitle.Size = New-Object System.Drawing.Size(200,20)
$Labeltitle.Text = 'Bitbucket에 사용됩니다.'
$form.Controls.Add($Labeltitle)
$Label = New-Object System.Windows.Forms.Label
$Label.Location = New-Object System.Drawing.Point(10,50)
$Label.Size = New-Object System.Drawing.Size(70,20)
$Label.Text = 'ID'
$form.Controls.Add($Label)
$Label2 = New-Object System.Windows.Forms.Label
$Label2.Location = New-Object System.Drawing.Point(10,70)
$Label2.Size = New-Object System.Drawing.Size(70,40)
$Label2.Text = 'PW'
$form.Controls.Add($Label2)
$textBox = New-Object System.Windows.Forms.TextBox
$textBox.Location = New-Object System.Drawing.Point(80,50)
$textBox.Size = New-Object System.Drawing.Size(100,20)
$form.Controls.Add($textBox)
$textBox1 = New-Object System.Windows.Forms.TextBox
$textBox1.PasswordChar = '*'
$textBox1.Location = New-Object System.Drawing.Point(80,70)
$textBox1.Size = New-Object System.Drawing.Size(100,20)
$form.Controls.Add($textBox1)
$form.Topmost = $true
$form.Add_Shown({$textBox.Select()})
$result = $form.ShowDialog()
if ($result -eq [System.Windows.Forms.DialogResult]::OK)
{
$bitbucketID = $textBox.Text
$bitbucketPW = $textBox1.Text
}
# SSL 인증서 오류 일 경우, SSL 인증서 문제 없을 경우 해당 부분 필요 X
Add-Type @"
using System.Net;
using System.Security.Cryptography.X509Certificates;
public class TrustAllCertsPolicy : ICertificatePolicy {
public bool CheckValidationResult(
ServicePoint srvPoint, X509Certificate certificate,
WebRequest request, int certificateProblem){
return true;
}
}
"@
[System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls, [Net.SecurityProtocolType]::Tls11, [Net.SecurityProtocolType]::Tls12, [Net.SecurityProtocolType]::Tls13, [Net.SecurityProtocolType]::Ssl3
# 인증 인코딩
function Get-BasicAuthCreds {
param([string]$Username, [string]$Password)
$AuthString = "{0}:{1}" -f $Username,$Password
$AuthBytes = [System.Text.Encoding]::ASCII.GetBytes($AuthString)
return [Convert]::ToBase64String($AuthBytes)
}
$BasicCreds = Get-BasicAuthCreds -Username $bitbucketID -Password $bitbucketPW
#엑셀 파일 선택 및 열기
$FileBrowser = New-Object System.Windows.Forms.OpenFileDialog
$FileBrowser.Title = "선택하세요"
$FileBrowser.Filter = "xlsx (*.xlsx)| *.xlsx"
[void]$FileBrowser.ShowDialog()
$FilePath = $FileBrowser.FileName.ToString()
$Excel = New-Object -ComObject Excel.Application
$Excel.Visible = $true
$WorkBook = $Excel.Workbooks.add($FilePath)
$sheet = $WorkBook.worksheets.Item(1)
#첫행 무시
$row = 2
$count = 0
#기록용 로그
$LogArray = @()
# 1행 1열 값이 Name이 아닌 경우 중지
if($Sheet.Cells.Item(1,1).Text -ne "Name"){
Write-Host "Excel 파일을 확인해보세요"
return
}
while($Sheet.Cells.Item($row,1).Text -ne ""){
$Log = ""
# 그룹열 초기화
$col = 5
$groupArray = @()
# 1열 Name, 2열 DisplayName, 3열 EmailAddress 4열 password 5열부터 그룹명
$name = $Sheet.Cells.Item($row,1).Text
$displayName = $Sheet.Cells.Item($row,2).Text
$emailAddress = $Sheet.Cells.Item($row,3).Text
$password = $Sheet.Cells.Item($row,4).Text
#User 추가하는 API
$user_api = "/rest/api/latest/admin/users?emailAddress=${emailAddress}&displayName=${displayName}&name=${name}&password=${password}&addToDefaultGroup=${defaultCheck}"
$add_api = Invoke-WebRequest -Uri "${bitbucketUrl}${user_api}" -Method Post -ContentType 'application/json' -Headers @{"Authorization"="Basic $BasicCreds"}
# 실패 로그 남기기
if($add_api -eq $null){
write-host "User: ${name} 만들기 실패"
$Log += "User: ${name} 만들기 실패"
} elseif($add_api.StatusCode -eq 204){
write-host "User: ${name} add "
$Log += "User: ${name} add "
} else{
write-host "User: ${name} Failed"
$Log += "User: ${name} Failed "
}
# User API 변수 초기화
$user_api = $null
$add_api = $null
#Group 추가하는 API
$group_api = "/rest/api/latest/admin/users/add-groups"
#Group 내용 Body 값 작성
while($Sheet.Cells.Item($row,$col).Text -ne ""){
$groupArray += $Sheet.Cells.Item($row,$col).Text
$col++
}
if($groupArray.Count -ne 0){
$groups = ConvertTo-Json ${groupArray}
$form1= '{"groups":' + $groups + ',"user": "' + $name + '" }'
$form = [System.Text.Encoding]::UTF8.GetBytes($form1)
$add_group_api = Invoke-WebRequest -Uri "${bitbucketUrl}${group_api}" -Method Post -ContentType 'application/json' -Headers @{"Authorization"="Basic $BasicCreds"} -Body $form
}
# 실패 로그 남기기
if($add_group_api -eq $null){
write-host "Group: ${groupArray} 추가 실패"
$Log += "Group: ${groupArray} 추가 실패"
} elseif($add_api.StatusCode -eq 204){
write-host "Group: ${groupArray} 204"
$Log += "Group: ${groupArray} 204"
} else{
write-host "Group: ${groupArray} add"
$Log += "Group: ${groupArray} add"
}
# Group API 초기화
$add_group_api = $null
$row++
$count++
$LogArray += $Log
}
$date = Get-Date -UFormat %Y%m%d%H%M
$LogArray > .\${date}_BitbucketAdd.log
사용 예시
- 해당 Script 실행 시 User 정보 입력창에 정보 입력
- 입력 후 엑셀파일 선택
- 실행 후 해당 Powershell console에서 추가된 내용 확인




