728x90

Get-ActiveExchangeUsers.ps1


https://ingogegenwarth.wordpress.com/2016/05/09/get-activeexchangeusers-2-0/




728x90
728x90

Get-MailboxStatistics cmdlet을 이용하여  Exchange 사서함 사용량 체크 후 메일로 발송 하는 방법에 대하여 알아 보도록 하겠습니다.

아래 내용은 Get-MailboxStatistics cmdlet을 이용하여 각각의 사서함의 사용량을 체크 후 CSV파일로 저장을 하여 저장된 파일을 SMTP를 사용하여 메일 서버관리자 또는 사용량의 관리가 필요한 사람에게 메일을 발송하는 스크립입니다.

#파일 저장시 파일 이름에 날짜를 찍기 위한 변수  
$date = get-date -Format yyyy-MM-dd
Get-MailboxStatistics -database "체크할데이터베이스" | ft displayname, totalitemsize, itemcount | Out-File -FilePath c:\mailbox\mailbox_$date.csv
$FromAddress = "발송자의메일주소"
$ToAddress = "받는사람의메일주소"
$MessageSubject = "$date Exchange2010 사서함 사용량 입니다."
$MessageBody = "$date Exchange2010 사서함 사용량 입니다. "
$SendingServer = "보내는메일서버주소"$SMTPMessage = New-Object System.Net.Mail.MailMessage $FromAddress, $ToAddress,
$MessageSubject, $MessageBody
$i = "get-date"
$Attachment = New-Object Net.Mail.Attachment("c:\mailbox\mailbox_$date.csv")
$SMTPMessage.Attachments.Add($Attachment)$SMTPClient = New-Object System.Net.Mail.SMTPClient $SendingServer
$SMTPClient.Send($SMTPMessage)

지정한 관리자의 메일로 사용량이 나와있는 CSV파일이 첨부되어 발송된 부분의 확인이 가능합니다.



해당 스크립트의 경우 Exchange powershell을 이용하여 직접 실행 및 아래와 같이 Bat파일로 해당 스크립트를 호출하여 예약된 작업으로 특정 시간에 실행이 되도록 실행이 가능 합니다.

PowerShell.exe -command ". 'c:\Program Files\Microsoft\Exchange Server\V14\bin\RemoteExchange.ps1'; Connect-ExchangeServer -auto; C:\mail-out.ps1"


여기까지 Exchange 사서함 사용량 메일로 발송하는 방법에 대하여 알아 보았습니다.

728x90
728x90

New-Mailbox Cmdlet을 이용하여 대량으로 사용자 계정 등록하기에 대하여 알아 보도록 하겠습니다.

New-mailbox 를 통하여 계정을 하나하나 생성이 가능하지만 아래와 같은 스크립트와 생성이 필요한 사용자의 계정정보가 포함됨 CSV파일을 임포트 하여 대량으로 계정의 등록이 가능합니다.


임포트할 CSV 파일은 아래와 같이 만들어 줍니다.



변수 $password 선언은 패스워드의 경우 암호화 처리가 되어 저장이 됨으로 변수를 선언하여 직접 입력 받도록  설정합니다.


$password = Read-Host "Enter password" -AsSecureString

$DB = import-csv $args[0]

foreach ($i in $db)

{

New-Mailbox -UserPrincipalName ($i.id + "@test-domain.co.kr") -Alias $i.Alias -Database "Mailbox Database 1602724241" -Name $i.Name -OrganizationalUnit Users -Password $password -FirstName $i.FirstName -LastName $i.LastName -DisplayName $i.DisplayName -ResetPasswordOnNextLogon $false

}



이상으로  New-Mailbox Cmdlet을 이용한 대량 사용자 계정 등록하기에 대하여 알아 보았습니다.

728x90
728x90

Exchange mail 송수신 내역을 메일로 발송하는 방법에 대하여 알아 보도록 하겠습니다.

메일서버의 운영중 메일서버의 전체 사용량의 확인 및 특정 사용자의 메일 송수신 카운트를 집계하는 스크립트이며 특정 기간동안에 송수신한 메일의 수를 집계하여 각각의 사용자의 메일 사용량을 확인 할 수 있습니다.

# 각각의 로그에 대한 가져오기 시작 날짜 설정
$Start = (get-date -Date "2010-09-01" -Hour 00 -Minute 00 -Second 00)

# 각각의 로그에 대한 가져오기 끝 날짜 설정
$End = (get-date -Date "2010-09-30" -Hour 23 -Minute 59 -Second 59)

