달력

5

« 2024/5 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

파라미터로 실행되는 프로그램을 파라미터 단위로 CPU 사용률 출력
VBS VB Script

' 프로세스 및 파라미터 정보 - 동적 입력 로직 추가
HostProcess = "notepad"      ' 프로세스 명: .exe 제외
sApplication = "ABC.txt|123.txt|DEF.txt"     ' 테스트 파라미터

Dim Param(), PID(), N1(), D1(), N2(), D2(), CPUPerf()
Set WMI_Service = GetObject("winmgmts:{impersonationlevel=impersonate}!\root\cimv2")
NumCore = GetNumProcessors

Set colItems = WMI_Service.ExecQuery ("Select * from Win32_Process where name = '"&HostProcess&".exe'")
ProcessCount = colItems.Count
If ProcessCount = 0 Then
Set colItems = Nothing
Set WMI_Service = Nothing
WScript.Quit
End If

Redim Param(ProcessCount), PID(ProcessCount)
arrApplication = Split(sApplication,"|")
intCount = 0
For Each App in arrApplication
For Each Item in colItems
arrCommandLine = Split(Item.CommandLine," ")
If Instr(UCASE(App), UCASE(arrCommandLine(UBound(arrCommandLine)))) Then
Param(intCount) = App
PID(intCount) = Item.ProcessID
intCount = intCount + 1
End If
Next
Next
Redim N1(intCount), D1(intCount), N2(intCount), D2(intCount), CPUPerf(intCount)
Set colItems = Nothing

Set colItems = WMI_Service.ExecQuery ("Select * from Win32_PerfRawData_PerfProc_Process where name = '"&HostProcess&"' or name like '"&HostProcess&"#%'")
For Each CPUPerf1 in colItems
For i = 0 To intCount
If CPUPerf1.IDProcess = PID(i) Then
N1(i) = CPUPerf1.PercentProcessorTime
D1(i) = CPUPerf1.TimeStamp_Sys100NS
End If
Next
Next
WScript.Sleep(500)
Set colItems = WMI_Service.ExecQuery ("Select * from Win32_PerfRawData_PerfProc_Process where name = '"&HostProcess&"' or name like '"&HostProcess&"#%'")
For Each CPUPerf2 in colItems
For i = 0 To intCount
If CPUPerf2.IDProcess = PID(i) Then
N1(i) = CPUPerf2.PercentProcessorTime
D1(i) = CPUPerf2.TimeStamp_Sys100NS
End If
Next
Next
Set colItems = Nothing

For i = 0 to intCount
If ( 0 = (D2(i)-D1(i)) ) then
CPUPerf(i) = 0
Else
CPUPerf(i) = Round(((((N2(i) - N1(i)) / (D2(i) - D1(i))) * 100) / NumCore), 2)
End If
Next

' 출력 부분 - 가공 로직 추가
For i = 0 to intCount-1
WScript.Echo Param(i), PID(i), CPUPerf(i)
Next

' 코어 수 쿼리 함수
Function GetNumProcessors
Set colItems = WMI_Service.ExecQuery ("Select * from Win32_ComputerSystem")
For Each objItem In colItems
On Error Resume Next
GetNumProcessors = objItem.NumberOfLogicalProcessors
If Err.number <> 0 Then
GetNumProcessors = objItem.NumberOfProcessors
End If
On Error GoTo 0
Next
Set colItems = Nothing
End Function

:
Posted by 커널64

특정 프로세스명에 대한 모든 PID 별 CPU 성능 쿼리 (로직 개선)
VBS VB Script

strProcess = "notepad"        ' 프로세스 명: .exe 제외

Dim PID(), N1(), D1(), N2(), D2(), CPUPerf()
Set WMI_Service = GetObject("winmgmts:{impersonationlevel=impersonate}!\root\cimv2")
NumCore = GetNumProcessors

Set colItems = WMI_Service.ExecQuery ("Select * from Win32_PerfRawData_PerfProc_Process where name = '"&strProcess&"' or name like '"&strProcess&"#%'")
ProcessCount = colItems.Count
If ProcessCount = 0 Then
Set colItems = Nothing
Set WMI_Service = Nothing
WScript.Quit
End If

Redim PID(ProcessCount), N1(ProcessCount), D1(ProcessCount), N2(ProcessCount), D2(ProcessCount), CPUPerf(ProcessCount)
i = 0
For Each CPUPerf1 in colItems
PID(i) = CPUPerf1.IDProcess
N1(i) = CPUPerf1.PercentProcessorTime
D1(i) = CPUPerf1.TimeStamp_Sys100NS
i = i + 1
Next
WScript.Sleep(500)
Set colItems = WMI_Service.ExecQuery ("Select * from Win32_PerfRawData_PerfProc_Process where name = '"&strProcess&"' or name like '"&strProcess&"#%'")
i = 0
For Each CPUPerf2 in colItems
N2(i) = CPUPerf2.PercentProcessorTime
D2(i) = CPUPerf2.TimeStamp_Sys100NS
i = i + 1
Next
Set colItems = Nothing

