프리지아 랩

더 프리지아 랩 +205

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

확인

Azure AD와 AD 동기화 후 고아가된 계정 삭제 방법


[작업 환경]
Microsoft Windows 10 Pro 빌드 16299


Azure AD Connect를 사용해 AD 온프레미스 AD나 AD가 구현된 Azure VM의 AD 계정을 Azure AD와 동기화한 경우, 해당 Azure AD 테넌트에서 사용자 계정 목록을 보면, [SOURCE] 부분의 값은 Windows Server AD와 Azure Active Directory로 나뉜다. 



전자는 동기화한 원본이 다른 AD DS에서 있고, 후자는 Azure AD 테넌트에서 직접 만든 계정이거나 해당 구독의 전역 관리자 계정인 경우다. 

당연히 구독의 전역 관리자 계정은 삭제할 수 없으며 역할도 변경할 수 없다.



그러나 추가 Azure AD 테넌트에서 만든 계정은 역할 변경도 가능하고 삭제도 할 수 있다. 



Azure AD와 AD 동기화 후 기존 AD DS가 제거된 경우, Azure AD의 계정은 Azure 포털에서 변경도 제거도 하지 못한다. 

이런 경우를 "고아 계정"이라고 한다. 


추가한 Azure AD 테넌트를 제거하려는 경우 이런 고아 계정을 포함해 해당 테넌트에서 만든 계정을 모두 삭제한 상태여야 한다. 

고아 계정의 삭제는 Azure AD PowerShell 모듈을 통해 해결할 수 있다.


현재 Azure Active Directory 관리는 MSOnline PowerShell 모듈(Azure AD PowerShell V1)과 Azure Active Directory PowerShell for Graph(Azure AD PowerShell V2)에서 가능하지만, V1은 사용중지가 예고되어 있으므로, V2 사용을 권장한다. 

V2는 미리보기 버전과 GA 버전이 있으며, 미리보기 버전은 운영환경에서 사용을 권장하지 않는다.


MSOnline PowerShell 모듈

MSOnline PowerShell 모듈은 Windows PowerShell 명령을 위한 Azure Active Directory Module이다. 

이들 명령으로 사용자 관리와 도메인 관리, SSO 구성 등의 관리 작업을 한다.

이 모듈을 설치하는 가장 쉬운 방법은 Install-Module 명령으로 PowerShell 갤러리에서 모듈을 설치하는 것이다.



모듈을 설치하고 포함된 명령을 확인해보면 명령에 공통적으로 "Msol" 키워드가 포함된 것을 알 수 있다.



제일 먼저 할 일은 온라인 서비스에 연결하는 일이다. 

이때 해당 AAD 테넌트의 관리자 자격증명으로 인증해야 한다. 

예를 들어, AAD 테넌트의 이름이 steelfleaadatum이고 관리자 계정이 SyncAdmin인 경우 UPN을 사용한 로그인 화면은 다음과 같다.



인증이 성공하면, Get-MsolUser 명령으로 해당 AAD 테넌트의 계정을 확인할 수 있다.



Azure Active Directory PowerShell for Graph

현재 권장하는 Azure AD PowerShell V2 명령을 사용하려면 물론 해당 모듈을 설치해야 한다.
앞서와 동일한 Install-Module 명령으로 PowerShell 갤러리에서 설치할 수 있는데, 모듈 이름은 AzureAD다. 



모듈 설치 후 관련 명령을 확인해 봤다. 명령의 이름에 공통적으로 "AzureAd"라는 키워드가 포함된 것을 알 수 있다.




제일 먼저 할 일은 Connect-AzureAD 명령으로 Azure AD 테넌트에 연결하는 일이다. 

이때 해당 AAD 테넌트의 관리자 자격증명으로 인증해야 한다. 

예를 들어, AAD 테넌트의 이름이 steelfleaadatum이고 관리자 계정이 SyncAdmin인 경우 UPN을 사용한 로그인 화면은 다음과 같다.



Azure AD 테넌트 연결을 끊을 때는 Disconnect-AzureAD 명령을 사용한다.

인증이 성공하면, Get-AzureADUser 명령으로 해당 AAD 테넌트의 계정을 확인할 수 있다.



이제 Remove-AzureADUser 명령으로 고아 계정을 삭제한다. 

앞서 상위 5개의 일반 사용자 계정을 삭제하고 온프레미스 디렉터리 동기화 서비스 계정을 추가로 삭제한다.



이제, Azure 포털에서 해당 AAD 테넌트의 관리자 계정을 삭제한다.



마지막으로, 구독 전역 관리자 계정만 남긴 상태에서 AAD 테넌트를 삭제를 시도하면, 삭제 가능한지 여부를 확인한다. 

다음 화면은 삭제할 수 있는 모든 조건이 통과 되었음을 나타낸다.



Comment +0

PowerShell ISE의 모듈 브라우저 확장 설치 문제를 해결하는 방법

PowerShell ISE는 확장성을 제공하는 멋진 통합 개발 환경입니다.

ISE의 [추가 기능] 메뉴에서 ISE 기능을 확장하는 애드온을 설치할 수 있는데, 여기에 버그가 있습니다. 

이 글에서 다루는 <모듈 브라우저>는 통합 스크립팅 환경 내에서 모듈을 다운로드하고 관리할 수 있도록 도와주는 확장 기능입니다.


[모듈 브라우저 추가 기능 도구 가져오기]를 클릭하면 실행 파일을 다운로드하고 설치하게 되는데, 설치가 끝난 후 ISE를 다시 시작해보면, 모듈 브라우저에서 "갤러리의 모듈을 조회하는데 NuGet-anycpu.exe가 필요하므로 다운로드해서 설치하겠냐"는 메시지를 표시합니다.


[Accept] 버튼을 클릭하면, 패키지 공급자 'NuGet'을 찾을 수없다는 메시지와 함께 '초기화 실패' 메시지를 표시합니다.


이 문제의 원인은, 모듈 브라우저는 <PowerShell Gallery>에서 새로운 이름(ISEModuleBrowserAddon)으로 배포하는 버전을 설치해야 하는데, ISE의 메뉴 링크가 변경되지 않은 까닭입니다.


이제, 제대로된 ISE용 모듈 브라우저를 설치하는 방법은 다음의 단계를 따라하세요.

1. 관리자 권한으로 실행한 PowerShell ISE의 콘솔창에서 다음 명령을 실행합니다.

Install-Module -Name ISEModuleBrowserAddon


2. C:\Users\[User Profile]\Documents\WindowsPowerShell 위치에서, Microsoft.PowerShellISE_profile.ps1 파일을 찾아서 편집기로 오픈 합니다.
해당 파일이 없다면, 만들어 주세요.


3. 다음 내용을 추가한 다음 파일을 저장합니다.


#Module Browser Begin
#Version: 1.0.0
Add-Type -Path 'C:\Program Files\WindowsPowerShell\Modules\ISEModuleBrowserAddon\1.0.1.0\ISEModuleBrowserAddon.dll'
$moduleBrowser = $psISE.CurrentPowerShellTab.VerticalAddOnTools.Add('Module Browser', [ModuleBrowser.Views.MainView], $true)
$psISE.CurrentPowerShellTab.VisibleVerticalAddOnTools.SelectedAddOnTool = $moduleBrowser
#Module Browser End


4. 열려 있는 PowerShell ISE를 종료하고 다시 실행하면, 모듈 브라우저가 다음 화면 처럼 제대로 실행됩니다.


5. 추가적으로, ISE의 [추가 기능] 메뉴에 있는 [스크립트 브라우저 추가 기능 도구 가져오기]를 설치하려는 경우, 메뉴를 클릭하면 연결되는 웹 사이트 링크는 깨졌습니다. 따라서 PowerShell Gallery 사이트에 가서 확인하거나, 다음 처럼 검색 상자에서 scriptbrowser를 입력하고 검색해 결과를 확인한 뒤 설치할 수 있습니다.


Comment +0

Azure PowerShell 맛보기 실습 가이드

<실무에서 바로쓰는 파워셸> 저자가 2018년 4월 21일 Global Azure Boot Camp 발표를 위해 전날 밤새가며 만든 실습 가이드 입니다.
효율적인 실습을 위해 이 글의 PowerShell 구문을 직접 입력해 실행해보기 바랍니다. 명령 구문 복사는 막아 놓았습니다.

실습하는 방법.

1. 아래의 다운로드 파일을 먼저 내려받아 C:\AzureBC라는 폴더에 저장 해 놓습니다.
2. PowerShell ISE를 관리자 권한으로 실행합니다.
3. Azure 구독을 준비합니다.
4. 모든 PowerShell 구문을 ISE 편집 창에 직접 입력하고, 구문단위로 실행합니다(F8, 선택 실행).
5. Azure 포털에서 결과를 확인합니다. 구문을 수행한 후 바로 확인이 안될 수 있습니다. 그 이유는 해당 구문 다음의 몇 가지 구문이 실행되어야 비로소 해당 작업이 완성되는 경우입니다.
6. 가급적 주석을 달도록 노력해보세요. 주석 표시는 해당 구문 앞에 #을 붙이면 됩니다.

1. Azure 구독 연결 및 리소스 관리

1.1 Azure PowerShell을 사용해 Azure 구독 연결하기

1. PowerShell ISE를 관리자 권한으로 실행합니다.




2. PowerShell ISE의 콘솔 창에서 다음 명령을 입력해 Azure PowerShell을 설치합니다. (인터넷 연결 필수)


Install-Module -Name AzureRm


3. PowerShell ISE의 콘솔 창에서 다음 명령을 입력하고 실행한다.


Connect-AzureRmAccount


4. PowerShell ISE의 콘솔 창에서 다음 명령을 입력해 현재 Azure 구독의 정보를 확인합니다.


Get-AzureRmSubscription


5. 여러개의 구독이 있다면, 현재 세션에서 사용하려는 구독을 선택합니다.


Select-AzureRmSubscription -SubscriptionId 'Your SubscriptionId'


6. PowerShell ISE의 콘솔 창에서 다음 명령을 입력해 리소스 공급자 정보를 확인합니다.


Get-AzureRmResourceProvider


1.2 Azure PowerShell을 사용해 Azure 리소스와 리소스 그룹 관리하기

1. 첫 번째 리소스 그룹을 만듭니다. 자신의 구독을 선택하고, 위치는 EastUS로 합니다.


$rg1=New-AzureRmResourceGroup -Name AzureBCKorRG01 -Location EastUS


2. 뒤에서 사용하기 위해 리소스 그룹의 위치를 변수에 저장합니다.


$locName = (Get-AzureRmResourceGroup -Name $rg1.ResourceGroupName).Location


3. 첫 번째 리소스 그룹과 동일한 위치에 두 번째 리소스 그룹(AzureBCKorRG02)을 만듭니다.


$rg2 = New-AzureRmResourceGroup -Name AzureBCKorRG02 -Location $locName


4. Azure 리소스의 예로 라우트 테이블(AzureBCKor01-rt)을 하나 만듭니다.


$resName = "AzureBCKor01-rt"


New-AzureRmRouteTable -ResourceGroupName $rg1.ResourceGroupName -Location $locName -Name $resName


5. 앞서 만든 리소스를 나타내는 개체를 조회해서 변수($res)에 저장합니다.


$res = Get-AzureRmResource -ResourceName $resName -ResourceGroupName $rg1.ResourceGroupName


6. 라우트 테이블 리소스($res)를 새로운 리소스 그룹($rg2.ResourceGroupName)으로 이동합니다.


Move-AzureRmResource -DestinationResourceGroupName $rg2.ResourceGroupName -ResourceId $res.ResourceId


7. 새로운 리소스 그룹에서 이동한 리소스를 확인합니다.


Get-AzureRmResource | Where-Object ResourceGroupName -eq $rg2.ResourceGroupName


*요약
AzureBCKorRG01와 AzureBCKorRG02라는 두 개의 리소스 그룹을 만들었으며, AzureBCKorRG01에 네트워크 리소스 중 하나인 AzureBCKor01-rt라는 라우터 테이블을 만들었다가, AzureBCKorRG02라는 리소스 그룹으로 이동했습니다.


2. Azure 가상 네트워킹과 가상 머신

2.1 2개의 가상 네트워크와 가상 네트워크 피어링 구성하기.

1. 첫 번째 가상 네트워크에 추가할 서브넷을 2개 만듭니다. 서브넷의 이름은 각각 VNet1SubNet1와 VNet1SubNet2 주소 공간은 각각 10.11.0.0/24와 10.11.1.0/24로 합니다.


$subnet1=New-AzureRmVirtualNetworkSubnetConfig -Name 'VNet1SubNet1' -AddressPrefix '10.11.0.0/24'

$subnet2=New-AzureRmVirtualNetworkSubnetConfig -Name 'VNet1SubNet2' -AddressPrefix '10.11.1.0/24'


2. 주소 공간이 10.11.0.0/16인 AzureBCKor01-VNet1이라는 이름의 첫 번째 가상 네트워크를 만들고 이 리소스에 대한 참조를 $vnet1 변수에 저장합니다.


$vnet1 = New-AzureRmVirtualNetwork -ResourceGroupName $rg1.ResourceGroupName -Name 'AzureBCKor01-VNet1' -AddressPrefix '10.11.0.0/16' -Location $locName -Subnet $subnet1,$subnet2


3. 가상 네트워크의 구성을 업데이트 합니다. 다음 명령을 수행하고 Azure 포털에서 확인해봅니다.


Set-AzureRmVirtualNetwork -VirtualNetwork $vnet1


4. 두 번째 가상 네트워크에 추가할 서브넷을 1개 만듭니다. 서브넷의 이름은 VNet2SubNet1 주소 공간은 10.10.0.0/24로 합니다.


$subnet3=New-AzureRmVirtualNetworkSubnetConfig -Name 'VNet2SubNet1' -AddressPrefix '10.10.0.0/24'


5. 주소 공간이 10.10.0.0/16인 AzureBCKor01-VNet2라는 이름의 두 번째 가상 네트워크를 만들고 이 리소스에 대한 참조를 $vnet2 변수에 저장합니다.


