가이드 제목은 [도구명] [내용]-하기 형태(ex Bitbucket Cloud 저장소 생성하기)로 입력한다.

이 문서에 대한 요약 /개요를 입력한다. (구글에서 검색되었을때 표시되는 문장)

이 문서는 Bitbucket-Powershell 활용하여 Excel로 사용자 생성 및 그룹 추가 가이드를 공유하기 위해 작성되었다.


가이드에 사용되는 도구 정보를 입력한다.

도구명Crowd, Powershell
비고추가할 내용 있을 경우 기입





첨부한  이미지 너비는 800px 을 넘기지 않는다.

Powershell 이용하여 Excel로 사용자 생성 및 그룹 추가


Excel에 정보 넣기


Powershell Script

#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



사용 예시



참조 링크