2010. 9. 8. 18:17

PowerShell을 이용하여 IIS 로그파일 경로를 지정하시면 송/수신된 데이터 량을 확인 할 수 있습니다.
여기서 약간 더 변형을 한다면, IIS의 내용중 로그 디렉토리에 대한 정보를 확인하여 각 사용자 별로 일일 송/수신 데이터 량을 확인 할 수도 있습니다.

우선 소스부터 보시죠..

# 로그 파일 경로를 입력 받습니다.
Param (
  [String] $Path
)
# 필요한 변수들을 미리 지정 합니다.
[INT]$RECV_TOTAL="0"
[INT]$SEND_TOTAL="0"
[INT]$CS_NUM=0;
[INT]$SC_NUM=0;
 
$KB=1024
$MB=1024*1024
$GB=1024*1024*1024
get-content $Path | %{
    #Pattern Check
    if ( $_ | Select-String -Pattern "#Fields" ) {
        # Fields 값에 대한 마이너스 값 처리.
        [INT]$CNT=-1;
        foreach ($element in $_.Split(' '))
        {
           if ( $element -eq "sc-bytes" ){
             $SC_NUM=$CNT;
           }elseif ( $element -eq "cs-bytes" ) {
             $CS_NUM=$CNT;
           }
           $CNT+=1;
        }
     }
     elseif ( $_ | Select-String -Pattern "^[^#]" )
     {
# 실제 송/수신된 값을 Split 명령을 통해 저장합니다.
 [int]$SEND_BYTE=$_.Split(' ')[$SC_NUM];
 [int]$RECV_BYTE=$_.Split(' ')[$CS_NUM];
 [int]$RECV_TOTAL+=$RECV_BYTE;
 [int]$SEND_TOTAL+=$SEND_BYTE;
    }
}
If ( $RECV_TOTAL -gt $GB ){
 $RECV_TOTAL = $RECV_TOTAL / $GB
 Write-Host "Total  In : $RECV_TOTAL GByte"
} elseif ( $RECV_TOTAL -gt $MB){
        $RECV_TOTAL = $RECV_TOTAL / $MB
 Write-Host "Total  In : $RECV_TOTAL MByte"
}elseif ( $RECV_TOTAL -gt  $KB){
 $RECV_TOTAL = $RECV_TOTAL / $KB
 Write-Host "Total  In : $RECV_TOTAL KByte"
}else{
 Write-Host "Total  In : $RECV_TOTAL Byte"
}
If ( $SEND_TOTAL -gt $GB ){
 $SEND_TOTAL = $SEND_TOTAL / $GB
 Write-Host "Total Out : $SEND_TOTAL GByte"
} elseif ( $SEND_TOTAL -gt $MB){
        $SEND_TOTAL = $SEND_TOTAL / $MB
 Write-Host "Total Out : $SEND_TOTAL MByte"
}elseif ( $SEND_TOTAL -gt  $KB){
 $SEND_TOTAL = $SEND_TOTAL / $KB
 Write-Host "Total Out : $SEND_TOTAL KByte"
}else{
 Write-Host "Total Out : $SEND_TOTAL Byte"
}

우선 간단한 소스이니 얼마든지 변형이 가능 합니다.
추가적으로 더 나간다면, 여러대의 서버를 관리하는 관리자의 경우 각 서버들에 대한 FTP 접속 계정을 만들고 FTP로 접속하여 각 로그 파일들을 다운로드 받은 뒤 해당 파일에 대한 체크 후 자동 삭제 하는 과정을 통해 모든 IIS 서버에 대한 각 계정별 트래픽 값을 확인 할 수도 있습니다.

그냥 단순히 참고만.. ^^.
Posted by 마성민
:
2010. 9. 8. 18:11
안녕하세요 윈디안입니다.

오늘은 파워쉘상에 키보드 입력에 대하여 이야기 하겠습니다.

대화형 스크립트를 만들어 보려고 했습니다.
여기서 문제에 봉착하게 됩니다.
대화형 스크립트는 사용자 입력을 받아야 하더군요;

이전에 소개드렸던 PowerShell Pack 사용할까 했으나 스냅인을 추가해야 했고 "이정도는 이미 있지 않을까?"라는 생각에
구글링을 했습니다. 물론 저와 같은 고민에 있는 사람들이 계시더군요 ^^;

Read-Host [[-Prompt] <Object>] [-AsSecureString] [<CommonParameters>]

이녀석으로 사용자 키보드 입력을 받을 수 있습니다.

특별한 파라미터를 2개만 설명하겠습니다.
-AsSecureString
사용자가 입력한 문자를 와일드카드(*)로 처리합니다.
입력된 스트링은 SecureString 개체(System.Security.SecureString)가 됩니다.
(안보여요 ~ )

-Prompt "입력"
사용자 입력을 받기전에 텍스트를 출력합니다.
따옴표를 (") 묶어서 사용하셔야 하니다.

Read-Host가 있다면 Write-Host도 있겠죠?

Rad-host "입력하세요:" | Write-host

이렇게 하면 입력한 문자를 다시 뿌려줍니다.

오늘은 요까지만 하겠습니다.
환절기가 오니 알레르기로 힘이 드네요
다들 건강하세요!



Posted by 알 수 없는 사용자
:

BLOG main image
Windows Server를 공부 하는 사람들의 팀블로그 by 마성민

카테고리

분류 전체보기 (76)
Windows (2)
Powershell (56)
AD (0)
Exchange (6)
System Center (9)
IIS (0)
SQL (3)
Sharepoint (0)

태그목록

Tistory Cumulus Flash tag cloud by BLUEnLIVE requires Flash Player 9 or better.

Total :
Today : Yesterday :