$vnet2 = New-AzureRmVirtualNetwork -ResourceGroupName $rg1.ResourceGroupName -Name 'AzureBCKor01-VNet2' -AddressPrefix '10.10.0.0/16' -Location $locName -Subnet $subnet3


6. 가상 네트워크의 구성을 업데이트 합니다.


Set-AzureRmVirtualNetwork -VirtualNetwork $vnet2

2.2 AzureBCKor01-vnet1 가상 네트워크를 사용하는 가상 머신 만들기

1. 가상 머신을 만드는데 필요한 기본 변수를 선언합니다.


$rgName  = 'AzureBCKorRG01'               #리소스 그룹 이름
$vmName  = 'AzureBCKorVM1'                #가상머신 이름
$pubName = 'MicrosoftWindowsServer'      #운영체제 제조사
$offerName = 'WindowsServer'                #운영체제 타입
$skuName = '2016-Datacenter'                #운영체제 버전
$vmSize  = 'Standard_D1_v2'                    #VM 규모
$subnetName = 'VNet1SubNet1'                #서브넷 이름
$nsgName    = "$vmName-nsg"                 #네트워크 보안그룹
$pipName    = "$vmName-pip"                 #공인 IP 이름
$nicName    = "$vmName-nic"                 #네트워크카드 이름
$osDiskName = "$vmName-osdisk"            #운영체제 디스크이름
$osDiskSize = 128                                   #운영체제 디스크 크기
$osDiskType = 'Standard_LRS'                    #운영체제 디스크 복제


2. AzureBCKor01-vnet1 가상 네트워크의 첫번째 서브넷 ID를 변수($subnetid1)에 저장합니다.


$subnetid1 = (Get-AzureRmVirtualNetworkSubnetConfig -Name $subnetName -VirtualNetwork $vnet1).Id


3. 진단 저장소 계정(azurebckor[Your Name Initial]sa)을 만듭니다. 저장소 이름은 반드시 소문자로 합니다.


$storageAccount = New-AzureRmStorageAccount -Name azurebckor[Your Name Initial]sa -ResourceGroupName $rgName -SkuName Standard_LRS -Location $locName -Kind Storage


4. 관리자 자격증명을 만듭니다.


$adminUsername = 'azureman'
$adminPassword = 'Pa55w.rd1234'
$adminCreds = New-Object PSCredential $adminUsername, ($adminPassword | ConvertTo-SecureString -AsPlainText -Force)


5. 네트워크 보안 그룹에서 먼저 RDP를 허용하는 규칙을 만듭니다.


$nsgRuleRDP = New-AzureRmNetworkSecurityRuleConfig -Name 'default-allow-rdp' -Protocol Tcp -Direction Inbound -Priority 1000 -SourceAddressPrefix * -SourcePortRange * -DestinationAddressPrefix * -DestinationPortRange 3389 -Access Allow


6. 앞서 만든 규칙을 적용한 네트워크 보안 그룹을 만듭니다.


$nsg = New-AzureRmNetworkSecurityGroup -ResourceGroupName $rgName -Location $locName -Name $nsgName -SecurityRules $nsgRuleRDP


7. 공인 IP를 만듭니다.


$pip = New-AzureRmPublicIpAddress -Name $pipName -ResourceGroupName $rgName -Location $locName -AllocationMethod Dynamic


8. 공인 IP를 사용하는 NIC를 만듭니다.


$nic = New-AzureRmNetworkInterface -Name $nicName -ResourceGroupName $rgName -Location $locName -SubnetId $subnetid1 -PublicIpAddressId $pip.Id -NetworkSecurityGroupId $nsg.Id


9. VM 기본 구성을 설정합니다.


$vmConfig = New-AzureRmVMConfig -VMName $vmName -VMSize $vmSize


10. 네트워크 카드를 설정합니다.


Add-AzureRmVMNetworkInterface -VM $vmConfig -Id $nic.Id


11. VM 부트 진단을 활성화 합니다.


Set-AzureRmVMBootDiagnostics -Enable -ResourceGroupName $rgName -VM $vmConfig -StorageAccountName $storageAccount[0].StorageAccountName


12. VM 운영체제와 원본 이미지, OS 디스크를 설정합니다.


Set-AzureRmVMOperatingSystem -VM $vmConfig -Windows -ComputerName $vmName -Credential $adminCreds

Set-AzureRmVMSourceImage -VM $vmConfig -PublisherName $pubName -Offer $offerName -Skus $skuName -Version 'latest'

Set-AzureRmVMOSDisk -VM $vmConfig -Name $osDiskName -DiskSizeInGB $osDiskSize -StorageAccountType $osDiskType -CreateOption fromImage


13. 지금까지의 설정을 바탕으로 VM을 만듭니다.


New-AzureRmVM -ResourceGroupName $rgName -Location $locName -VM $vmConfig


2.3 AzureBCKor01-vnet2 가상 네트워크를 사용하는 가상 머신 만들기

1. 가상 머신을 만드는데 필요한 기본 변수를 선언합니다.

$rgName  = 'AzureBCKorRG01'        #리소스 그룹 이름
$vmName  = 'AzureBCKorVM2'        #가상머신 이름
$subnetName = 'VNet2SubNet1'        #서브넷 이름
$nsgName    = "$vmName-nsg"         #네트워크 보안그룹
$pipName    = "$vmName-pip"         #공인 IP 이름
$nicName    = "$vmName-nic"         #네트워크카드 이름
$osDiskName = "$vmName-osdisk"    #운영체제 디스크이름


2. AzureBCKor01-vnet2 가상 네트워크의 첫번째 서브넷 ID를 변수($subnetid2)에 저장합니다.


$subnetid2 = (Get-AzureRmVirtualNetworkSubnetConfig -Name $subnetName -VirtualNetwork $vnet2).Id


3. 2.2의 6~7까지를 다시 수행합니다.


4. 공인 IP를 사용하는 NIC를 만듭니다.


$nic = New-AzureRmNetworkInterface -Name $nicName -ResourceGroupName $rgName -Location $locName -SubnetId $subnetid2 -PublicIpAddressId $pip.Id -NetworkSecurityGroupId $nsg.Id


5. 2.2의 9~13까지를 다시 수행합니다.



2.4 가상네트워크 피어링과 서로 다른 네트워크의 가상머신 테스트


1. AzureBCKor01-vnet1 -> AzureBCKor01-vnet2로의 가상 네트워크 피어링을 추가합니다.


Add-AzureRmVirtualNetworkPeering -Name VNet1ToVNet2 -VirtualNetwork $vnet1 -RemoteVirtualNetworkId $vnet2.Id


2. AzureBCKor01-vnet2 -> AzureBCKor01-vnet1로의 가상 네트워크 피어링을 추가합니다.


Add-AzureRmVirtualNetworkPeering -Name VNet2ToVNet1 -VirtualNetwork $vnet2 -RemoteVirtualNetworkId $vnet1.Id


3. 가상 네트워크 양방향 피어링 결과를 확인합니다.


Get-AzureRmVirtualNetworkPeering -VirtualNetworkName AzureBCKor01-VNet1  -ResourceGroupName $rgName -Name VNet1ToVNet2

Get-AzureRmVirtualNetworkPeering -VirtualNetworkName AzureBCKor01-VNet2  -ResourceGroupName $rgName -Name VNet2ToVNet1


4. Azure 포털에서 리소스그룹 AzureBCKorRG01내의 AzureBCKorVM1을 클릭하고  [개요] 블레이드에서 상단의 [공용 IP 주소]를 확인하고 mstsc를 실행해 원격데스크톱으로 접속합니다.




5. AzureBCKorVM1에서 AzureBCKorVM2로 ICMP 테스트를 수행합니다.

AzureBCKorVM2에서 방화벽을 해제하고 테스트 한 후, 다시 방화벽을 원래대로 복구하세요.


Test-NetConnection -ComputerName [AzureBCKorVM2의 사설 IP]


*요약
2개의 서브넷이 있는 가상 네트워크 하나와 1개의 서브넷이 있는 가상 네트워크를 만들었습니다. 각 가상 네트워크에서 동작하는 가상 머신을 하나씩 만들어 배치했습니다. 또한 두 개의 가상 네트워크를 피어링 기능으로 양방향 연결해, 앞서 만든 서로 다른 네트워크의 가상 머신이 서로 통신이 가능함을 확인했습니다.


3. Azure 웹앱

3.1 서로 다른 지역에 Azure 웹앱 만들기

1. 한국 중부에 새로운 리소스 그룹을 하나 만듭니다.


$rg3=New-AzureRmResourceGroup -Name AzureBCKorRG03 -Location koreacentral


2. 한국 중부에 배치할 웹 앱의 앱 서비스 계획을 만들고 변수에 저장합니다.


$rg03asp=New-AzureRmAppServicePlan -Location 'Korea Central' -ResourceGroupName AzureBCKorRG03 -Name AzureBCKorAS -Tier Standard -WorkerSize Small -NumberofWorkers 1


3. AzureBCKorRG03 리소스 그룹에 웹 앱(azurebckorweb1-[Your Name Initial])을 하나 만듭니다. 위치는 한국 중부를 지정합니다.


New-AzureRmWebApp -ResourceGroupName $rg3.ResourceGroupName -Name azurebckorweb-[Your Name Initial] -Location 'Korea Central' -AppServicePlan AzureBCKorAS


4. 미국 동부에 배치할 웹 앱의 앱 서비스 계획을 만들고 변수에 저장합니다.


$rg01asp=New-AzureRmAppServicePlan -Location 'East US' -ResourceGroupName AzureBCKorRG01 -Name AzureBCEastUSAS -Tier Standard -WorkerSize Small -NumberofWorkers 1


5. AzureBCKorRG01 리소스 그룹에 웹 앱(azurebckorweb2-[Your Name Initial])을 하나 더 만듭니다. 위치는 미국 동부를 지정합니다.


New-AzureRmWebApp -ResourceGroupName $rg1.ResourceGroupName -Name azurebcusweb-[Your Name Initial] -Location 'East US' -AppServicePlan AzureBCEastUSAS


6. 실습 가이드에 게시된 webapp-korpub.zip파일과 webapp-uspub.zip 파일을 다운로드해 C:\AzureBC 폴더 아래에 저장합니다.


7. 이번엔 Azure 클래식 모델을 사용하기 위해, 다시 기본 구독 환경을 바꿉니다. 다음 명령을 실행하고 다시 로그인합니다.


Add-AzureAccount


8. 한국 중부에 배포한 웹 앱에 webapp-korpub.zip을 게시합니다.


Publish-AzureWebsiteProject -Package C:\Azurebc\webapp-korpub.zip -Name azurebckorweb1-[Your Name Initial]


9. 배포한 웹 앱의 동작을 확인합니다.


Show-AzureWebsite -Name azurebckorweb1


10. 미국 동부에 배포한 웹 앱에 webapp-uspub.zip을 게시합니다.


Publish-AzureWebsiteProject -Package C:\Azurebc\webapp-uspub.zip -Name azurebckorweb2-[Your Name Initial]


11. 배포함 웹 앱의 동작을 확인합니다.


Show-AzureWebsite -Name azurebckorweb2


3.2 트래픽 관리자를 이용해 접속 지역을 기반으로 웹 앱서비스하기

1. AzureBCKorRG03 리소스 그룹에 트래픽 관리자 프로필(azurebctm)을 만듭니다. 이때 DNS 이름은 bctm[Your Name Initial]로 합니다. 모니터링 프로토콜은 HTTP, 모니터링 포트는 80, TTL 값은 30으로 지정합니다.


New-AzureRmTrafficManagerProfile -ResourceGroupName AzureBCKorRG02 -Name azurebctm -TrafficRoutingMethod Geographic -RelativeDnsName "bctm[Your Name Initial]" -Ttl 30 -MonitorProtocol HTTP -MonitorPort 80 -MonitorPath "/"


2. 끝점을 만드는데 필요한 트래픽 관리자 프로필 리소스 개체와 앞서 만든 웹 앱 개체를  변수에 저장합니다.


$tmprofile=Get-AzureRmTrafficManagerProfile -Name azurebctm -ResourceGroupName AzureBCKorRG02
$korweb = Get-AzureRmWebApp -Name azurebckorweb1
$usweb = Get-AzureRmWebApp -Name azurebckorweb2


3. 트래픽 관리자에서 라우팅할 첫 번째 끝점을 지정합니다. 먼저, 앞서 만든 한국 중부의 웹 앱으로 라우팅하는 끝점을 등록합니다.

-끝점 이름: korweb
-지리적 매핑: KR
-형식: Azure끝점
-상태: 사용


Add-AzureRmTrafficManagerEndpointConfig -EndpointName korweb -EndpointStatus Enabled -TargetResourceId $korweb.id -TrafficManagerProfile $tmprofile -GeoMapping KR -Type AzureEndpoints


4. 트래픽 관리자에서 라우팅할 두 번째 끝점을 지정합니다. 앞서 만든 미국 동부의 웹 앱으로 라우팅하는 끝점을 등록합니다.

-끝점 이름: usweb
-지리적 매핑: US
-형식: Azure끝점
-상태: 사용


Add-AzureRmTrafficManagerEndpointConfig -EndpointName usweb -EndpointStatus Enabled -TargetResourceId $usweb.id -TrafficManagerProfile $tmprofile -GeoMapping US -Type AzureEndpoints


5. 이제 트래픽 관리자 [개요] 블레이드에서 DNS 이름을 클릭해 어떤 웹사이트로 접속되는지 확인합니다. 한국에서 접속한다면, azurebckorweb.azurewebsites.net으로 라우팅되어야 합니다.



*요약

한국 중부와 미국 동부에 각각 웹앱을 만들고 개발한 웹 사이트를 각 웹 앱에 배포했습니다. 지리적 기반으로 부하를 분산하는 트래픽 관리자를 만들어 각 웹 앱을 끝점으로 등록하고, 한국에서 접속했을 때 한국 중부의 웹 앱이 응답하는 것을 확인했습니다.


4. 리소스 정리