# CSV파일 저장시 파일 이름에 날짜를 찍기 위한 변수   
$date = get-date -Format yyyy-MM-dd

# 선언한 배열에 결과를 저장 
$Results = @()

# CAS01 서버에서 보낸 메시지 가져오기  
$Send = Get-MessageTrackingLog -Server cas01 -Start $Start -End $End -resultsize unlimited | Where { $_.EventID -eq 'Send' -or $_.EventID -eq 'Deliver' }

# CAS01 서버에서 받은 메시지 가져오기 
$Received = Get-MessageTrackingLog -Server cas01 -Start $Start -End $End -resultsize unlimited | Where { $_.EventID -eq 'Receive' -or $_.EventID -eq 'TRANSFER' }

# 검색할 사서함의 호출
$Mailboxes = Get-Mailbox

# 카운터에 대한 진행 표시줄
$Total = $Mailboxes.Count
$Count = 1

# 각각의 사서함의 통계를 내기위한 루프문 
$Mailboxes | Sort-Object DisplayName | ForEach-Object {
 # 업데이트
 $PercentComplete = $Count / $Total * 100
 Write-Progress -Activity "Message Tracking Log Search" -Status "Processing mailboxes" -percentComplete $PercentComplete

 # 출력물의 이름에 대한 각각의 개체 이름 표시
 $Stats = "" | Select-Object Name,Send,Received

 # 사서함의 이메일 주소 
 $Email = $_.WindowsEmailAddress.ToString()

 # 사서함 개체의 이름 속성 표시
 $Stats.Name = $_.DisplayName

 # 보낸 메시지 속성 개수 카운트
 $Stats.Send = ($Send | Where-Object { ($_.EventId -eq "Send" -or $_.EventID -eq "Deliver") -and ($_.Sender -eq $email) }).Count

 # 받은 메시지 속성 개수 카운트
 $Stats.Received = ($Received | Where-Object { ($_.EventId -eq "RECEIVE") -and ($_.Recipients -match $email) }).Count

 # 배열 검색 결과에 해당 사서함에 대한 통계를 추가
 $Results += $Stats

 # 카운터 값에 + 1 
 $Count += 1
}

# 출력 결과를 UTF-8로 인코딩 하여 C:\send\send_receive_log-$date.csv 경로에 CSV파일로 저장
$Results | Export-CSV C:\send\send_receive_log-$date.csv -NoType -Encoding UTF8

# 메일 발송 하기
$FromAddress = "보내는메일주소"
$ToAddress = "받는메일주소"
$MessageSubject = "$date Exchange2010 송수신 통계 내역 입니다."
$MessageBody = "$date Exchange2010 송수신 통계 내역 입니다."
$SendingServer = "보내는메일서버이름"
$SMTPMessage = New-Object System.Net.Mail.MailMessage $FromAddress, $ToAddress, 
$MessageSubject, $MessageBody
$i = "get-date"
$Attachment = New-Object Net.Mail.Attachment("C:\send\send_receive_log-$date.csv")
$SMTPMessage.Attachments.Add($Attachment)
$SMTPClient = New-Object System.Net.Mail.SMTPClient $SendingServer
$SMTPClient.Send($SMTPMessage)


지정한 관리자의 메일로 사용량이 나와있는 CSV파일이 첨부되어 발송된 부분의 확인이 가능합니다.



해당 스크립트의 경우 Exchange powershell을 이용하여 직접 실행 및 아래와 같이 Bat파일로 해당 스크립트를 호출하여 예약된 작업으로 특정 시간에 실행이 되도록 실행이 가능 합니다.

PowerShell.exe -command ". 'c:\Program Files\Microsoft\Exchange Server\V14\bin\RemoteExchange.ps1'; Connect-ExchangeServer -auto; C:\send_log.ps1"


여기까지 Exchange 송수신 내역 메일로 발송하는 방법에 대하여 알아 보았습니다.

728x90
728x90

Search-Mailbox -Identity tmkim -SearchQuery 'from:sojuhyang@gmail.com' -TargetMailbox administra

tor -TargetFolder Searchlogs -LogLevel Full -LogOnly


Search-Mailbox -Identity tmkim -SearchQuery 'Subject:솟아나라대한민국' -TargetMailbox administra

tor -TargetFolder Searchlogs -LogLevel Full -LogOnly

728x90
728x90

Get-DriveSpace.ps1

List the percentage of free disk space for multiple computers.

# Display the drive space on all drives
# if any have < 20% free space, log to a file for review