For i = 0 to ProcessCount
If ( 0 = (D2(i)-D1(i)) ) then
CPUPerf(i) = 0
Else
CPUPerf(i) = Round(((((N2(i) - N1(i)) / (D2(i) - D1(i))) * 100) / NumCore), 2)
End If
Next

' 테스트 출력
WScript.Echo "프로세스 수: " & ProcessCount
For i = 0 to ProcessCount-1
WScript.Echo "PID: "& PID(i) & vbTab & "CPU Util: " & CPUPerf(i) & "%"
Next

' 코어 수 쿼리 함수
Function GetNumProcessors
Set WMI_Service = GetObject("winmgmts:{impersonationlevel=impersonate}!\root\cimv2")
Set colItems = WMI_Service.ExecQuery ("Select * from Win32_ComputerSystem")
For Each objItem In colItems
On Error Resume Next
GetNumProcessors = objItem.NumberOfLogicalProcessors
If Err.number <> 0 Then
GetNumProcessors = objItem.NumberOfProcessors
End If
On Error GoTo 0
Next
End Function

:
Posted by 커널64
2011. 3. 15. 18:25

인터넷 익스플로러 9 정식 릴리즈~!! Etc.2011. 3. 15. 18:25

인터넷 익스플로러 9 정식 릴리즈~!!

언어 별 다운로드 링크
http://windows.microsoft.com/ko-KR/internet-explorer/downloads/ie-9/worldwide-languages

:
Posted by 커널64

Microsoft 기반 VDI 구성 시 구성 요소 별 이중화 및 로드 밸런싱 구성 방안



1. RD 세션 호스트 (가상 머신 리디렉션 모드)
다수의 RD 세션 호스트 서버를 DNS 라운드 로빈으로 구성한다. 클라이언트는 DNS 쿼리 후 리턴된 RD 세션 호스트를 통해 연결이 이루어 진다. 즉, Active-Active 모드로 동작한다.

2. RD 연결 브로커
RD 연결 브로커는 다수 노드를 장애 조치 클러스터로 구성해 이중화를 제공한다. 즉, Active-Passive 모드로 동작하며 Active 노드의 서비스 또는 하드웨어 장애 시 Passive 노드로 장애 조치된다.
http://technet.microsoft.com/en-us/library/ff686148(WS.10).aspx

3. RD 가상화 호스트
RD 가상화 호스트는 서버 가상화와 마찬가지로 다수의 Hyper-V 서버를 장애 조치 클러스터로 구성해 이중화를 제공한다. 호스트(노드) 장애 시 가상 머신은 클러스터의 다른 노드로 장애 조치되어 재시작된다.

4. RD 웹 액세스
RD 웹 액세스 서버는 RD 세션 호스트 서버와 마찬가지로 네트워크 로드 밸런싱(NLB) 구성 또는 DNS 라운드 로빈 구성으로 Active-Active 모드의 이중화를 제공한다.