실습 가이드 웹 페이지에서 RemoveAllResources.ps1 파일을 다운로드해 C:\Azurebc 폴더에 저장하고 다음과 같이 실행합니다. 스크립트에 정의한 Remove-AzureBCResources 함수가 현재 세션에 로드됩니다.


주의) 계속 사용해야 하는 리소스 그룹이 있다면, 이 명령을 실행하지 마시고, 각 리소스 그룹을 별도로 삭제하세요.


. C:\AzureBC\RemoveAllResources.ps1


이제, 지금까지 만든 모든 리소스를 지우기 위해 Remove-AzureBCResources 명령을 실행합니다.


Comment +0

 Azure에서 PowerShell을 사용한 가상 네트워크와 서브넷을 만들때 범할 수 있는 실수.


Azure에서 PowerShell을 사용해 가상네트워크와 서브넷을 만드는 방법은 두 가지 입니다.

1. New-AzureRmVirtualNetworkSubnetConfig를 먼저 실행한 후, New-AzureRmVirtualNetwork을 실행하는 방법.

2. New-AzureRmVirtualNetwork으로 가상 네트워크를 먼저 만든 후, Add-AzureRmVirtualNetworkSubnetConfig를 실행하는 방법.

물론, 최종적으로 Set-AzureRmVirtualNetwork으로 설정을 업데이트 해야 합니다.

두 가지 방법 모두 가상네트워크를 만들고 해당 네트워크에 서브넷을 만들지만, 각 방법으로 만든 서브넷의 정보를 보면 다음 차이가 있습니다.

1번의 방법으로 한 경우, 



2번의 방법으로 한 경우,


두 가지 결과의 차이점이 보이나요?

2번 방법은 Id와 Etag 값이 없습니다.
이런 경우 네트워크 카드 리소스를 만들때 지정해야 하는 서브넷 ID를 사용하지 못하니 문제가 됩니다.

여기서 중요한 PowerShell 사용의 실수가 나옵니다.

2번의 경우 먼저, 다음과 같이 가상 네트워크를 만듭니다.

$vnet3 = New-AzureRmVirtualNetwork -ResourceGroupName $rg2.ResourceGroupName -Name 'AzureBCKor02-VNet1' -AddressPrefix '10.12.0.0/16' -Location $locName

그리고 여기에 서브넷을 다음과 같이 추가하겠죠.
$subnet4=Add-AzureRmVirtualNetworkSubnetConfig -Name 'VNet3SubNet1' -AddressPrefix '10.12.0.0/24' -VirtualNetwork $vnet3

그 다음, 최종적으로 설정을 업데이트 합니다.

Set-AzureRmVirtualNetwork -VirtualNetwork $vnet3

그리고, 흐뭇하게 $vnet3 변수에 담긴 서브넷의 정보를 확인하면, 위의 2번 그림과 같은 상황이 발생합니다.

결론적으로, $vnet3 변수에 담아 놓은 정보는 Set-AzureRmVirtualNetwork으로 업데이트하기전의 결과이므로, 다음 명령으로 다시 한번 값을 업데이트 해줘야, 나중에 정확한 값을 사용할 수 있는 것입니다.

$vnet3=Get-AzureRmVirtualNetwork -Name 'AzureBCKor02-VNet1' -ResourceGroupName $rg2.ResourceGroupName


 


Comment +0

Mixed Reality Toolkit에서 음성  명령 처리 방법의 변화


홀로렌즈에서 음성 명령이 실행되게 하려면 맨 먼저 해야 할 일이 마이크로폰을 허용하도록 설정하는 일이다.

이 설정 부분의 위치는 Mixed Reality Toolkit으로 오면서 유니티에서 설정 위치가 바뀌었다.


[AS-WAS]
HoloToolkit | Configure | Apply HoloLens Capability Settings


[AS-IS]
Mixed Reality Toolkit | Configure | Apply UWP Capability Settings



다음의 화면에서 microphone 옵션을 선택하고 적용을 클릭한다.




홀로렌즈 툴킷이 Mixed Reality Toolkit으로 바뀌면서 애셋의 구조에도 변화가 있었다.


기존에는 | HoloToolkit | Input | Scripts | Voice 아래의 KeywordManager 스크립트를 게임 개체에 연결했다.


연결한 후 해당 개체를 선택하고 오른편 [Inspector]에서 필요한 키워드의 크기를 정하면 다음과 같은 화면을 볼 수 있었다.



이 화면에서 키워드를 만들고 키워드의 액션을 매핑하면 되었다.


달라진 방법은 이제 Speech Input Source에서 키워드를 만들고 Speech Input Handler에서 해당 키워드에 액션을 매핑시키는 방식이다.


먼저, 다음 위치에서 SpeechInputSource.cs 스크립트를 해당 개체에 연결한다.


Assets | HoloToolkit | Input | Scripts | InputSources


[Inspector]에서 Speech Input Source 화면은 다음과 같으며, 여기서 필요한 키워드를 만든다.



다음으로, 다음 위치에서 SpeechInputHandler.cs 스크립트를 해당 개체에 연결한다.


Assets | HoloToolkit | Input | Scripts | Utilities | Interaction


[Inspector]에서 Speech Input Source 화면은 다음과 같으며, 여기서 앞서 정의한 키워드와 Response를 연결한다.


물론 Response에 연결할 음성 명령 처리 스크립트는 미리 만들어 놓아야 한다.


Comment +0

2018년 Microsoft MVP Summit 참석겸 시애틀과 산호세를 포함한 샌프란시스코 여행을 위해 떠났던 9박 11일 일정을 마무리하고 3/11일 인천공항에 내리면서, 떠나기전 마무리했던 <실무에서 바로쓰는 파워셸>의 출간 현황이 궁금했더랬습니다.


3/12일, 시차 복구도 되기전에 시작한 강의로 한 주간이 파란만장할 것으로 예상했지만, 새로운 저서를 받아 볼 수 있다는 설렘으로 피곤함은 다소 상쇄되었습니다.

3/16일, 출판사에서 보낸 김이 모락모락 나는 따끈따끈한 새 책을 받았습니다. 예쁘고 앙증맞게 나온 새로운 자식을 품에 안은 기분을 잠깐 만끽하며, 책을 펴 조심스레 살펴보면서 혹시나 잘못된 부분은 없는지 다시 한번 이리저리 확인하고, 잠자리에 들때 까지 내가 쓴 책을 들고 다시 학습자의 입장으로 한 페이지 한 페이지 넘겨보다 잠든 것 같습니다.   


책의 비하인드 스토리


2013년 1월 28일, 첫 파워셸 강좌를 열었습니다.

그 이후로 매년 4~5 회의 파워셸 강의를 해오고 있습니다.

지금까지 주로 Microsoft 공식 커리큘럼에서 제공하는 자료를 이용해 강의했지만, 강의 현장에서 영문으로된 교재는 학습자의 적극적 교재 활용에 장애가 되고 있음을 안타깝게 생각하고 있었습니다.


강의 현장에서 느꼈던 아쉬움을 보충하고자 2015년말 부터 2016년 말까지 월간 마이크로소프트웨어에 파워셸을 연재하며 다소간 풀기도 했습니다.

하지만, 여전히 국내에서 파워셸을 배우고자 하는 많은 윈도우 시스템 엔지니어에게 정보를 제공하기에는 지면이 부족했습니다.

강의 현장에서 고민했던 내용과 현업에서 파워셸을 쓰려고할 때 파워셸에 대한 제대로된 이해를 제공하고, 이를 바탕으로 엔지니어들이 다양한 작업에 폭넓게 활용할 수 있었으면 하는 바램으로 집필을 시작했던 책입니다.


클라우드 시대를 사는 많은 윈도우 시스템 관리자는 데브옵스와 Coded Infra 환경에 도전 받고 있습니다.

이러한 도전에 직면한 우리를 위해 익숙한 GUI 관리 도구를 넘어 파워셸의 편리하고 다양한 기능을 쉽게 이해하고 습득하도록 파워셸의 개념 부터 차근차근 소개하고 이를 활용하는 방법을 설명했습니다.

개발 경험이 없어도 파워셸을 사용하는데 두려움을 갖지 않도록 용어와 기술에 대해 간결한 설명을 곁들였으며 [따라해보기]를 제공해 보다 역동적인 학습이 되도록 했습니다.


파워셸의 학습을 시작으로 자동화 대상에서 자동화의 주체가 되는 계기를 마련하고, IT 세계에 등장한 다양한 데브옵스 도구들로 관심의 영역을 넓힐 수 있도록 돕는 것이 이 책의 목적입니다.



이 책에 도움 주신 분들.


한국 마이크로소프트

최윤석 전무님, 백승주 부장님, MVP 리드 이소영 부장님, 이준영 부장님, 김명신 부장님, 김명관 부장님, 김영욱 부장님


마이크로소프트 MVP

김철, 배준오, 유승호, 금재용, 류동철, 고성만, 이태화, 최준, 그 외 저와 조금이라도 친분 있는 모든 MVP.


인사이트 출판사

한기성 사장님, 정수진 편집자님


KT DS

조영표 상무님, 김승진 차장님


책만 출판사

김희정 대표님


마이크로소프트웨어

조병승 편집장님, 오세용 기자님, (전) 도안구 편집장님, (전)장혜림 기자님


웹 액츄얼리

홍성신 편집장님


유니티 코리아

송민석 부장님


러닝웨이코리아

서혁진 대표님, 김근표 사장님



Comment +0

이번 포스팅은 유니티에서 Microsoft 홀로렌즈 프로그래밍 환경을 만들때 만날 수 있는 문제를 해결하는 방법을 다룬다.

이 글에서 다루는 개발 환경은 다음과 같다.


  • Visual Studio 2017 latest.
  • Unity 2017.3.1f1
  • 홀로렌즈 에뮬레이터
  • Microsoft MixedReality Toolkit



유니티 프로젝트에 Microsoft MixedRealityToolKit 패키지를 가져오면, 다음 그림에서처럼 [Mixed Reality Toolkit]메뉴가 추가된다.



1. 제일 먼저할 일은 이 메뉴의 [Apply Mixed Reality Scene Settings]와 [Apply Mixed Reality Project Settings]을 실행하는 작업이다.

이 두 가지 구성을 실행하는 과정에 다음 그림처럼 "...:MetroSupport is disabled" 같은 오류를 만날 수 있다.



2. 이 문제를 해결하려면, 유니티에서 [File]-[Build Settings]를 클릭해 다음의 화면을 실행한다.



3. [Build Settings] 창의 아래 [Platform] 목록에서 [Universal Windows Platform]을 선택하고, 오른편에서 [Open Download Page] 버튼을 클릭한다.
"Unity 2017.3.1f1 Metro Support Setup"이라는 실행파일을 다운로드 될텐데, 다운로드가 끝나면 바로 실행해 설치를 완료한다. 이 프로그램을 실행하기 전에 유니티는 종료하도록 한다.



4. 다시, [Mixed Reality Toolkit]-[Apply Mixed Reality Scene Settings]을 실행한 후 다시 [Apply Mixed Reality Project Settings] 메뉴를 선택해 [Apply Mixed Reality Project Settings] 창이 실행되면, [Apply] 버튼을 클릭한다.



앞서, 다운로드한 프로그램을 잘 실행했다면, 다음 화면처럼 스크립트 컴파일이 진행된다.



5. [Apply Mixed Reality Project Settings]을 완료한 뒤, 다시 [Build Settings] 창의 아래 [Platform] 목록에서 [Universal Windows Platform]을 선택하면, [Universal Windows Platform]의 속성이 제대로 로드된다.



Comment +0

최근에(2018/01/24일자로 기억하지만, 정확하지는 않음) Azure Service Fabric을 만드는 과정에서 설정하는 [보안] 설정에 변화가 있었습니다.

기존에는 개발과 테스트를 위해  [unsecure]라는 옵션을 선택할 수 있었지만, 이젠 무조건 인증서를 사용한 보안 접속만 허용합니다.

따라서 이 글에서는 개발과 테스트용도로 사용할 때 자체 서명 인증서를 이용하는 방법을 설명합니다.


리소스 그룹과 키 자격 증명 모음(Key Vault) 만들기

먼저 Service Fabric과 키 자격 증명 모음(Key Vault)을 관리할 리소스 그룹을 만듭니다.

여기서 사용할 리소스 그룹의 이름은 'mymicroservice-kdk'로 하겠습니다.


1. 허브에서 [리소스 그룹]을 선택하고 오른편 창 상단에서 [추가]를 클릭합니다.


2. 리소스 그룹 이름을 입력하고 리소스 그룹 위치(여기서는 '일본 동부')를 선택하고 [만들기]를 클릭합니다.




이제 키 자격 증명 모음을 만듭니다.


3. 허브에서 [새로 만들기]-[보안 + ID]를 선택하고 오른쪽 [추천]에서 [Key Vault]를 클릭합니다.


4. 다음 항목에 값을 입력합니다. 나머지는 기본 값으로 남깁니다. [만들기]를 클릭합니다.
- 이름: mymicroservicekv
- 리소스 그룹: 조금 전에 만든 그룹 사용
- 위치: 일본 동부




3. [키 자격 증명 모음]이 만들어지면, 허브에서 [리소스 그룹]-[키 자격 증명 모음]을 선택하고 키 자격 증명 모음 블레이드에서 [액세스 정책] 항목을 클릭합니다.


4. 오른편에 확장된 블레이드에서 [클릭하여 고급 액세스 정책 표시] 링크를 클릭한 다음, [배포를 위해 Azure Virtual Machines에 대한 액세스 사용] 확인란을 선택하고 [저장]을 클릭합니다.




Azure Service Fabric 만들기

이 글에서 다루는 주제인 Service Fabric 리소스를 만들어 볼 차례입니다.

Service Fabrice이 무엇인지 궁금하신 분은 다음 링크를 통해 Azure Service Fabric 개요를 살펴보시기 바랍니다.


1. 허브에서 [새로 만들기]-[계산]을 선택하고 오른쪽 [추천]에서 [서비스 패브릭 클러스터]를 클릭합니다.