function DriveSpace {
param( [string] $strComputer) 
"$strComputer ---- Free Space (percentage) ----"

# Does the server responds to a ping (otherwise the WMI queries will fail)

$query = "select * from win32_pingstatus where address = '$strComputer'"
$result = Get-WmiObject -query $query
if ($result.protocoladdress) {

    # Get the Disks for this computer
    $colDisks = get-wmiobject Win32_LogicalDisk -computername $strComputer -Filter "DriveType = 3"

    # For each disk calculate the free space
    foreach ($disk in $colDisks) {
       if ($disk.size -gt 0) {$PercentFree = [Math]::round((($disk.freespace/$disk.size) * 100))}
       else {$PercentFree = 0}

  $Drive = $disk.DeviceID
       "$strComputer - $Drive - $PercentFree"

       # if  < 20% free space, log to a file
       if ($PercentFree -le 20) {"$strComputer - $Drive - $PercentFree" | out-file -append -filepath "C:\logs\Drive Space.txt"}
    }
}
}

foreach ($computer in cat C:\batch\servers.txt) {DriveSpace "$computer"}

This assumes you have saved a list of computernames to check in the file 'servers.txt'

Example

Assuming the script above is saved in the current directory as Get-DriveSpace.ps1:

PS C:\> ./Get-DriveSpace

728x90
728x90

(Get-DatabaseAvailabilityGroup) | ForEach {$_.Servers | ForEach {Get-MailboxDatabaseCopyStatus -Server $_}}

(Get-DatabaseAvailabilityGroup) | ForEach {$_.Servers | ForEach {Test-ReplicationHealth -Server $_}}

728x90
728x90

Export AD Users to CSV using Powershell Script

Description:

We can easily export Active Directory users to CSV file using Powershell cmdlets Get-ADUser and Export-CSV. In this article, I am going to write Powershell script samples to Export AD Users to CSV file and Export AD Users from Specific OU to CSV file using Powershell Script.

Summary:

Export AD Users to CSV using Powershell

The following command export the selected properties of all Active Directory users to CSV file. You can add more attributes as per your wish, refer this article:Get-ADUser Default and Extended Properties to know more supported AD attributes. 
1
2
3
4
Import-Module ActiveDirectory
Get-ADUser -Filter * -Properties * |
 Select -Property Name,Mail,Department |
 Export-CSV "C:\\AllADUsers.csv" -NoTypeInformation -Encoding UTF8
Export AD Users to CSV using Powershell Script

Export AD Users to CSV with Filter using Powershell

This command export the selected properties to CSV file of AD users whose City contains the text 'Austin'. 
Note: Refer this article:Get-ADUser Default and Extended Properties to know more supported AD attributes. 
1
2
3
4
Import-Module ActiveDirectory
Get-ADUser -Filter 'City -like "*Austin*"' -Properties * |
  Select -Property Name,City,Mail,Department,DistinguishedName |
  Export-CSV "C:\\ADUsers.csv" -NoTypeInformation -Encoding UTF8

Export AD Users by LDAP Filter:

Instead of SQL Like Filter, you can also use LDAP Filter to select only required users. Refer this article (AD LDAP Filter Examples) to get more LDAP filter examples. The below command exports all the users who are belongs to Admin department. 
1
2
3
4
Import-Module ActiveDirectory
Get-ADUser -LDAPFilter '(Department=*Admin*)' -Properties * |
  Select -Property Name,City,Mail,Department,DistinguishedName |
  Export-CSV "C:\\AdminUsers.csv" -NoTypeInformation -Encoding UTF8

Export ADUsers CSV output:

Get-ADUser - Export Selected properties to CSV file

Export AD Users from specific OU to CSV using Powershell

We can set target OU scope by using the parameter SearchBase. This following command select all the AD users from the Organization Unit 'Austin' and export it to CSV file.
1
2
3
4
Import-Module ActiveDirectory
Get-ADUser -Filter * -SearchBase "OU=Austin,DC=TestDomain,DC=Local" -Properties * |
 Select -Property Name,Mail,Department |
 Export-CSV "C:\\AustinUsers.csv" -NoTypeInformation -Encoding UTF8
Export AD Users from specific OU to CSV using Powershell Script

Thanks,
Morgan
Software Developer

====================================================================================
Import-CSV -Path .\csv_file.csv | ForEach-Object { 
    Get-ADUser -Filter "ProxyAddresses -like '*$($_.name)*'"  -Properties ProxyAddresses,EmailAddress | select EmailAddress,SamAccountName 
} | Export-CSV .\results.csv -NoTypeInformation



====================================================================================


