프리지아 랩

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

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

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