2. [기본 설정 구성]에서 다음 항목에 값을 입력합니다.
- 클러스터 이름: mymicroservicesf-kdk
- 운영 체제: WindowsServer 2016-Datacenter
- 사용자 이름: steelflea
- 암호 / 암호 확인: Pa$$w0rd
- 리소스 그룹: 조금 전에 만든 그룹 사용
- 위치: 일본 동부


3. [클러스터 구성 설정]에서 노드 유형 개수를 1로 설정하고 [노드 유형 1]을 선택해 다음과 같이 설정합니다.
- 노드 유형 이름: Web
- 내구성 계층:
- 사용자 지정 끝점: 8082
- 초기 VM 확장 집합 용량: 5 (Azure 구독 유형에 따라 가능한 숫자가 다를 수 있습니다. 무료 체험 버전은 3으로 설정하세요.)




4. [클러스터 구성 설정]의 [가상 머신 크기] 항목을 선택하고 [D1_V2 표준]을 선택하고 [확인]을 클릭합니다.




5. [노드 유형 구성] 블레이드에서 [확인]을 클릭한 다음 [클러스터 구성] 블레이드에서 다시 [확인]을 클릭합니다.




6. [보안 설정 구성]에서 [Configuration Type]에 [Basic]을 선택합니다.


7. [보안 설정 구성][Key vault] 필수 설정 구성을 선택하고 조금 전에 만든 'mymicroservicekv'를 선택합니다.




8. [보안 설정 구성][Certificate Name]에 'mymicroservice-selfcert'를 입력하고 [확인]을 클릭합니다.




9. [검토, 템플릿 보기, 만들기]에서 "유효성 검사 통과"로 결정되면 [만들기]를 클릭해 서비스 패브릭 클러스터를 만듭니다.



Azure Service Fabric 연결을 위한 인증서 다운로드

관리 클라이언트에서 서비스 패브릭 클러스터에 보안 연결을 하려면 조금 전에 만든 mymicroservice-selfcert 인증서가 필요합니다.

이 인증서는 [키 자격 증명 모음]에서 다운로드 할 수 있습니다.


1. [리소스 그룹]에서 앞서 만든 'mymicroservice-kdk' 리소스 그룹을 선택하고 [mymicroservicekv] 항목을 클릭합니다.


2. [mymicroservicekv] 블레이드에서 [비밀]을 클릭하고, 앞서 만든 'mymicroservice-selfcert'를 선택합니다.




3. [mymicroservice-selfcert] 블레이드에서 [상태]가 '사용'인 현재 버전을 선택하면 확장되는 비밀 블레이드 맨 아래의 [인증서 다운로드] 버튼을 클릭해 적절한 위치에 저장합니다.




관리 클라이언트에 인증서 설치

이제 거의 마지막 작업에 가까이 왔습니다.

클라이언트 노드에 앞 단계에서 다운로드한 인증서를 설치하기 위해 MMC 스냅인을 사용합니다.


1. [Windows]+[R]을 눌러 [실행]창을 띄우고 'mmc'라고 입력한 다음 [확인]을 클릭해 [Microsoft Management Console]을 실행합니다.


2. [파일]-[스냅인 추가/제거] 메뉴를 클릭하면 실행되는 [스냅인 추가/제거] 창에서, [사용 가능한 스냅인] 항목 아래의 [인증서]를 선택하고 [추가]를 클릭합니다.




3. [인증서 스냅인] 창에서 [내 사용자 계정]을 선택하고 [마침] 버튼을 클릭합니다.




4. [스냅인 추가/제거] 창에서 [확인]을 클릭합니다.




5. 콘솔 화면의 왼편 창 [콘솔 루트]-[인증서-현재 사용자]-[신뢰할 수 있는 사용자] 항목을 마우스 오른쪽 클릭하면 표시되는 컨텍스트 메뉴에서 [모든 작업]-[가져오기]를 클릭합니다.




6. [인증서 가져오기 마법사]의 [인증서 가져오기 마법사 시작] 화면에서 [다음]을 클릭합니다.


7. [가져올 파일] 화면에서 [파일 이름] 텍스트 상자 옆 [찾아보기] 버튼을 클릭해 앞서 다운로드한 파일을 선택합니다 ([열기] 창에서 하단의 'x.509 인증서'가 선택된 드롭다운 버튼을 클릭해 '모든 파일'로 선택해야 인증서가 보인다). [다음] 버튼을 클릭합니다.




8. [개인 키 보호] 화면에서 [다음] 버튼을 클릭합니다.


9. [인증서 저장소] 화면에서 [인증서 저장소] 항목에 '신뢰할수 있는 사용자'가 선택된 것을 확인하고 [다음] 버튼을 클릭합니다.




10. [인증서 가져오기 마법사 완료] 화면에서 지정한 설정을 확인하고 [마침]을 클릭합니다.




11. 다시 콘솔 화면으로 돌아와서, 가져온 인증서가 보이는지 확인합니다.



12. 콘솔 화면의 왼편 창 [콘솔 루트]-[인증서-현재 사용자]-[개인용]에서 동일한 방식으로 인증서 가져오기를 한 번더 합니다.


Azure Service Fabric 클러스터 탐색기 보안 접속

이제 서비스 패브릭 클러스터를 만들고 인증서 준비까지 마쳤으므로 관리 클라이언트에서 서비스 패브릭 탐색기로 보안 연결이 되는지 확인해봅니다.


1. [리소스 그룹]-[mymicroservice-kdk]를 클릭하고 [mymicroservicesf-kdk]라는 이름의 서비스 패브릭 클러스터를 선택합니다.


2. [개요] 노드의 상단 [기본 정보] 섹션 아래 부분의 [Service Fabric Explorer] 링크를 클릭합니다.


3. 브라우저의 새 탭에서 보안경고(자체 서명 인증서를 사용하기 때문)를 뛰우지만, 아래의 [세부 정보]라는 링크를 클릭하면 추가 내용이 표시됩니다. 맨 아래 [웹 페이지로 이동]이라는 링크를 클릭합니다.




4. [인증서 확인] 창이 뜨면 [확인]을 클릭합니다.




5. [자격 증명 필요] 창이 뜨면 [허용]을 클릭합니다.




6. 잠깐 기다리면, 다음 화면과 같은 [Service Fabric Explorer] 화면을 만날 수 있습니다.

여기까지 왔다면, 이제 Azure Service Fabric을 사용할 준비가 끝났습니다.




Comment +0

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

확인

Remote Domain Join using PowerShell


PowerShell을 사용해 원격으로 클라이언트나 서버를 도메인에 가입시키는 방법을 설명합니다.

이 글은 다음과 같은 조건을 가정합니다.


★PowerShell 버전: 3.0 이상 ($PSversionTable 확인)

★클라이언트: Windows 7 SP1 (단 WMF 3.0 이상 설치), Windows 8 이상
★서버: Windows Server 2008 R2 (단 WMF 3.0 이상 설치), Windows 2012 이상

★도메인 컨트롤러: Windows Server 2008 R2 이상(단 WMF 3.0 이상 설치)


도메인 멤버가 될 클라이언트에 대한 원격 PowerShell을 실행할 수 있어야 하고, 클라이언트의 네트워크와 방화벽 설정을 PowerShell로 변경하기 위해서는 PowerShell 버전이 3.0 이상이어야 합니다.


1. 다음 명령으로 클라이언트에서 PowerShell 원격 리모팅을 활성화 합니다.

Enable-PSRemoting


만일 클라이언트 OS의 네트워크 프로필이 개인 네트워크가 아니라면 다음과 같은 에러 화면을 만나게 됩니다.

이때는 개인 네트워크로 프로필을 변경합니다.



2. 다음 명령으로 원격에서 가입을 수행할 서버와 클라이언트 각각의 신뢰된 호스트에 동일 IP 대역의 모든 주소나 특정 컴퓨터 이름 또는 IP 주소를 추가합니다. 이 과정이 문제가 없다면 원격 PowerShell이 실행되는지 확인합니다.


Set-Item WSMan:\localhost\Client\TrustedHosts -Value *


3. 원격 도메인 가입 명령을 수행하기 위해 넘어야 할 마지막 산이 해당 클라이언트에 방화벽 예외 설정을 하는 것입니다. 원격 관리에 대한 방화벽 예외를 설정합니다. 클라이언트에 필요한 설정은 사내에서 배포 환경을 통해 클라이언트를 배포할 때 이와 같은 설정이 미리 이뤄지도록 구성하는 것이 좋습니다.


4. 이제 원격 도메인 가입을 수행하는 PowerShell 구문은 다음과 같습니다. 이 구문의 각 옵션에 대한 설명은 도움말을 참고하시기 바랍니다.


Add-Computer -ComputerName LW-CL03 -LocalCredential LW-CL03\dokyun -DomainName mwad.local `
-OUPath "ou=Sales,ou=BigCompany,dc=mwad,dc=local" -Credential mwad\administrator `
-PassThru -Verbose -Restart -Force


명령이 성공적으로 수행되면 다음과 같은 화면을 만날 수 있습니다. 이때 클라이언트는 가입작업이 수행되고 다시 시작합니다.



Comment +0

이번 포스팅은 On-premise에서 사용중인 DB 서버의 가용성 문제로 애플리케이션의 DB 서비스를 Microsoft Azure SQL 서버로 마이그레이션했던 과정을 정리한 것입니다.

 

글에서는 On-premise에서 사용하던 DB 서버인 MS SQL Server 2012에서, SSMS(SQL Server Management Studio) 사용하여 Azure SQL 서버로 데이터베이스를 마이그레이션 합니다.

 

Azure SQL 데이터베이스는 PaaS 입니다. 이미 오랫동안 입증된 SQL 서버 기술을 통합해 클라우드에서 완벽하게 관리되는 관계형 데이터베이스 서비스를 플랫폼으로 제공하는 것입니다. 하드 드라이브와 서버, 스토리지와 같은 물리적 하드웨어는 Microsoft에서 관리하지만 데이터베이스 인스턴스와 관련 로그인, 사용자 그리고 역할  등은 서비스 이용자가 관리할 있습니다.

 

On-premise 데이터베이스를 Azure 마이그레이션 하기 위해서는 먼저 Azure SQL DB 인스턴스를 먼저 만들어야 합니다.



Azure SQL 데이터베이스 만들기


먼저, Windows Azure 포털에 로그인 합니다. 

다음 그림에서처럼 포털의 왼편 하단 메뉴에서 [SQL 데이터베이스] 선택합니다.



 가운데 상단에서 [추가] 단추를 클릭하면, 다음 그림과 같은 화면이 나옵니다.




여기서 입력할  항목은 다음과 같습니다. 빨간색 * 표시는 반드시 입력해야 하는 값입니다.


☞ 데이터베이스 이름:  프로그래밍에서 사용하거나 SSMS, Visual Studio에서 연결할 데이터베이스 이름 입니다.

구독: MSDN 구독이 있는 경우.
리소스 그룹: (만든 적이 없는 경우) 리소스 그룹 이름을 입력합니다.

소스 선택: 백업 등이 있으면 선택할 있습니다. (여기서는 데이터베이스)

서버: 기존에 만든 서버가 없다면 새로운 서버를 만듭니다. 이후에 데이터베이스를 추가할 동일한 서버 하위로 추가할 있습니다. 서버 이름과 서버 관리자 로그인, 암호, 서버의 위치 등을 결정합니다.


가격 책정 계층: 사용하려는 데이터베이스의 예상되는 트랜잭션을 기준으로 선택합니다. 나중에 변경할 있습니다. 다음 그림은 가격 책정  계층의 일부를 나타낸 것입니다.



데이터 정렬: 기본 값을 사용합니다. 값을 변경하는 경우의 영향에 관해 미리 숙지하고 변경해야 합니다.


이제 최종적으로 입력한 정보는 다음 그림과 같습니다.



하단의 [만들기] 단추를 클릭하면 다음 그림처럼 배포가 시작됩니다.



배포가 완료되면 대시보드에서 만들어진 데이터베이스 클릭하여 다음과 같은 설정화면으로 들어갈 있습니다.



설정 화면에서 "데이터베이스 연결 문자열 표시" 링크를 클릭하면 다음 그림처럼 데이터베이스 연결 문자열을 얻을 있습니다. [데이터베이스 연결 문자열] 창에서 환경에 맞는 문자열 표시 상자 오른 편의 단추를 클릭하면 클립보드로 복사됩니다.



예를 들어, ADO.NET 경우는 다음과 같은 샘플 문자열을 얻을 있습니다.


Server=tcp:transwriting.database.windows.net,1433;Database=mydb;User ID=dbadmin@transwriting;Password={your_password_here};Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;

 

여기서 {your_password_here} 부분에 조금 전에 만든 암호를 입력해서 사용합니다.



 SSMS 사용한 데이터베이스 마이그레이션


이제 On-Premise SQL 서버로 와서 SSMS 시작하고 로그인 합니다.

SSMS에서 마이그레이션하려는 데이터베이스를 오른 클릭한 [태스크] 선택하면 컨텍스트 메뉴에서 [Windows Azure SQL 데이터베이스에 데이터베이스 배포]라는 메뉴를 확인할 있습니다. 메뉴를 클릭합니다.



이제 데이터베이스 배포 마법사가 시작됩니다.



[다음] 클릭하고 조금 전에 반은 Azure SQL 서버에 연결을 하면 많은 경우 다음과 같은 연결 에러 화면을 만나게 됩니다. 원인은 SSMS에서 Azure SQL 인스턴스로 액세스할 Azure에서 해당 접근에 대한 방화벽 예외를 주지 않았기 때문입니다.



다시 Azure 포털로 돌아가서  이전에 만든 Azure SQL 서버를 클릭하면 나오는 화면에서 "방화벽 설정 표시" 링크를 클릭하면 펼쳐지는 창에서 필요한 예외 정보를 입력합니다.



설정이 끝난 다시 SSMS 배포 마법사 화면으로 돌아와 다시 연결을 시도하면 정상적으로 연결이 되는 것을 확인할 있습니다.  이후 입력할 정보는 다음과 같습니다.



☞ 새 데이터베이스 이름: Azure SQL 서버에 추가로 만들 데이터베이스 이름을 넣습니다.