Import-CSV -Path .\csv_file.csv | ForEach-Object { 
Get-Recipient $_ |
Select PrimarySMTPAddress,SamAccountName 
} | Export-CSV .\results.csv -NoTypeInformation




============================================================================================

get-aduser -Properties * -Filter * | ? {$_.telephonenumber -ne $null} | select displayname,samacco

untname,telephonenumber,mobile | export-csv -Path d:\alluser.csv -NoTypeInformation -Encoding UTF8


foreach ($user in (get-content d:\telephone.txt)){Get-ADUser -Filter {telephoneNumber -like $user}

 -Properties * |select displayname, Samaccountname,telephonenumber >> d:\telephone_user.txt}

728x90
728x90

https://play.google.com/store/apps/details?id=com.netmarble.lineageII
728x90
728x90

2. PBX와의 연동을 위한 트렁크 이해 
가정을 위한 전화 서비스는 전화국의 PBX에 직접 연결되지만, 빌딩이나 일반 기업 내의 전화 서비스를 위해서는 PBX가 건물이나 기업의 통신실에 위치합니다. 전화기에서 시작한 전화선은 IDF와 MDF를 지나 PBX의 내선카드와 연결됩니다. PBX는 외부와의 통신을 위해 국선카드를 통해 전화국과 연결됩니다.  




기업과 건물에 직접 PBX를 설치하면 수천대의 전화기를 위해 수천개의 전화선을 전화국까지 연결할 필요가 없으므로 비용효과적이고, 기업 내의 다양한 전화 부가서비스를 직접 구현할 수 있습니다. PBX가 기업이나 빌딩에 위치할 경우 전화국과 PBX를 연결해야 합니다. 기본적으로는 PBX와 PBX간의 연결을 트렁크연동이라 하며, 가장 많이 사용하는 공통선을 E1 트렁크라고 합니다. 


우리나라는 E1 트렁크 연동을 가장 많이 사용하므로 UC 엔지니어는 E1 트렁크에 대해 기본적으로 알고 있어야 합니다. UC 엔지니어가 IP Telephony나 UC 구축 시에 Voice Gateway 와 PBX 연동을 항상하기 때문입니다. 

 


E1은 32개의 채널로 이루어져 있으며 세부 채널 정보는 다음과 같습니다.

  • Time slot 0 : Framing 정보 교환
    프레이밍 정보로 프레임의 시작 및 동기 신호를 교환

  • Time slot 16 : Signaling 정보 교환
    시그널링 정보로 호를 연결하기 위한 전화번호나 상태정보등을 교환합니다. 

  • 나머지 slot : Media (음성 ) 교환
    나머지 채널에는 실제 음성만을 전달합니다. 


E1의 한 채널은 64Kbps의 PCM 음성이 전달될 수 있는 대역폭으로 64kbps*32 채널 = 2.048Mbps의 대역폭이 됩니다. E1 카드의 한 포트는 동시에 30개 호를 송수신 할 수 있습니다. 우리나라에서는 E1 트렁크에 대해서만 이해하면 되지만, 해외 연동을 할 경우에는 북미방식의 T1도 알아둘 필요가 있으로 E1을 기준으로 간단하게 비교한 표는 다음과 같습니다.



 구분

 T1 (ITU-T G.733)

  E1 (ITU-T G.723)

 샘플링 주파수

 8 kHz

  8 kHz

 채널 대역폭

 DS0 64Kpbs

  DS0 64Kpbs

 프레임당 채널 슬랏

 24

 32

 bits per Frame

 24 * 8 +1 = 193

  32 * 8 = 256

 System Bit rate

 8000 * 193 = 1.544 Mbps

 8000 * 256 = 2.048 Mbps

 시그널링 채널

 23번 채널

 16번 채널

 사용 지역 

 북미방식

  유럽 방식



T1 / E1 은 모두 시분할 방식으로 전달하므로 하나의 프레임을 지속적으로 초당 8000개를 전송합니다. T1의 bits per Frame 에서 +1은 프레이밍 비트입니다. 


PBX의 E1 카드도 시그널링 방식에 따라 E1 R2 와 ISDN E1 PRI 방식이 있지만, 이제는 E1 R2 방식을 거의 사용하지 않고 ISDN PRI 방식을 이용합니다. 




3. E.164 주소체계

전화망(PSTN)의 주요 구성요소는 PBX (교환기)이며, PBX는 전화번호를 인식하여 목적지를 연결하는 역할해 줍니다. 우리가 전세계 어디라도 전화를 걸수 있는 것은 단지 물리적인 연결 구조 외에 논리적인 주소체계가 있기 때문입니다. 