5. RD 라이선싱 및 RD 게이트웨이
RD 라이선싱 배포 가이드 (http://technet.microsoft.com/en-us/library/dd983943(WS.10).aspx)
RD 게이트웨이 서버 이중화 가이드 (http://blogs.msdn.com/rds/archive/2009/03/24/improving-ts-gateway-availability-using-nlb.aspx)

지원되지 않는 구성
- Active-Active RD 연결 브로커 구성
- RD 가상화 호스트 서버에서의 RD 연결 브로커 클러스터링 구성

:
Posted by 커널64

VBS VBScript SCOM System Center Operations Manager
성능 수집 시간과 OM DB 인서트 시간에 많은 차이가 나는 서버 목록 쿼리

Dim TimeGap, objCN, strConnection, objRS, strSQLQuery
TimeGap = 15

Set objCN = CreateObject("ADODB.Connection")
strConnection = "Driver={SQL Server};Server=.;Trusted_Connection=TRUE"
objCN.Open strConnection
strSQLQuery= "USE OperationsManager"
strSQLQuery= strSQLQuery & " select"
strSQLQuery= strSQLQuery & " vme.path"
strSQLQuery= strSQLQuery & ", max(vpd.TimeAdded) as TimeAdded"
strSQLQuery= strSQLQuery & ", max(vpd.TimeSampled) as TimeSampled"
strSQLQuery= strSQLQuery & ", DATEDIFF(MINUTE, max(vpd.TimeSampled), max(vpd.TimeAdded)) as TimeGap"
strSQLQuery= strSQLQuery & ", Dateadd(HOUR, 9, max(vpd.TimeAdded)) as LocalTimeAdded"
strSQLQuery= strSQLQuery & ", Dateadd(HOUR, 9, max(vpd.TimeSampled)) as LocalTimeSampled"
strSQLQuery= strSQLQuery & " from PerformanceDataInsertView as vpd"
strSQLQuery= strSQLQuery & " join PerformanceCounterView as vpc on vpc.PerformanceSourceInternalId = vpd.PerformanceSourceInternalId"
strSQLQuery= strSQLQuery & " join ManagedEntityGenericView as vme on vme.Id = vpc.ManagedEntityId"
strSQLQuery= strSQLQuery & " where DATEDIFF(MINUTE, vpd.TimeSampled, vpd.TimeAdded) >= " & TimeGap
strSQLQuery= strSQLQuery & " group by vme.path"
objRS=CreateObject("ADODB.Recordset")
Set objRS = objCN.Execute(strSQLQuery)
strMsg = "다음 서버(들)의 성능 수집 시간과 데이터베이스 입력 시간의 차이가 " & TimeGap &"분 이상입니다. 컴퓨터의 시간 설정을 확인해 보시기 바랍니다. "
strServerList = ""
Do Until objRS.EOF
strServerList = strServerList & objRS(0) & "(시간 차: " & objRS(3) & "분), "
objRS.MoveNext
Loop
objRS.Close
objCN.Close
If strServerList <> "" Then
strServerList = Left(strServerList, Len(strServerList)-2)
End If

WScript.Echo strMsg & strServerList

:
Posted by 커널64

VBS VBScript SCOM System Center Operations Manager

PID를 이용해 다수 프로세스에 대한 CPU 사용률 수집
한 개의 규칙으로 여러 프로세스의 CPU 성능 수집
 
'Object: Process
' Counter: % Processor Time
' Instance: $Data/Property[@Name='ProcessName']$
' Value: $Data/Property[@Name='PerfResult']$

Dim oAPI, oBag
Set oAPI = CreateObject("MOM.ScriptAPI")

i = 0
ProcessorCount = GetNumProcessors

'Example
'ProcessName = "Notepad.exe"
'GetCPUPerf("5176")
'ProcessName = "csrss.exe"
'GetCPUPerf("420")
'ProcessName = "taskmgr.exe"
'GetCPUPerf("2156")

If i <> 0 Then
oAPI.ReturnItems
End If

' Query processor usage of process by PID
Function GetCPUPerf(PID)
Set WMI_Service = GetObject("winmgmts:{impersonationlevel=impersonate}!\root\cimv2")
Set colItems = WMI_Service.ExecQuery ("Select * from Win32_PerfRawData_PerfProc_Process Where IDProcess = '" & PID & "'" )
If colItems.Count = 0 Then
Set colItems = Nothing
Set WMI_Service = Nothing
Exit Function
End If
For Each CPUPerfQ in colItems
N1 = CPUPerfQ.PercentProcessorTime
D1 = CPUPerfQ.TimeStamp_Sys100NS
Next
WScript.Sleep(500)
Set colItems = WMI_Service.ExecQuery ("Select * from Win32_PerfRawData_PerfProc_Process Where IDProcess = '" & PID & "'" )
For Each CPUPerfQ in colItems
N2 = CPUPerfQ.PercentProcessorTime
D2 = CPUPerfQ.TimeStamp_Sys100NS
Next
If ( 0 = (D2-D1) ) then
PerfResult = 0
Else
PercentProcessorTime = ((N2 - N1) / (D2 - D1)) * 100
PerfResult = Round(PercentProcessorTime / ProcessorCount, 2)
End If
Set colItems = Nothing
Set WMI_Service = Nothing
Set propertyBag = oAPI.CreatePropertyBag()
propertyBag.AddValue "ProcessName", ProcessName
propertyBag.AddValue "PerfResult", PerfResult
oAPI.AddItem(propertyBag)
Call oAPI.Return(propertyBag)
i = i + 1
End Function

' Count the number of Processors
Function GetNumProcessors
Set WMI_Service = GetObject("winmgmts:{impersonationlevel=impersonate}!\root\cimv2")
Set colItems = WMI_Service.ExecQuery ("Select * from Win32_ComputerSystem")
For Each objItem In colItems
On Error Resume Next
GetNumProcessors = objItem.NumberOfLogicalProcessors
If Err.number <> 0 Then
GetNumProcessors = objItem.NumberOfProcessors
End If
On Error GoTo 0
Next
End Function

:
Posted by 커널64
2011. 1. 24. 10:38

윈도우 시간 동기화 관련 Etc.2011. 1. 24. 10:38

외부 시간 원본 서버와의 시간 차이 검사
w32tm /stripchart /computer:time.nuri.net /samples:1 /dataonly

시간 원본 서버를 외부 시간 원본 서버로 설정
w32tm /config /manualpeerlist:time.nuri.net /syncfromflags:manual /reliable:yes /update

시간 동기화 상태 확인
w32tm /monitor

도메인 구성원 컴퓨터의 기본 시간 원본 서버를 PDC 에뮬레이터로 설정
w32tm /config /syncfromflags:domhier /reliable:no /update

WORKGROUP 컴퓨터를 도메인 컨트롤러와 시간 동기화 설정
w32tm /config /manualpeerlist:"dc01.nwtraders.msft dc02.nwtraders.msft" /syncfromflags:manual /update

:
Posted by 커널64

Notepad.exe APP1
Notepad.exe APP2
셈플은 DB 테이블에서 | (파이프)로 구분된 APP1|APP2를 분리해 검색
와 같은 형태로 실행되는 응용 프로그램의 실행 상태를 파라미터(APP1, APP2) 기준으로 상태를 표시
VBS VBScript

sHostProcess = "notepad.exe"

Set dbcon = CreateObject("Adodb.connection")
sCon = "Provider=sqloledb;Data Source = 10.10.10.10;User ID=sa;Password=P@ssw0rd;Initial Catalog=DBName"
dbcon.open sCon
sSQL = "select * from table1"
Set Result = dbcon.execute(sSQL)
Do While not Result.eof
sApplication = sApplication & Trim(Result(0)) & "|"
Result.movenext
Loop
Set Result = Nothing
dbcon.close
sApplication = LEFT(sApplication, LEN(sApplication) - 1)
arrApplication = Split(sApplication,"|")

Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2")
Set colHostProcess = objWMIService.ExecQuery ("Select * from Win32_Process Where Name = '" & sHostProcess & "'")
If colHostProcess.Count = 0 Then
WScript.Echo "Host rocess is not running."
Set objWMIService = Nothing
WScript.Quit
End If

sStatus = "Good"
sMessage = ""
WScript.Echo "Host process " & sHostProcess
For Each App in arrApplication
intState = GetAppState(App)
If intState = 1 Then
WScript.Echo App & " Running"
Else WScript.Echo App & " Not running"
sMessage = sMessage & App & " is not running" & " | "
sStatus = "Bad"
End If
Next

sMessage = LEFT(sMessage, LEN(sMessage) - 3)
WScript.Echo "Status is "  & sStatus
WScript.Echo "Message is " & sMessage
Set objWMIService = Nothing
WScript.Quit

Function GetAppState(sAppName)
For Each Item in colHostProcess
arrCommandLine = Split(Item.CommandLine," ")
For Each arrItem in arrCommandLine
If Instr(UCASE(arrItem), UCASE(sAppName)) Then
GetAppState = 1
End If
Next
Next
End Function

:
Posted by 커널64
2010. 9. 9. 18:34

VB Script를 이용한 SQL 쿼리 Etc.2010. 9. 9. 18:34

VBS, VB Script, SQL, Query

Dim objCN, strConnection
Set objCN = CreateObject("ADODB.Connection")
strConnection = "Driver={SQL Server};Server=.;Trusted_Connection=TRUE"
objCN.Open strConnection

Dim strSQLQuery
strSQLQuery = "USE OperationsManager select * from dbo.AlertView GO"
Dim objRSSet
objRS=CreateObject("ADODB.Recordset")
Set objRS = objCN.Execute(strSQLQuery)

Do Until objRS.EOF
WScript.Echo objRS(0) '첫 번째 컬럼 출력
WScript.Echo objRS.Fields("Id") 'Id 이름의 컬럼 출력
objRS.MoveNext
Loop

objRS.Close
objCN.Close

:
Posted by 커널64
2010. 8. 24. 20:29

Windows Server 2008 R2 서버 코어의 IPv6 해제 Etc.2010. 8. 24. 20:29

Windows Server 2008 R2 Server Core 서버 코어 Hyper-V IPv6

1. 레지스트리 편집기 실행(Regedit)
2. 다음 키 위치로 이동
HKLM\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters
3. 새로 만들기 > DWORD (32-bit) 값 선택
4. 이름: DisabledComponents, 값: 4294967295(10진수) 또는 0xffffffff(16진수)
(위 값은 IPv6 loopback interface를 제외한 모든 IPv6 구성 요소 해제를 의미)
5. 재부팅


또는, 명령 프롬프트에서
reg add hklm\system\currentcontrolset\services\tcpip6\parameters /v DisabledComponents /t REG_DWORD /d 4294967295 /f




:
Posted by 커널64