Windows Azure SQL 데이터베이스 설정: Azure SQL 가격책정 계층을 선택하는 입력 항목입니다.


모든 정보를 정확히 입력했는지 확인하고 [마침] 클릭합니다.




여기까지 왔다면 모든 작업이 순조롭게 완료됩니다. 끝나고 나면 SSMS Visual Studio에서 방금 만든 Azure SQL 데이터베이스 인스턴스에 연결할 있습니다.




Comment +0

Windows Server 2016 정식 출시된 버전이 아니지만,

최근 TP4까지의 변화만 보더라도 IT Pro 마음을 설레게 하는 기술과 기능이 포함되고 있습니다.

중에서도 핵심 특징 중의 하나인 Nano Server PowerShell 통해 프로비저닝하는 방법을 살펴보겠습니다.


준비

먼저 해야할 작업은 Windows Server 2016 TP4 다운로드하는 일입니다.

다운로드는 다음 링크를 클릭하세요.


Windows Server 2016 TP4 다운로드


다운로드 받은 ISO 이미지를 마운트 하면 탐색기에서 다음과 같은 폴더 구조를 있습니다.


여기서 "NanoServer"라는 폴더를 적절한 위치로 복사합니다.

복사한 해당 폴더를 열어보면 다음과 같은 구조로 되어 있습니다.


NanoServer.wim 파일이 실제 서버 이미지 파일이며 대략 130MB 정도 되는 아주 작은 크기임을 있습니다.

Convert-WindowsImage.ps1 NanoServerImageGenerator.psm1 Nano Server 가상 머신을 만드는데 사용할 있는 cmdlet 물리 서버 프로비저닝 이미지를 만드는데 필요한 cmdlet 제공합니다.

Packages 폴더에서는 Nano Server 설치할 있는 역할과 기능을 제공합니다.

폴더 안에는 언어별 폴더가 별도로 존재합니다.


이제 PowerShell 열고 다음 명령을 입력해 폴더를 복사한 위치로 변경합니다.


 Set-Location C:\NanoServer


 다음 명령으로 Nano Server wim 파일과 관련 패키지를 복사할 폴더를 만듭니다.


 New-Item -Name Base -ItemType Directory


 결과로 생성되는 Nano Server 이미지가 저장될 위치를 다음 명령으로 만듭니다.


 New-Item -Name NanoVM -ItemType Directory


 NanoServer라는 폴더의 구조는 다음과 같이 변경되었습니다.


Nano Server 가상 머신 이미지 만들기

다음 명령구문을 실행해 가상 머신 이미지를 만들기 위해 필요한 cmdlet 로드합니다.


만든 가상 머신 이미지에 사용할 Administrator 암호를 지정하기 위해 다음 구문에서 보이는 pass 라는 변수에 암호화된 문자열 입력을 저장해 놓습니다.

$pass= Read-Host -AsSecureString "Administrator 사용할 암호를 지정하세요."


이제 앞서 준비한 내용을 가지고서 다음 명령 구문으로 새로운 Nano Server 가상 머신을 만듭니다.


 New-NanoServerImage -MediaPath h:\ -BasePath .\Base -TargetPath .\NanoVM\TLS-NANO1.vhdx `


-ComputerName TLS-NANO1 -GuestDrivers -EnableRemoteManagementPort -InterfaceNameOrIndex Ethernet `