모든 전화국이 체계적으로 연결되기 위한 주소체계는 1996년 12월 31일을 기준으로  ITU-T E.164를 사용하도록 규정되었습니다. 이 번호 규정은 국제 통신에 사용하는 번호의 최대 자릿수를 12자리로 규정한 E.163 권고안에 추가적인 주소공간을 확보하기 위하여 국제 통신에 사용되는 번호를 최대 16자리로 확장하였습니다. 


E.164 전화번호 체계를 이용하는 우리나라의 전화번호는 다음과 같은 체계로 구성됩니다. 


    • CC (Country Code) : 국가 코드 (두자리)

    • AN ( Area Number) : 지역번호 (두자리 또는 세자리)

    • LN (Local Number) : 국번호 (세자리 또는 네자리)

    • SN (Subscriber Number) : 가입자 번호 (네자리)

전화를 걸 때 사무실에서는 4자리의 SN 넘버로만 통화하고, 같은 지역에서는 LN+SN으로 통화합니다. 시외로 전화를 걸떄는 AN+LN+SN 번호를 사용하고, 국제전화의 경우에는 CC 번호를 이용합니다. 통화 시도 시에 모든 번호를 누를 필요가 없는 이유는 PBX가 계층 (Hierarchy) 구조로 되어 있기 때문입니다.  

 



8. 시그널링의 이해

시그널링 (Signaling, 신호교환)은 전화망에서 호의 접속과 해제 또는 호의 제어 및 관리에 관련된 정보의 교환으로 정의됩니다. 예를 들면, 011-1234-5678라는 전화번호를 다이얼을 하면 발신자는 링백톤을 듣게 되고, 수신자는 링이 울리는 전화기의 수화기를 들면 서로 연결된 후 "여보세요"라는 말을 하면서 통화가 시작됩니다. 수신자가 수화기를 드는 바로 전까지의 과정과 수화기를 내려놓는 이후의 과정이 시그널링입니다. 


IP 네트워크 상에서 시그널링으로 수행되는 역할은 세가지입니다.    

  • 주소번역 (Address Translation)
    IP 네트워크에서는 IP 주소(32bit)를 이용하여 상대방을 찾지만, 사람들은 E.164 주소 체계 (전화번호)를 이용하여 상대방을 찾습니다. 서로 다른 주소체계인 전화번호와 IP 주소간의 번역을 위한 매핑 테이블이 필요합니다. 즉, 시그널링 과정에서 발신 전화기가 수신 전화기의 IP 주소를 획득하게 됩니다.  

  • 코덱협상 (Capability Negotiation)
    시그널링 과정에서 실제 전달할 음성을 어떤 방식으로 압축해서 보낼지를 결정합니다. G.711, G.729, G.723, G.722 등의 코덱 가운데 적당한 코덱을 선택하는 작업입니다. 기존의 PSTN 전화망은 회선 교환 이므로 한 채널은 64Kbps가 확보되어 G.711 코덱만을 사용하지만, IP 네트워크는 패킷 교환이므로 네트워크의 대역폭의 상황에 따라 다양한 코덱을 사용합니다. 

  • 정책 결정 (Call Admission Control)
    전화번호를 누른다고 무조건 전화를 연결하는 것이 아니라 허가받은 사용자인지 또는 상대방은 전화를 받을 수 있는 권한이 있는 지 등에 대한 정책을 결정합니다. 예를 들면, 일반 방문객들이 사용하는 전화기는 사내의 사무실로만 전화할 수 있도록 하거나 해외업무 파트가 아닌 직원들의 전화기는 국제통화를 하지 못하게 설정할 수 있습니다. 




IP 네트워크에서 시그널링이 완료된 후에 실제 음성을 전달하기 위한 프로토콜은 RTP (Real time Protocol)입니다. RTP는 실시간으로 음성을 송수신하기 위한 전송 계층 통신 규약으로 IETF의 RFC 1889로 정의되었나 2003년 RFC 3550으로 변경되었습니다. 또한, RTP의 원활한 소통을 위해 RTCP (Real-Time Control Protocol)와 함께 사용될 수 있습니다. RTCP는 송신측은 타임 스탬프를 근거로 재생간에 동기를 취해 지연이 생기지 않도록 하며 수신측에서는 전송 지연이나 대역폭을 등을 점검, RTCP를 사용해서 송신측의 어플리케이션에 통지할 수 있습니다. 


728x90

'IT이야기 > 코덱정보' 카테고리의 다른 글

VoIP 게이트웨이의 정의  (0) 2016.09.05
코덱계산/MOS  (0) 2016.09.05

+ Recent posts