가이드 제목은 [도구명] [내용]-하기 형태(ex Bitbucket Cloud 저장소 생성하기)로 입력한다.
이 문서에 대한 요약 /개요를 입력한다. (구글에서 검색되었을때 표시되는 문장)
이 문서는 Bitbucket-Powershell 활용하여 Excel로 사용자 생성 및 그룹 추가 가이드를 공유하기 위해 작성되었다.
가이드에 사용되는 도구 정보를 입력한다.
|
첨부한 이미지 너비는 800px 을 넘기지 않는다.
#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 |