-Ipv4Address 172.16.0.151 -Ipv4SubnetMask 255.255.255.0 -Ipv4Gateway 172.16.0.1 -Packages Microsoft-NanoServer-DSC-Package `


-Defender -AdministratorPassword $pass -Storage -Language en-us


 

매개변수에 대해서는 대략 다음과 같이 설명할 수 있을 것 같습니다.


-MediaPath h:\    <--Windows Server 2016 이미지 마운트 경로


-BasePath .\Base <--앞서 만든 Base 폴더 경로


-TargetPath .\NanoVM\TLS-NANO1.vhdx  <-- 앞서 만든 NanoVM 폴더 경로와 만들어질 VM 파일의 이름


-ComputerName TLS-NANO1 <-- 만들 VM 호스트 이름


-GuestDrivers <-- Hyper-V 통합 설치 드라이버


-EnableRemoteManagementPort <-- WinRM 통한 원격관리 (방화벽 5985 포트 설정)


-InterfaceNameOrIndex Ethernet <-- 네트워크 연결명이나 NIC 인덱스


-Packages Microsoft-NanoServer-DSC-Package <-- 설치할 패키지 지정


-Defender <-- Windows Defender 안티 멜웨어 설치


-Storage <-- 파일 서버 역할과 다른 스토리지 구성요소


명령 구문의 실행 결과는 다음과 같습니다.


Hyper-V 가상 머신 만들기

Nano Server VM 이미지가 만들어 졌다면,  Hyper-V 관리자에서 가상 머신을 만들고 VM 이미지를 연결해주면 됩니다. 

관리자 UI에서 있지만, PowerShell 통해  부분도 만들어 보겠습니다.


다음 명령 구문으로 TLS-NANO1이라는 가상 머신을 저장할 폴더 구조를 만듭니다.


New-Item -Name TLS-NANO1 -ItemType Directory -Path C:\VMs\


New-Item -Name "Virtual Hard Disks" -ItemType Directory -Path C:\VMs\TLS-NANO1\


 

앞서 만든 Nano Server 이미지를 복사하는 명령 구문은 다음과 같습니다.


Copy-Item -Path .\NanoVM\TLS-NANO1.vhdx -Destination 'C:\VMs\TLS-NANO1\Virtual Hard Disks'


끝으로, Hyper-V 새로운 가상 머신을 만듭니다.



Hyper-V 관리자에서 등록된 새로운 Nano Server 시작하고 로그온해 봅니다.


로그인한 화면은 <Nano Server Recovery Console> 입니다. 컴퓨터 이름이나 워크그룹 정보, OS, 시간, 네트워크 주소와 MAC 정보 등을 확인할 있으며, 하단의 <Networking> <Firewall> 부분에서 직접 IP 구성과 방화벽 설정을 수행할 있습니다.


Nano Server 설정

Nano Server VM 만들고 실행 시킨 로그인과 기본 설정이 정상적으로 확인이 된다면,

이제 Nano Server 도메인에 가입시키고 도메인 계정을 Nano Server 로컬 관리자 계정에  추가시켜 관리를 위한  작업을 놓습니다.


Nano Server 도메인에 가입시키는 방법은 기존에 알고 있는 오프라인 도메인 가입 방법을 활용합니다.

러기 위해 Nano Server DC 간의 TrustedHosts 목록 구성을 먼저 수행합니다.


다음 명령은 DC에서 수행합니다.


다음과 같이 Nano Server PowerShell 세션을 연결합니다.


도메인 가입을 위해 Nano Server DNS 설정을 DC DNS 변경합니다.


다음의 Djoin 명령으로 오프라인 도메인 가입을 위한 blob 파일을 DC에서 만듭니다.


방금 만들어진 오프라인 도메인 가입 파일을 Nano Server 복사합니다.

PowerShell 5.0에서 개선된 Copy-Item 사용하면 다른 세션으로 파일을 복사할 있습니다.


Nano Server 다시 PowerShell 세션을 연결하고 복사한 위치에 파일이 있는지 확인해 봅니다.


다음과 같이 djoin 명령에서 복사된 blob 파일을 이용해  Nano Server 도메인 가입을 수행하고 서버를 재시작 해줍니다.


마지막 단계 입니다.

도메인 계정에 Nano Server Administrators 그룹의 멤버십을 부여해 향후 관리를 수행하게 합니다.


이제 등록한 도메인 계정으로 Nano Server에 로그인할 수 있습니다.





Comment +0

RSMT(Remote Server Management Tools) Azure 포털과 같은 인터페이스로 제공하는 관리 도구입니다.  아직은 Preview 상태이며, Azure에서 리소소 추가("서버 관리 도구" 검색) 통해 설정할 있습니다.

 

RSMT 구성한 인터페이스로 NanoServer, Server Core 그리고 Server With GUI 관리할 있습니다. RSMT에서 지원하는 주요 관리 영역은 다음과 같습니다.

 

-시스템 구성 확인 변경

-프로세스와 서비스 관리

-리소스 사용에 대한 성능 확인

-이벤트 로그 확인

-설치된 역할과 기능 확인

-PowerShell 콘솔을 사용한 관리 자동화

 

RSMT 구성하면 다음 그림에서 보인 네트워크 연결 레이아웃처럼 Azure Public Cloud 내의 서버와  On-Premise 서버를 관리할 있습니다.  RSMT 게이트웨이를 통해 라우트 되기 때문에 구성할 RSMT 게이트웨이 서버가 별도로 필요합니다. 이미 동일한 리소스 그룹에 만든 게이트웨이가 있다면 게이트웨이를 선택해주면 됩니다.



 

지금 부터 간단하게 RSMT 구성하는 단계를 설명합니다. 편의상 Azure 상에 관리 대상 서버가 있으며, 게이트웨이와 동일한 리소스 그룹을 사용하는 것으로 봅니다. 또한 게이트웨이 서버와 관리 대상 서버는 워크그룹으로 사용되는 것으로 가정했습니다.


1. Azure 포털에 로그인하고 Test-GW(Server With GUI, Windows Server 2016 TP4) Test-Nano라는 대의 가상 머신을 만들었습니다.

 



2. 이제 RSMT 구성하기 위해 [모든 리소스] 메뉴에서 [추가] 단추를 눌러 다음 그림처럼 "서버 관리 도구" 검색하고 아래 결과 창에서 항목을 선택 합니다.



3. 오른편에 관련 정보와 구성도가 있는 화면이 표시되며 아래로 내려 [만들기] 단추를 클릭합니다.


4. [서버 관리 도구 연결 만들기] 창에서 필수 항목을 모두 채웁니다.
이때 주의 사항은 [컴퓨터 이름 항목] 도메인 환경이 아니라면 관리 대상 서버의 IP주소를 입력해야 합니다.  또한 게이트웨이 서버를 처음 설정하는 경우라면 [ 서버 관리 도구 게이트웨이 만들기] 항목에 미리 만들어 놓은 게이트웨이 서버 이름을 넣습니다.



5. 모든 정보를 정확히 넣었다면 아래 [만들기] 단추를 클릭합니다. 대시보드에서 서버 관리 도구가 배포되는 것을 확인할 있습니다.


6. 서버 관리 도구 배포를 완료한 해당 서버 관리 도구를 선택하면 다음 그림처럼 게이트웨이를 검색하지 못했다는 알림을 있습니다. 게이트웨이 서버에 필요한 소프트웨어 구성이 끝나지 않았기 때문입니다. 알림 메시지 내용 클릭합니다.


7. 이제 [게이트웨이] 구성이라는 새로운 창이 하나 펼쳐졌습니다. 여기서 게이트웨이 서버에 설치한 패키지 링크를 제공합니다. 중간 쯤에 보이는 [패키지 링크 생성]이라는 단추를 클릭하면 바로 아래 URL 채워집니다. URL 복사해서 브라우저에 던지면 압축 파일을 하나 받을 있습니다.


8. 다운 받은 압축 파일을 게이트웨이 서버로 복사하고 풀어보면 실행 프로그램 하나와 json 구성 파일 하나가 있습니다. GatewayService.msi 더블클릭해서 설치를 진행해줍니다. 별도로 설정할 정보가 없기 때문에 까지 [다음] 눌러주면 됩니다.


9. 프로그램이 정상적으로 설치되었다면 서비스에서 "Server management tools gateway"라는 항목이 생기고 실행 상태임을 확인할 있습니다.


10. 이 포스팅의 시나리오에서 워크그룹 환경을 가정했기 때문에 게이트웨이 서버와 관리 대상 서버의 신뢰된 연결을 만들어 주어야 합니다. 따라서 TrustedHosts 목록에  IP 추가합니다, 관리 대상 서버가 여러 대라면 쉼표로 분리해서 IP 여러 넣습니다.


11. 다음으로 관리 대상 서버에 원격 PowerShell 세션을 연결해 WinRM 서비스에 대한 방화벽을 열어두면 게이트웨이와 동일한 서브넷이 아닌 워크그룹 머신에도 연결할 있습니다.


12. 연결에 사용하는 계정이 로컬 Administrator 계정이라면 관리 대상 서버에서 다음 명령으로 정책을 활성화 시켜야 합니다.


13. 다시 Azure 포털로 돌아와서 배포된 서버 관리 도구를 선택해보면 알림 메시지가 변경된 것을 확인할 있습니다. 메시지의 지시 사항대로 바로 위의 [다음으로 관리]라는 단추를 클릭하여 관리 대상 서버에 연결할 계정 정보를 입력합니다.


14. 계정 정보가 정확하다면 관리 대상 서버에 연결되어 성능 정보 등을 받아오고 [설정] 창에서 필요한 작업을 있습니다.


 

아직 정식 출시는 아니지만 RSMT 통해 Windows Server 2016을 편리한 인터페이스로 관리할 있다는 점이 매력적입니다. 포스팅에서는 동일한 서브넷인 환경을 기준으로 했지만, 서브넷이 다른 경우에 대해서는 숙제로 남깁니다.

 

* 포스팅은 2016 2 24 있었던, TechNet Community 세미나의 "쉘을 통한 Windows Server 2016 관리" 세션의 내용을 보충하고자 작성한 것입니다.


Comment +0

PowerShell은 사용할 수록 멋진 도구인것 같습니다.

PowerShell로 할 수 있는 많은 작업이 있지만, 이번에는 파워포인트 파일을 PDF로 변환하는 과정을 기존의 번거로운 방식을 탈피해 한 번에 깔끔하게 할 수 있는 방법을 설명합니다.

 

[적용 환경]

● 정품 Office 2010 이상.

● Windows 7 이상의 클라이언트 운영체제로 PowerShell v3.0 이상

 

먼저 기존의 번거로운 방법으로 PDF 변환은 다음 그림과 같이 각 PPT 파일을 열고 [내보내기] 메뉴를 찾아서 파일의 횟수 만큼 실행하는 과정이 있습니다.

 

 

<그림 1> 번거로운 방법

 

이와 같은 번거로움을 PowerShell로 해결하려면, 사전 지식으로 Office Interop Object에 대한 학습이 필요합니다. 하지만 여기서는  PowerShell에서 Office 어셈블리를 가져다 프로그래밍 하듯이 사용할 수 있다는 정도만 언급합니다. PowerShell에 대해 더 궁금 하다면, 필자가 오랫동안 연재해온 <마이크로소프트웨어>의 "관리 효율성 증대를 위한 도구 PowerShell"과 Technet과 MSDN을 찾아보시기 바랍니다. 

 

다음은 PPT 파일을 PDF로 변환할 수 있도록 작성한 PowerShell 스크립트 입니다. 주석을 참고하여 대략의 흐름만 파악해보세요.

바로 사용할 수 있도록 스크립트 파일을 첨부했으니, 다운로드 받아 이용하시기 바랍니다.

 

☞ 다운로드:  PptxToPdf.ps1

 

# 파워포인트를 시작합니다.
$pptx = new-object -com powerpoint.application
#$pptx.visible = [Microsoft.Office.Core.MsoTriState]::msoTrue

 

# 파워포인트 파일이 있는 위치(폴더)를 설정합니다.
$filePath=Read-Host -Prompt '파워포인트 파일이 있는 폴더 경로를 입력하세요.(예, "C:\Test\")'
$filePath=$filePath -replace '"',''

 

# 저정한 위치(폴더)의 파워포인트 파일을 하나씩 처리 합니다.
Foreach($inFile in $(ls $filePath -Filter "*.pptx")){
 Set-ItemProperty ($filePath + $inFile) -name IsReadOnly -value $false
 $filename = Split-Path $inFile -leaf
 $file = $filename.Split(".")[0]
 $outFile = $filePath + $file + ".pdf"

 

 # 파워포인트 파일을 오픈합니다.
 $slides = $pptx.Presentations.Open($filePath + $inFile)

 

 # PDF로 저장합니다.
 $inMsg= $filePath + $file + ".pdf 생성중"
 Write-Host -Message $inMsg
 $saveOption= [Microsoft.Office.Interop.PowerPoint.PpSaveAsFileType]::ppSaveAsPDF
 $slides.SaveAs($outFile,$saveOption)

 

 # 오픈된 파워포인트 파일을 종료합니다.
 $slides.Close();
 $outMsg=$filePath + $file + ".pdf 생성 완료!"
 Write-Host $outMsg

}

 

 

<그림 2> PowerShell에서 PPT를 PDF로 변환하는 모습

 

Comment +0

[적용 버전: Exchange Server 2010/2013]

 

Exchange Server의 데이터베이스를 유지 관리할 때 디스크 사용 현황 모니터링은 운영자의 중요한 업무 중 하나 입니다.

System Center 2012 R2의 Operations Manager를 구매해서 이용하면 더 좋겠지만, 비용이나 훈련의 문제로 곤란을 겪고 있다면, 다음에 소개하는 두 종류의 PowerShell 명령으로 현재 Exchange Server 디스크 사용 현황과 데이터베이스 사용현황도 추출 할 수 있습니다.

 

이렇게 추출한 자료를 엑셀을 사용해 잘 정리하면 전체 스토리지 사용 현황을 쉽게 확인 할 수 있고, 향후 사서함 재배치나, 디스크 증설을 고려할 때 참고 할 수 있습니다.

 

여기에 소개하는 PowerShell 구문은 Exchange Management Shell에서 실행합니다.

 

먼저, Exchange 서버의 디스크 사용 현황을 추출하는 명령 구문입니다. WMI 기능을 PowerShell 커맨드렛을 통해 사용합니다.

 

WMI에 관한 자세한 설명은 다음 링크를 참고하세요.

WMI 개요

 

Get-WMIObject Win32_LogicalDisk -computer PL-MBX-01,PL-MBX-02 | Select-Object SystemName,DeviceID,VolumeName,@{Name=”size(GB)”;Expression={'{0:N1}' -f($_.size/1gb)}},@{Name=”freespace(GB);Expression={'{0:N1}' -f($_.freespace/1gb)}} | Export-CSV D:\Exchange\Disk_150701.csv

 

이 명령 구문을 실행하면 현재 Exchange Server에서 사용하면 시스템 이름, 디바이스 ID, 볼륨 이름, 볼륨 크기, 여유 공간을 추출해서 CSV 파일로 저장합니다.

 

두 번째로, 각 사서함 서버 별로 DB 현황을 가져옵니다. 이 명령 구문은 서버 별로 실행합니다. 서버가 많다면, 서버의 리스트를 먼저 뽑고 파이프로 넘겨 빨간색으로 표시한 부분을 매개변수로 받으면 됩니다.

 

Get-MailboxStatistics -Server PL-MBX-01 | Select-Object itemcount, @{expression={$_.TotalDeletedItemSize.Value.ToMB()};label="TotalDeletedItemSize(MB)"}, @{expression={$_.TotalItemSize.Value.ToMB()};label="TotalItemSize(MB)"}, Database | Export-CSV e:\test\DB_150701_mbx01.csv

 

이 명령 구문을 실행하면 각 사서함에 든 메일 항목의 전체 개수, 삭제된 항목 전체 크기, 전체 메일 항목 크기, 데이터베이스 명을 추출해서 CSV 파일로 저장합니다.

 

이렇게 뽑은 두 가지 데이터를 이용해 엑셀에서 잘 정리하면 다음과 같은 여유 공간 추이를 한 눈에 파악해볼 수 있습니다.

 

 

 

 

 

Comment +0

Comment +0

오랜만에 열린 오프라인 TechNet 커뮤니티 세미나에 첫 세션 강연자로 발표했던 자료를 공유합니다.

주로 파트너나 고객을 대상으로 긴 호흡의 강의를 위주로 하다가 짧은 시간에 AD와 ADFS, AAD 내용을 쉽게 전달해야 하는 세션이었습니다. 짧은 시간 운영을 좀 더 잘해서 하고 싶은 얘기와 보여주고 싶은 데모를 모두 했었다면 하는 아쉬움이 조금 남았습니다.

 

기회가 된다면, 다음 시간에는 시연을 중심으로 개념을 풀어가는 방식을 통해 추상적인 기본 개념을 시각적으로 확인해보는 시간을 갖도록 하겠습니다. 아무쪼록 귀한 시간을 내서  참여 해주신 모든 분들께 감사드립니다!

 

Comment +0

Outlook을 사용하다보면, 필요에 따라 규칙을 만들게 됩니다.

규칙은 잘 사용한다면, 우리의 Outlook 라이프를 아주 편리하게 만들어 줍니다.

 

종종 Outlook을 다시 설치하는 경우가 발생하는데, 사용하는 컴퓨터의 문제로 운영체제를 다시 설치하거나, Office의 문제로 Office를 다시 설치하는 경우, 규칙이 손상되는 수가 있습니다. 또는 Office의 버전을 올리거나 새로 설치하는 경우도 있습니다. 이전에 사용하던 규칙을 처음 부터 다시 입력해야 한다면, 힘들겠죠?

 

이때는 Outlook의 규칙을 백업하고 복원하는 기능을 사용할 수 있습니다.

다음 내용은 Outlook 2007을 기준으로 설명하지만, 상위버전에서도 동일합니다.

방법은 다음과 같습니다.

 

1. Outlook을 실행하고 [도구]-[규칙 및 알림]을 클릭합니다.

 

2. [규칙 및 알림] 대화 상자에서 [옵션]을 클릭합니다.

 

3. 백업을 하려는 경우는 [규칙 내보내기] 단추를 클릭하며, 백업한 규칙을 가져오려는 경우는 [규칙 가져오기] 단추를 클릭합니다.

 

 

 

 

 

Comment +0

Windows Server 2012 R2에서 가상화 도메인 컨트롤러 복제를 수행해 추가적인 도메인 컨트롤러를 만들었습니다.

그리고 주 도메인 컨트롤러에서 AD DS 서비스를 중지한 후 데이터베이스를 조각모음하고 다시 AD DS를 시작했습니다.

이후에 처음 만든 DC에서 AD 휴지통 기능을 활성화 할때 다음과 같은 메시지를 만났습니다.

 

 

[그림 1] 휴지통 기능 활성화에서 만난 메시지

 

이 메시지는 호스트 작업 마스터 역할을 하는 Microsoft Windows Server 2012 R2 도메인 컨트롤러에 대한 초기 동기화와 관련된 내용을 알려주는 것입니다.

 

Active Directory 도메인 컨트롤러는 도메인 컨트롤러가 시작할 때마다 자신의 디렉터리 파티션 (명명 컨텍스트) 인바운드 변경 내용을 복제 하려고 시도 합니다.

 

작업 마스터 역할을 제공하는 도메인 컨트롤러는 작업 마스터 역할의 상태를 복제하고 유지하는 디렉터리 파티션의 인바운드 변경을 성공적으로 복제해야 합니다.

 

작업 마스터 역할을 갖고 있는 도메인 컨트롤러를 다시 시작하면 성공적으로 동기화될 때 까지 모든 기존 파트너와 동기화를 수행하려고 합니다. 따라서 위 그림 1의 메시지는 초기동기화에 문제가 있다는 얘기입니다.

 

따라서 작업 마스터 역할의 소유자인 도메인 컨트롤러의 명령 프롬프트에서 다음 명령을 수행했고, 그림 2와 같은 결과를 얻었습니다.

 

repadmin /showreps

 

 

[그림 2] 복제 상태 1

 

출력결과를 살펴보고 도메인 컨트롤러가 가장 최근 재시작 이후에 자신의 복제 파트너로 부터 성공적으로 복제되었는지 확인하니, 문제가 있네요. 초기 동기화의 문제는 시간이 지나면 해결이 될수 있지만, 아닐 수도 있습니다.

그래서 이 부분을 다음의 그림처럼 [AD 사이트 및 서비스에서 [Replicate Now]를 클릭해 즉시 복제를 수행해봤습니다.

 

 

[그림 3] 지금 복제

 

 

[그림 4] 결과

 

다시 "repadmin /showreps"를 수행하니 이제 다음과 같이 그림 2의 문제가 해결된 것으로 나옵니다.

 

 

[그림 5] 복제 상태 2

 

 


 

Comment +0

이 글은 『마이크로소프트웨어 2013년 11월호』에 기고한 글임을 밝혀 둡니다.

 

어릴 때 많은 책을 읽은 아이들은 커서도 그 생각의 깊이와 너비에 있어 풍성한 삶을 살아간다고 한다.

최근 모바일 기기의 등장으로 인해 책을 읽는 사람이 많이 줄었다고는 하지만, 다행스럽게도 아직은 아날로그 방식의 독서에 향수를 가진 이들이 많다이들은 책을 사서 읽고 그 책을 다른 사람과 나눈다.

최근에는 페이스북에 온라인 독서 나눔 그룹이 생겨남에 따라 이러한 모임에 주체적으로 참여한 사람은 자신의 소셜 관계를 통해 지인들에게 책을 소개하는 등의 긍정적인 영향을 끼치고 있다.

 

IT 분야에서도 인문학의 중요성이 높아지면서 개발자에게도 인문학적 소양이 요구되고 있다.

이에 수십 년 전부터 읽어온 IT 관련 서적 중 블로그에 소개하거나 한번쯤 읽어볼 만한 책 5권을 연재로 소개한다.

대부분의 지식을 검색이라는 1차원적인 행위로 얻고 그 내용을 곧이곧대로 믿는 경우가 많은 상황이 펼쳐지고 있다.

의심조차 없고 직접 해보지도 않고 가져다 쓰는 행위에만 익숙해진다면 스스로 생각하고 창조하는 과정이 고통스러울 수밖에 없다.

이제 스마트폰을 내려놓고 책과 마주해야 할 때다.

 

1. Code Complete 2

이미 이 책을 읽었던 독자라면 <Code Complete> 1편의 감동을 기억할 것이다.

1편이 출판된 후 꽤 오랜 시간이 흐른 뒤에야 2편이 나온 것을 보면 저자가 무척이나 심혈을 기울인 것으로 보인다.

흥행에 성공한 영화는 보통 이전의 성공을 기대하며 2편을 내놓게 마련이나 대부분은 속편이 전작만 못하다는 평을 듣게 된다.

그러나 이 책만큼은 그러한 전철을 따르지 않았다. 1편의 감동 못지않은 또 다른 2편의 감동이 이 책에 담겨 있다.

 

<그림 1> <Code Complete 2> 스티브 맥코넬 저, 정보문화사

 

이 책은 초급 프로그래머부터 업계에서 제법 경력을 쌓은 전문가에 이르기까지 독자층이 다양하다.

어느 누가 읽더라도 소프트웨어 구현에 대한 가장 뛰어난 가르침을 얻게 될 것이다.

<Code complete 2>는 소프트웨어 개발단계 중에서도 구현에 초점을 맞추고 있다.

여기에는 단순히 코드를 작성하는 것 이상으로 많은 세부적인 작업과 이슈들이 포함돼 있는데, 심지어 프로그램을 개발하는 개발자의 인성도 좋은 코드 작성에 영향을 끼친다고 이 책은 말한다.

이 책을 통해 독자들은 아마도 무심결에 간과해왔던 사실들을 다시 한 번 짚어 보는 시간을 갖게 될 것이다.

단순히 이론적인 내용이 아니라 실천적인 가이드를 얻을 수 있다는 점이 이 책의 매력이다.

마치 중국 무협영화에서 악당을 물리치는 유일한 무공비급처럼 나쁜 코드를 분별하고 좋은 코드를 작성하는 방법을 구체적으로 제시하고 있다.

 

이 책의 저자인 맥코넬의 통찰력은 지금까지 프로그래머들에게 누구도 대답해주지 않았던 문제들에 대한 해답을 제시한다.

그의 경험으로부터 많은 것을 배우고 현업에서 자신의 모습을 뒤돌아보는 계기를 가져보자.

 

맥코넬은 이 책을 통해 좋은 프로그래머는 경험이 중요한 것이 아니라 끊임없는 연구와 학습이 중요하다고 말한다.

현 시점의 기술은 곧 구석기 시대의 유물이 될 정도로 지금 이 시대는 빠르게 변하고 있다.

오래 전의 경험을 믿고 새로운 기술을 습득하기를 게을리 하는 프로그래머는 도태된다는 메시지를 이 책을 통해 전하고 있다.

인터넷이 발달하면서 우리는 현업에서 발생하는 문제들에 대한 실마리나 해법을 여러 웹사이트에서 찾는다.

그러나 이 방법은 전문가로의 성장이란 측면에서 소프트웨어 개발자에게 독과 같다.

잡은 물고기를 얻기보다 고기를 잡는 방법을 배울 필요가 있다.

더 이상 임기응변적인 방법으로 나를 성장시킬 수 없음을 깨달아야 한다.

 

이 책의 35장에서는 프로그래머의 독서 계획을 설명하고 있다. 여기에는 개발자라면 읽고 느껴야 할 책 리스트가 소개돼 있다.

이 중에는 현재 번역된 책도 있고 그렇지 않은 책도 있다.

이 리스트 중 우리가 읽은 책이 과연 얼마나 될까?

자신의 가치를 높이는 일은 멀리 있지 않다. 실천의 문제다!

Comment +0

5월에 새로운 번역서가 출간되었습니다.

여러가지 바쁜일로 이제사 다시 한번 출간된 책에 대한 정보를 정리해서 올립니다.

이번에 발행된 Essential C# 5.0은 여러권의 번역서를 공역해온 KTDS의 안철진 과장과 작업한 결과 입니다.

 

C#이라는 언어의 매력은 마이크로소프트가 제공하는 최고의 개발도구인 Visual Studio에서 더욱 빛나보입니다.

한국의 개발 환경이 다소 독점적으로 흐르는 경향이 강하지만, 그럼에도 오래전 등장한 자바가 갈 수록 빛이 바래져가는 형국과 달리 C#은 더 매력적으로 변모해가고 있습니다.

 

데스크톱 개발 환경에서 웹 개발 환경으로, 아이폰과 함께 등장해 거대한 폭풍을 가져다준  모바일 개발환경으로의 변화가 이제는 대부분의 사용자 경험을 아우를 수 있는 유니버설 개발환경으로 진행하고 있습니다.

 

마이크로소프트가 모바일에서는 전략적으로 실기를 했지만, 모바일의 혁신은 다시 터치 인터페이스가 가미된 데스크톱 환경의 혁신을 부르고 있습니다. 여전히 산업 곳곳에서 중요한 기반 환경으로 윈도우즈 운영체제가 사용되고, 국방에서 부터 다양한 산업계, 연구소 등에서 사용되는 중요한 프로그램은 전통적인 데스크톱 프로그램입니다.  과거에 C++/MFC로 개발해왔던 환경이 이제 C#언어를 사용해 GUI 프로그램을 만들고 있습니다. 그리고 이런 프로그램의 가치는 흔히 우리가 접하는 일반  비즈니스 프로그램의 가치를 훨씬 뛰어 넘습니다. 

 

이 책은 C# 언어에 관심을 가졌던 사람이나, 이미 C#을 어느정도 접했던 사람 모두에게 유용한 정보를 제공합니다.

이 책에서는 C# 언어 자체에 집중해서 설명하며, 초보자와 중급자에게 유용한 부가 설명을 풍부하게 제공하고 있습니다.

이 책을 통해 C# 5.0 언어를 깊게 탐구해보고나서 "clr via c#"과 같은 고급 주제를 학습하시기를 권장합니다. 

 

 

책 일반 정보

》원서 제목: Essential C# 5.0

》번역서 제목: 한국어판 Essential C# 5.0

》번역서 부제: C#의 기초와 고급을 아우르는 핵심 바이블

 

》ISBN: 978-89-6077-557-2

》발행일: 2014. 5. 30

》페이지 수: 980 (커버 포함)

》출판사: 에이콘

》가격: 50,000 원

 

[참고 링크]

출판사 책 소개 페이지

》책 소개 블로그: GoDev

원서 출판사의 책 정보

》저자 소스코드: GitHub

 

 

Comment +2

  • [내용 정정]
    *P140 하단
    지역 변수 이름이 고유해야 하는 선언 공간 전체에는 원래 해당 지역 변수를 선언한 블록 내에서 감싼 모든 자식 코드 블록을 포함한다. C# 컴파일러에서는 메소드 코드 블록 내에서 직접 선언한 지역 변수 이름(또는 매개변수)을 자식 코드 블록내에서 재사용하지 못하게 한다. 예제 3.27에서 args와 playerCount는 해당 메서드 코드 블록 내에서 선언되었기 때문에, 이들은 해당 메소드 내 어느 곳에서도 다시 선언할 수 없다.

    *P141 상단
    message라는 이름은 해당 지역 변수의 범위 즉, 해당 선언을 싸고 있는 블록 전체에서의 지역 변수를 나타낸다. 마찬가지로, playerCount는 if 문을 만족하는 결과와 만족하지 않는 경우의 대안을 나타낸 두 가지 자식 블록 모두를 포함하는 블록내에서 동일한 변수를 나타낸다.

    *P143 "OR 연산자" 단원
    예제 3.31에서 사용자가 quit를 입력하거나 값을 입력하지 않고 엔터를 누르면,

  • [내용 정정]
    >>*P78
    이중 인용부호를 위한 이스케이프 시퀀스는 출력에 포함시키는 이중 인용부호로 문자열의 시작과 끝에 정의한 이중 인용부호와는 다르다.

    C#에서 @ 기호를 문자열 앞에 사용해 역슬래시를 이스케이프 시퀀스의 시작으로 해석되지 않도록 할 수 있다. 축자 문자열 리터럴의 결과는 해당 역슬래시 문자를 재해석하지 않는다. 공백 또한 @ 문자열 구문을 사용할 때 축자 문자열로 취급된다. 예를 들면, 예제 2.12의 삼각형은 역슬래시와 새줄, 들여쓰기를 포함해 정확히 콘솔에 표시된다. 결과 2.10에서 해당 결과를 나타냈다.

    [예제 2.12] 축자 문자열 리터럴을 사용해 삼각형 표시하기

    [결과 2.10]

    @ 문자가 없다면 이 코드는 컴파일도 되지 않을 것이다. 사실, 역슬래시를 제거하고 모양을 사각형으로 변경하더라도, @ 기호를 서두에 달지 않은 문자열 내에 새 줄이 들어갈 수 없기 때문에 이 코드는 여전히 컴파일이 되지 않는다.

    >>*P79 상단
    축자 문자열을 지원하는 유일한 이스케이프 시퀀스는 이중 인용부호(“”)이며, 이때는 해당 축자 문자열을 끝내는 표시가 아니다.

    ------------------------------------------------------
    언어비교: 컴파일 타임에 C++ 문자열 연결

    C++과 달리, C#은 자동으로 리터럴 문자열을 연결하지 않는다. 예를 들면 다음처럼 문자열 리터럴을 지정할 수 없다.

RODC의 가장 중요한 이점은 쓰기 가능한 도메인 컨트롤러에 비해 비교적 관리 노력을 덜 필요로 한다는 점이다

. RODC를 사용하면 인바운드 복제만 필요하고 Active Directory 데이터베이스에 잘못된 정보가 기록되지 않는

다.

 

RODC에 필요한 최소한의 관리 요구사항은 암호 복제 정책이다. 하지만, RODC도 쓰기 가능한 도메인 컨트롤러

처럼 서버 자체에 대한 유지보수 활동이 필요하다. 이런 활동에는 정기적인 시스템 상태 데이터의 백업이나 애

플리케이션이나 드라이버 업데이트 등이 있다.


비교적 본사보다 덜 안전한 지사 등에 RODC를 배포하는 목적 상 로컬에서의 관리를 위해 RODC는 로컬 관리자그

룹에 도메인 계정을 추가할 수 있는 기능을 제공한다. 여기에 도메인 계정을 추가하면 서버를 유지보수하고 해

당 계정으로 대화식 로그온이 가능해진다. 그러나 이 계정에 역할을 위임하지 않았다면 액티브 디렉터리 개체

를 추가하거나 변경하지는 못한다.

 

이런 형식의 사용자를 추가하는데 사용하는 명령이 있다.


바로 명령창에서 "dsmgmt.exe" 유틸리티를 사용해야 한다.

 

다음 그림은 도메인 계정(Adatum\Aziz)을 로컬 역할에 추가하고 추가된 계정의 역할을 확인해본 것이다.

 


[로컬의 관리자 그룹에 역할을 추가하기 위해 사용한 명령]

add <도메인 계정> Administrators


[관리자 그룹에 추가된 역할을 확인하는 명령]
show role Administrators


추가적인 정보는 다음의 TechNet 웹 사이트를 참고하면 된다.

RODC 관리자 역할 구분 구성

 

Comment +0

일전에 강의를 하면서 이런 질문을 받은 적이 있습니다.

"Active Directory에서 계정을 만들면서 성과 이름 부분에 값을 입력하면 항상 표시 이름이 <Hong GilDong>과 같은 식으로 나와서 이를 일일이 수정해야 했습니다. 계정을 생성할 때 부터 표시 이름이 <Hong.GilDong>이라고 나오도록 하는 방법이 없을까요"

이러한 문제를 해결할 수 있는 방법을 지금 부터 설명합니다.

 

이 문제를 해결하기 위해 사용하는 도구는 "ADSI Edit"라는 도구로 Windows Server 2012의 경우 다음의 그림 처럼 [서버 관리자]의 [도구]메뉴에서 실행할 수 있습니다.

 

 

[ADSI Edit]를 실행하고 [연결 설정] 대화상자에서 다음처럼 [Naming Context] 항목을 "Configuration"으로 바꿔줍니다.

 


이제 다음 화면 처럼 [CN=Configuration] 노드와 [CN=DisplaySpecifiers] 노드를 확장하고 [CN=409] 노드를 선택합니다. 오른쪽 창에 보이는 항목 중에서 [CN=user-Display]를 더블 클릭합니다. 여기서는 영어 로캘 ID인 409를 선택했지만, 한국어라면 "412"를 선택합니다.

 


[CN=user-Display Properties]창에서 [특성 편집기] 탭의 특성 항목중 [createDialog] 항목을 더블클릭합니다.

 

 

문자열 속성 편집기 대화상자에서 "성.이름"으로 표시하기 위해 다음 화면 처럼 "%<givenName>.%<sn>"를 입력합니다. 여기서 표시이름 형식을 정의에는 %<sn>, %<givenName> 및 %<initials> 3가지 파라미터 뿐이라는 사실을 기억 합시다.

확인을 눌러 모든 대화상자를 닫습니다.

 


이제 [Active Directory 사용자 및 컴퓨터] 스냅인으로 [RnD]라는 OU 아래에 새로운 계정을 만들어 보겠습니다.

 

 

다음 화면에서 주목할 수 있듯이 새로운 계정의 표시이름은 Hong.GilDong과 같은 원하는 형식으로 표시되고 있음을 알 수 있습니다.

 

Comment +0

 

오래 전 잠깐 스타트업을 경험했을 때와 비교하면 지금은 상대적으로 기본적인 스타트업의 토양이 비옥해졌다고 생각한다. 

 

비록 여러 가지 다양한 의견이 나오고는 있기는 하지만,  닷컴 1세대가 정부의 제대로된 지원 제도나 외부 투자자의 투자와 가이드는 물론이거니와, 지금처럼 이미 스타트업의 경험을 거친 관련 전문가의 풍부한 멘토링은 감히 꿈도 꾸지 못했다.

 

이제 직장이 아니라 직업이 중요한 시대 되었다.

자신의 핵심 가치를 고민하며 살아야 하는 숨가쁜 변혁의 시대에 이미 기업에서 정년의 나이는 전체 삶의 주기 가운데 고작 절반 밖에 채우지 못한다는 깨달음을 얻게 사람과, 경력이 없어 취업조차 힘든 20 초반의 열정만 가득한 젊은이들 사이에서 자신의 삶을 주도적으로 이끌고자 하는 욕구는 어느 때보다 강렬해졌다.

 

때는 벤처라 불렸고, 이제는 스타트업이라는 보다 (Cool) 단어로 불리는 자기 주도적 직업 창조의 현상은 벤처 캐피탈, 엔젤 투자자, 액셀러레이트, 인큐베이터 라는 보다 다양하고 구체화된 투자 지원 조직, 멘토 들로 인해  불꽃을 일으키 있다.

 

스타트업의 성장 주기에 맞춰 이뤄지는 체계적인 투자와 조언, 네트워킹, 교육들로 인해 스타트업의 성공 가능성은 이전보다 한층 높아졌다고 볼 수 있다. 과거에는 이와 관련된 조차 전무했지만, 이젠 스타트업과 관련된 책도 제법 출간되어 사전에 많은 시행착오를 줄일 있게 되었다.

 

얼마 전에 <스타트업 똑똑하게 시작하라>는 국내에서 쓰인 책을 접하고 틈틈이 한 번 읽었다가, 다시 한 번 꼼꼼히 읽을 수밖에 없었다. 내가 스타트업을 고민하든 그렇지 않든, 이 책에서 발로 뛰어 인터뷰하고 조사해서 실어 놓은 여러 가지 의견과 조언은 대체되지 않는 직업의 시대를 살아갈 우리에게 여러 가지 시사점을 던져준다.

 

"그들은 어떻게 시작했을까?" 흔히 스타트업을 시작한 이들이 많이 궁금해할 법한 얘기부터, 준비와 계획, 시작, 졸업(Exit)에 이르는 스타트업의 라이프사이클을 따라가며 일러주는 얘기들은 그냥 지나치기 안타까워 포스트잍을 붙이고 책의 귀퉁이를 접을 수 밖에 없었다.

 

스타트업을 시작한 창업가들이 고민할 법한 얘기를 앞서간 선배 창업가의 고민과 해결방법이나 지혜를 책에 녹여내고자 한 의도가 행간에 여실히 드러나는 책이다.

 

개인적으로 이 책을 다 읽고 나서 책에서 소개하는 여러 스타트업에서 엔젤 투자자나 벤처 캐피탈, 또는 액셀러레이터나 인큐베이터에 선정되기까지의 제품이나 서비스 기타 여러 가지 투자 적격요소를 판단 받는 과정에 대해 궁금해졌다.

 

또 그러한 과정 속에서 받았던 피드백과 피드백을 스타트업에서 어떻게 소화 시키고 투자자를 설득할 수 있는가에 대한 이야기를 좀 더 구체적으로 얘기해줬으면 하는 아쉬움이 남았지만, 그래도 책에서 얻은 여러가지 인사이트를 생각해보면 욕심이 아닌가 생각한다.

 

스타트업을 준비하는 사람을 위해 국내상황에 맞춰 가급적 여러 의견을 치우치지 않고 전달하는 잘 나온 한 권의 책으로 일독을 권하고 싶다.

Comment +0

 Windows 설치 미디어(ISO 이미지 파일이나 DVD)없이 Windows 8.1 USB 설치 미디어를 만드는 방법을 소개합니다.

여기에서 설명하는 방법은 여러분이 다음과 같은 조건을 만족한다는 전제하에 가능합니다.

 

◐ USB 설치 미디어를 만들려는 해당 Windows 8.1의 정식 라이선스 키가 있다

만들고자하는 설치 미디어의 아키텍처(x86 또는 x64)에 맞는 현재 Windows 8.1/8 또는 Windows 7을 사용하는 컴퓨터가 있다.

◐ Windows 8.1 설치 미디어를 만들기에 충분한 여유공간이 있는 USB

◐ USB 설치 미디어를 만드는 컴퓨터는 인터넷에 연결되어 있다.

 

지금 소개하는 방법은 Windows 8.1 설치 프로그램을 다운로드하여 USB나 DVD로 만드는 방법입니다. 이 방법을 실행하기 위해 먼저 Windows 8.1의 라이선스를 확인하고 다운로드를 진행한 뒤 설치 미디어를 만드는 전체 과정을 진행하는 프로그램이 필요합니다.

이 프로그램은 WindowsSetupBox.exe(링크 클릭)라는 마이크로소프트에서 배포하는 무료 프로그램입니다.

 

이제 진행 과정을 간단히 스크린샷으로 소개하겠습니다.

 

1. 다운로드한 WindowsSetupBox.exe를 더블클릭해 실행하면 제일 먼저 유효한 Windows 8.1 라이선스 입력을 요구합니다.

 

2. 라이선스가 확인되면 이제 Windows 8.1 다운로드가 진행됩니다. 사용하는 네트워크 환경에 따라 시간이 걸릴 수 있습니다.

 

3.다운로드가 완료후 설치파일에 대한 준비과정이 진행됩니다.

 

4. 설치파일에 대한 모든 준비가 끝나고 나면 이제 Windows 8.1 설치에 대한 3가지 옵션 중 하나를 선택할 수 있습니다.
 - 지금 설치: 현재 운영체제에 대한 바로 업그레이드를 진행할 수 있습니다.
 - 미디어를 만들어 설치: USB 설치 미디어나 DVD 설치를 위한 ISO 이미지를 만드는 작업을 진행할 수 있습니다.
 - 데스크톱에서 나중에 설치: 향후에 설치하기 위한 옵션 입니다.

 

 

5. 앞서 [미디어를 만들어 설치]를 선택하고, 여기서는 [USB 플래시 드라이브] 옵션을 선택합니다.

 

6. 연결된 USB 드라이브를 선택할 수 있고, 진행하게되면 선택된 USB 드라이브의 데이터는 모두 지워집니다.

 

7. USB 플래시 드라이브를 만드는 과정이 진행됩니다.

 

8. USB 플래시 드라이브 준비가 모두 끝나고 제품 키를 다시 한번 확인 합니다.


이상의 과정을 거쳐 만든 USB 설치 미디어를 Windows 8.1을 설치하기 원하는 장치에 연결한 후 USB 부팅을 진행하면 새로운 Windows 8.1의 세계로 들어갈 수 있습니다.

 

 

Comment +0

얼마전에 임백준님의 <폴리글랏 프로그래밍>이라는 책이 출간되었더군요.

패러다임을 달리하는 여러 언어를 자유롭게 구사하는 시대에 프로그래머의 학습 역량이라는 중요한 시점을 던지는 책이었습니다.

 

개인적으로 2014년 봄은 서울에서 용인으로 새로 거주지를 옮기고, 아들내미는 드디어 중학생이 되는 뜻 깊은 시작이 되었습니다. 이사를 끝낸 시점과 거의 동시에 새로 번역한 책도 출간되어 새로운 거주지에서 받게되니 처음 책을 번역하고 받았을 때의 느낌이 살짝 듭니다.

 

<Learning Xamarin.iOS 프로그래밍>은 C#과 .NET을 이용해 iOS 프로그래밍을 하는 방법에 대한 책입니다. 폴리글랏 프로그래밍 시대에 자바 일색인 한국의 IT 개발환경에 C#과 오픈소스 프레임워크인 모노, Xamarin.iOS를 사용해서 iOS 애플리케이션을 개발하는 방법은 신선한 자극이 될 수 있지 않을까요?

 

 

 

▩ 책 일반 정보

 

원서 제목: Learning MonoTouch

원서 부제: A Hand-On Guide to Building iOS Application with C# and .NET

번역서 제목:    Learning Xamarin.iOS 프로그래밍

번역서 부제: C#과 .NET을 이용한 iOS 앱 개발 가이드

 

ISBN: 978-89-5674-609-8

발행일: 2014. 2. 26

페이지수: 414 (커버포함)

출판사: 정보문화사

가격: 23000원

 

[참고 링크]

1. 출판사 책 소개 페이지

2. 역자 블로그: GoDev

3. 원서 출판사의 책 정보:  Addison Wesley

4. 저자 소스코드: GitHub

Comment +0

이 글은 다음과 같은 환경을 가정합니다.

 

▣ 백엔드: Exchange Server 2010

▣ 프론트엔드: Windows 7 + Outlook 2007

 

아웃룩에서 사용하는 주소록이 갱신되지 않은 경우 다음과 같은 현상이 나타날 수 있습니다.

 

1. 리턴 메일이 수신 되고 메일이 발송되지 않습니다.
2. 메일 발송후 “메일을 정상적으로 발송할 수 없습니다”라는 메시지가 출력됩니다.
3. 아웃룩 주소록에 변경되기 이전 정보가 보입니다.

 

이러한 현상의 원인은 수신될 사용자의 정보가 변경되었으나 기존 Outlook의 주소록 캐시 정보가 남아 있는 경우에 잘못된 주소로 메일이 발송되었거나 주소록이 업데이트 되지 않은 경우 아웃룩 주소록의 이전 주소를 이용해 메일을 발송했을 수 있습니다.

 

이러한 문제는 다음의 두 가지 중 하나를 시도하거나 두 가지를 모두 시도했을 때 해결할 수 있습니다.

 

[1] 오프라인 주소록 업데이트

Outlook을 실행 후 상단 [도구] > [보내기/받기] > [주소록 다운로드]를 선택하고 아래 그림과 같이 설정합니다.

 

 

[2] 주소록 캐시 삭제

메일 주소의 개인 cache 파일을 삭제합니다. Outlook를 종료하신 상태에서 탐색기를 실행하신 후 주소 창에 아래 경로로 이동 후 확장자가 NK2인 파일을 삭제 합니다. (프로필명.NK2 형식으로 되어 있습니다.)

 

%userprofile%\application data\microsoft\outlook

 

 

 

Comment +1

이번 글에서는 그룹 정책을 사용해 소프트웨어를 배포하는 GPSI 기능을 살펴봅니다. GPSI를 통한 소프트웨어 배포는 전체 조직에 소프트웨어를 배포할 수 있는 방법입니다. 단 이 방법으로 배포 가능한 소프트웨어는 마이크로소프트 인스톨러(msi)파일만 가능합니다. 

 

이 글에서 설명하는 시스템 환경은 다음과 같다고 가정합니다.

 

▣ 도메인 컨트롤러: Windows Server 2008 R2

▣ 소프트웨어 배포 서버: Windows Server 2008 R2 (NYC-SVR1)

▣ 테스트 클라이언트: Windows 7 (NYC-CL1)

▣ 배포할 소프트웨어: XML Notepad 2007

 

배포를 위한 그룹 만들기

먼저 [Active Directory 사용자 및 컴퓨터] 스냅인에서 소프트웨어를 배포하기 위한 규칙 그룹을 만듭니다. 이 그룹의 이름은 "APP_XML Notepad"로 하겠습니다.

 

 

다음으로 만든 APP_XML Notepad 그룹의 속성에서 멤버 탭을 선택하고 소프트웨어 배포 대상이 되는 "NYC-CL1"이라는 클라이언트를 추가합니다.

 

 

소프트웨어 배포를 위한 공유 폴더 설정

이제 배포하고자 하는 소프트웨어를 공유할 "Software"라는 공유 폴더를 배포서버인 NYC-SVR1에 설정합니다. 이 때 공유 폴더의 NTFS 권한은 다음의 그림과 같이 설정합니다.  기존 상속을 해제하고 일부 계정을 제거한뒤 "Authenticated Users"를 추가했습니다.

 

 

다음으로 공유 권한에서 Everyone을 추가하고 전체권한을 부여합니다. 물론 접근을 보다 제한하고 싶다면 별도의 규칙 보안그룹을 만들어 추가하면 됩니다. 이때 NTFS 권한과 공유 권한 간의 관계를 잘 고려해야 합니다. 이 부분은 다음 번에 별도의 글로 한 번 다루도록 하겠습니다.

 

 

마지막으로 배포할 소프트웨어를 넣어 둘 자식 폴더를 Software 폴더 아래에 "XML Notepad"라는 이름을 생성하고 해당 폴더의 NTFS 권한을 다음 그림과 같이 설정합니다. 여기서 앞서 만든 APP_XML Notepad라는 그룹을 추가하고 필요한 권한을 부여했습니다.

 

 

다음과 같이 배포할 소프트웨어를 앞서 만든 XML Notepad에 복사해둡니다.

 

 

그룹 정책 만들기

배포할 소프트웨어에 대한 준비가 모두 끝났으니, 배포를 위한 그룹 정책을 만들어 보겠습니다. 도메인 컨트롤러에서 그룹 정책 관리 콘솔(GPMC)를 열고 "XML Notepad"라는 그룹 정책을 만들어 "Client Computers"라는 OU에 연결합니다.

 

 

만든 그룹 정책을 편집하기 위해 GPMC에서 해당 그룹정책을 오른 클릭하고 그룹정책 편집기(GPME)를 실행합니다. 

 

 

실행한 GPME에서 다음 그림에서 처럼 [Computer Configuration > Policies > Software Settings]에서 [Software Install]를 마우스 오른 클릭하고 [Package]를 선택합니다.

 

 

배포할 소프트웨어를 지정하는 대화상자에서 앞서 준비한 공유폴더의 소프트웨어를 선택하면,  다음과 같은 [Deploy Software] 대화상자가 실행되며 필요한 옵션을 선택할 수 있습니다. [고급]을 선택한다면 추가적인 설정이 가능합니다.  GPME의 Computer Configuration에서 GPSI는 [할당]과 [고급]간의 선택만 가능합니다. 반대로 User Configuration에서는 [게시] 옵션도 선택 가능합니다.

모든 설정이 끝나면 GPME를 종료합니다.

 

 

이제 그룹 정책을 적용할 범위를 필터링하기 위해 GPMC로 돌아와서 [Security Filtering] 섹션에서 기본 "Authenticated Users"를 제거하고 앞서 만든 "APP_XML Notepad" 규칙 그룹을 추가합니다.

 

 

 

그룹 정책으로 소프트웨어 배포 테스트

지금까지 배포할 소프트웨어 준비와 필요한 그룹 정책을 생성하고 편집했습니다. 최종적으로 해당 그룹 정책이 잘 동작하는지 바로 테스트 해보기 위해 클라이언트 컴퓨터인  NYC-CL1의 도스 명령창에서 "gpupdate /force"를 실행하고 필요한 경우 해당 컴퓨터를 재시작 합니다.

 

 

해당 컴퓨터에 그룹정책이 성공적으로 반영되었다면, 다음 화면에서 처럼 바탕화면에 XML Notepad 2007이 설치되고 [Start > Program Files]에도 해당 프로그램이 설치된것을 확인할 수 있습니다.

 

 

 

 

 

 

 

 

Comment +1

  • 필라이프 2015.05.13 15:06 신고

    안녕하세요 포스팅 잘 보았습니다.
    별도의 그룹을 생성해서 하는 이유가 있는지요?
    보통 배포를 할때에 특정 OU에 소속되어 있는 computer 들을 대상으로 배포할텐데..
    그룹으로 computer를 다시 지정하신 이유가 무엇인지 궁금합니다..

지금 설명하는 내용은 다음과 같은 조건을 가정합니다.

 

※아웃룩 2003 이상을 사용하고 있으며 Exchange Server 2003 이상에 MAPI 접속 사용.

 

 

아웃룩을 사용하면서 다량의 메일을 지울때가 있는데, 이렇게 지운 메일은 통상 [지운 편지합]으로 이동합니다.

실제 사서함의 용량 확보를 위해서는 이 지운 편지함도 비워야되기 때문에, 한 번씩 메일을 지우고 다시 지운 편지함을 비우다 보면 다음과 같은 경고 메시지를 볼 때가 있습니다.

 

 

이 동기화 경고 메시지는 다음과 같은 원인으로 발생합니다.

 

[원인]

메일을 아웃룩에서 삭제하여 지운 편지함으로 이동된 경우 서버에도 동일한 형태로 이동이 되어야합니다. 따라서 동기화를 위해 서버에서 지운 편지함으로 이동이 완료되지 않았기 때문에 작업이 완료될때 까지 기다려야 합니다. 

 

따라서 해결 방안은 사용자의 Outlook과 Exchange 서버가 모두 동기화될 때까지 잠깐 기다렸다가 다시 작업을 시도하면 됩니다.

Comment +0