달력

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
일반적으로 Hyper-V 인프라가 구성되면, System Center가 함께 배포가 됩니다. VM의 성능 수집을 위해 VM 자체에 SCOM 에이전트를 설치하지 않고도 기본적인 CPU 사용률, 메모리 사용률(동적 메모리일 경우), 디스크 IO 사용량(Read/Write Bytes/sec) 및 네트워크 IO 사용량(Received/Sent Bytes/sec)을 수집할 수 있습니다.

아래 VB 스크립트는 이 중 CPU와 메모리 사용률을 가져오는 스크립트로 VMM의 WMI 클래스인 Win32_PerfFormattedData_VMMPerfCounters_VMMVirtualMachineCPU 클래스를 쿼리해 정보를 가져오는 방법입니다.


' Collection Rule for vCPU, Dynamic Memory Usages

' $Data/Property[@Name='Object']$
' $Data/Property[@Name='Counter']$
' $Data/Property[@Name='Instance']$
' $Data/Property[@Name='PerfValue']$

Set oAPI = CreateObject("MOM.ScriptAPI")
Set oBag = oAPI.CreatePropertyBag()

Set wshShell = WScript.CreateObject( "WScript.Shell" )
strComputerName = wshShell.ExpandEnvironmentStrings("%COMPUTERNAME%")
Set wshShell = Nothing

Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\virtualization\v2")
Set colItems = objWMIService.ExecQuery("Select ElementName,Name from Msvm_ComputerSystem Where Name <> '"&strComputerName&"'")

intCount = colItems.Count
ReDim VMName(intCount),VMID(intCount)

i = 0
For Each Item in colItems
 VMName(i) = Item.ElementName
 VMID(i) = Item.Name
 i = i + 1
Next
Set colItems = Nothing
Set objWMIService = Nothing

Check = 0
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select Name,PercentGuestRunTime,CurrentPressurePercent from Win32_PerfFormattedData_VMMPerfCounters_VMMVirtualMachineCPU")
For Each Item in colItems
 tmpVMID = Item.Name
 For i = 0 to intCount-1
  If VMID(i) = tmpVMID Then
   Check = 1
   Set propertyBag = oAPI.CreatePropertyBag()
   propertyBag.AddValue "Object","Hyper-V Hypervisor Virtual Processor"
   propertyBag.AddValue "Counter","% Total Run Time"
   propertyBag.AddValue "Instance",VMName(i)
   propertyBag.AddValue "PerfValue",Item.PercentGuestRunTime
   oAPI.AddItem(propertyBag)

   Set propertyBag = oAPI.CreatePropertyBag()
   propertyBag.AddValue "Object","Hyper-V Dynamic Memory VM"
   propertyBag.AddValue "Counter","Current Pressure"
   propertyBag.AddValue "Instance",VMName(i)
   propertyBag.AddValue "PerfValue",Item.CurrentPressurePercent
   oAPI.AddItem(propertyBag)
  End If
 Next
Next
Set colItems = Nothing
Set objWMIService = Nothing

If Check = 1 Then
 oAPI.ReturnItems
End If

Set oBag = Nothing
Set oAPI = Nothing



 
:
Posted by 커널64
아래 스크립트와 동일하게 프로세스의 CPU 사용률을 가져오기 위한 VB 스크립트입니다. 기존 방법들과 다른 점은 Refresher라는 메서드를 이용합니다. 아래 사이트를 확인해 보면, 단순히 Win32_PerfFormattedData_PerfProc_Process 클래스를 쿼리하는 경우에는 정확한 값이 나오지 않을 수 있다고 합니다.

http://blogs.technet.com/b/heyscriptingguy/archive/2005/04/21/why-does-my-performance-monitoring-script-keep-returning-the-same-incorrect-values.aspx



'Instance: $Data/Property[@Name='Instance']$
'PerfValue: $Data/Property[@Name='PerfValue']$

strProcessName = "svchost"

Set oAPI = CreateObject("MOM.ScriptAPI")
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")

Set objRefresher = CreateObject("WbemScripting.SWbemRefresher")

Set colItems = objRefresher.AddEnum(objWMIService, "Win32_PerfFormattedData_PerfProc_Process").objectSet

objRefresher.Refresh
Wscript.Sleep 1000
objRefresher.Refresh

For Each Item In colItems
  strInstance = Item.Name
  strPerfValue = Item.PercentProcessorTime

  tmpString = ""
  If InStr(strInstance,"#") <> 0 Then
    tmpString = Left(strInstance,InStr(strInstance,"#")-1)
  End If

  If Ucase(strInstance) = Ucase(strProcessName) OR Ucase(tmpString) = Ucase(strProcessName) Then
    If tmpString <> "" Then
      strInstance = tmpString&"_"&Item.IDProcess
    Else
      strInstance = strInstance&"_"&Item.IDProcess
    End If

    WScript.Echo strInstance, strPerfValue

'    Set propertyBag = oAPI.CreatePropertyBag()
'    propertyBag.AddValue "Instance", strInstance
'    propertyBag.AddValue "PerfValue", strPerfValue
'    oAPI.AddItem(propertyBag)
  End If
Next

Set colItems = Nothing
'oAPI.ReturnItems



 
:
Posted by 커널64
2014. 2. 20. 10:44

typeperf 명령을 통한 성능 수집 VB 스크립트 Etc.2014. 2. 20. 10:44

SCOM을 통해 성능 수집을 할 때 보통 WMI를 쿼리해서 수집하는데, 프로세스 CPU 사용률에 대한 값이 영 믿을만한 값이 아닌 것 같아 다른 방법이 없을까..하고 찾아보던 중 성능 카운터를 쿼리하는 typeperf라는 명령이 있더군요...
아래 스크립트는 이 typeperf 명령 결과를 이용해 화면에 출력하거나 SCOM의 성능 카운터로 저장하는 스크립트입니다.


'Instance: $Data/Property[@Name='Instance']$
'PerfValue: $Data/Property[@Name='PerfValue']$

strProcessName = "svchost"

Set oAPI = CreateObject("MOM.ScriptAPI")

strCmdProcID = "typeperf "&chr(34)&"\Process(*)\ID Process"&chr(34)&" -sc 1"
strCmdCPUPerf = "typeperf "&chr(34)&"\Process(*)\% Processor Time"&chr(34)&" -sc 1"

Set objShell = WScript.CreateObject("WScript.Shell")

Set objExecObjectProcID = objShell.Exec(strCmdProcID)
Set objExecObjectCPUPerf = objShell.Exec(strCmdCPUPerf)

strComputerName = objShell.ExpandEnvironmentStrings( "%COMPUTERNAME%" )

i = 0
Do While Not objExecObjectProcID.StdOut.AtEndOfStream
  tmpLine = objExecObjectProcID.StdOut.ReadLine()
  Select Case i
  Case "1"
    tmpLine = Replace(tmpLine,"\\"&strComputerName&"\Process(","")
    tmpLine = Replace(tmpLine,")\ID Process","")
    tmpLine = Replace(tmpLine,chr(34),"")
    strHeader = tmpLine
  Case "2"
    tmpLine = Replace(tmpLine,".000000","")
    tmpLine = Replace(tmpLine,chr(34),"")
    strResult = tmpLine
  End Select
  i = i + 1
Loop
ProcIDHeader = Split(strHeader,",")
ProcIDResult = Split(strResult,",")

i = 0
Do While Not objExecObjectCPUPerf.StdOut.AtEndOfStream
  tmpLine = objExecObjectCPUPerf.StdOut.ReadLine()
  Select Case i
  Case "1"
    tmpLine = Replace(tmpLine,"\\"&strComputerName&"\Process(","")
    tmpLine = Replace(tmpLine,")\% Processor Time","")
    tmpLine = Replace(tmpLine,chr(34),"")
    strHeader = tmpLine
  Case "2"
    tmpLine = Replace(tmpLine,chr(34),"")
    strResult = tmpLine
  End Select
  i = i + 1
Loop
ProcCPUHeader = Split(strHeader,",")
ProcCPUResult = Split(strResult,",")

For i = 0 to Ubound(ProcIDHeader)
  tmpProcIDHeader = ""
  If InStr(ProcIDHeader(i),"#") <> 0 Then
    tmpProcIDHeader = Left(ProcIDHeader(i),InStr(ProcIDHeader(i),"#")-1)
  End If
  If Ucase(ProcIDHeader(i)) = Ucase(strProcessName) or Ucase(tmpProcIDHeader) = Ucase(strProcessName) Then
    WScript.Echo ProcIDHeader(i),ProcIDResult(i),ProcIDHeader(i),ProcCPUResult(i)
'    Set propertyBag = oAPI.CreatePropertyBag()
'    propertyBag.AddValue "Instance", ProcIDHeader(i)
'    propertyBag.AddValue "PerfValue", ProcCPUResult(i)
'    oAPI.AddItem(propertyBag)
  End If
Next

'oAPI.ReturnItems



 
:
Posted by 커널64
2013. 10. 23. 11:31

VBS로 PowerShell 스크립트 실행 Etc.2013. 10. 23. 11:31

가상화 관련 프로젝트를 진행하다 보니 VBS로 PowerShell 스크립트를 실행해야 하는 경우가 생깁니다. SCOM의 경우 Discovery는 Authoring Console을 통해 PowerShell 기반의 Discovery가 가능하나 정작 운영 콘솔 상에서 모니터링 항목을 만들 때는 PowerShell 스크립트를 지원하지 않아 PowerShell 명령으로 모니터링을 하기가 쉽지 않습니다.

물론, Authoring Console을 이용하면 되지만 매우 복잡한 단계를 거쳐야 하기 때문에 간단하게 VBS 스크립트 안에서 PowerShell 스크립트를 실행하거나, 출력된 결과에 기반해 모니터링을 수행할 수 있습니다.


단순 실행 - 출력된 결과에 대한 작업이 필요 없는 경우
(예: 실패한 클러스터 리소스 시작)
PS = "powershell.exe -nologo -command "&Chr(34)&"Get-ClusterResource | Where {$_.State -eq 'Failed'} | Start-ClusterResource"&Chr(34)
 
Set Shell = CreateObject("WScript.Shell")
Shell.Run PS,0,True



결과 반환 - 반환된 결과에 대한 가공 또는 분석이 필요한 경우
PS = "powershell.exe -nologo -command "&chr(34)&"Get-Service | Where {$_.Status -eq 'Stopped'}"&chr(34)

Set Shell = WScript.CreateObject( "WScript.Shell" )
Set Exec = Shell.Exec(PS)
Exec.StdIn.Close()
 
Do While Exec.StdOut.AtEndOfStream <> True
  PSOutput =  Exec.StdOut.ReadLine
  
  <PSOutput 작업>
  
Loop



:
Posted by 커널64
2013. 5. 8. 15:26

VB 스크립트 - SQL 구성 정보 쿼리 Etc.2013. 5. 8. 15:26

매개 변수로 인스턴스 이름을 입력 받아 구성 정보(sp_configure)를 쿼리하는 VBS 입니다.
매개 변수를 입력하지 않는 경우 기본 인스턴스(MSSQLSERVER)를 쿼리합니다.

Set oArgs = WScript.Arguments

If oArgs.Count = 0 Then
InstanceName = "MSSQLSERVER"
Else InstanceName = oArgs(0)
End If

If Ucase(InstanceName) = "MSSQLSERVER"Then
ServerName = "."
Else ServerName = ".\"&InstanceName
End If

Set objCN = CreateObject("ADODB.Connection")
strConnection = "Driver={SQL Server};Server="&ServerName&";Initial Catalog=master;Trusted_Connection=TRUE"
objCN.Open strConnection

strQuery = "EXEC sp_configure 'show advanced options','1';RECONFIGURE;EXEC sp_configure"

objRS=CreateObject("ADODB.Recordset")
Set objRS = objCN.Execute(strQuery)

Do Until objRS.EOF
WScript.Echo objRS.Fields("Name"),objRS.Fields("config_value"),objRS.Fields("run_value")
objRS.MoveNext
Loop

objRS.Close
objCN.Close

 
:
Posted by 커널64

Microsoft 기반의 VDI 환경에서 가상 머신에 연결하는 경우 기본적으로 CRL, 인증서 해지 목록을 확인하도록 구성됩니다. 정확하게는 클라이언트 쪽에서 대상 서버의 인증서 해제 목록을 확인하는 것이지요.

외부에서 접근 가능한 CDP를 배포하면 되지만 간단히 클라이언트 쪽에서 인증서 해지 여부를 확인하지 않도록 설정할 수 있습니다. 아래와 같이 레지스트리 값을 변경하시면 됩니다.

HKLM\SYSTEM\CurrentControlSet\Control\Lsa\Credssp
UseCachedCRLOnlyAndIgnoreRevocationUnknownErrors DWORD 값을 1로 설정

HKLM\SOFTWARE\Microsoft\Terminal Server Client
CertChainRevocationCheck DWORD 값을 0으로 설정

HKCU\Software\Microsoft\Terminal Server Client
CertChainRevocationCheck  DWORD 값을 0으로 설정



Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\Credssp]
"UseCachedCRLOnlyAndIgnoreRevocationUnknownErrors"=dword:00000001
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Terminal Server Client]
"CertChainRevocationCheck"=dword:00000000
[HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client]
"CertChainRevocationCheck"=dword:00000000



:
Posted by 커널64

창이름으로 프로세스 정보를 기록하는 스크립트와 연계해 레지스트리에 모니터링할 프로세스(창 이름)을 기준으로 로그 파일에 존재 여부로 실행 중인지의 여부를 판단하는 SCOM 용 VBS VB 스크립트 모니터입니다. 아래 스크립트와 마찬가지로, 로그 파일 생성(변경) 시간이 10분 이상되었거나 내용이 없는 경우(헤더만 있는 경우)에는 스크립트를 종료합니다.


'==========================================================
'Log File Configuration
'==========================================================
sLogDir = "C:\Dimensiondata\"
sLogFile = "NOTEPAD.Log"
'==========================================================

'==========================================================
'Registry Key Path, the Name of String Value
'==========================================================
KeyPath = "SOFTWARE\DDK"
sName = "NOTEPAD.exe"
'==========================================================

'==========================================================
'State Mapping/Definition
'==========================================================
'Error State: Property[@Name='State'] equals ERROR
'Normal State: Property[@Name='State'] equals NORMAL
'Stopped Processes: $Data/Context/Property[@Name='StoppedProc']$
'==========================================================


'If Log File doesn't Exist Then Quit
Set oFSO = CreateObject("Scripting.FileSystemObject")
If oFSO.FileExists(sLogDir&sLogFile) Then
Else
 Set oFSO = Nothing
 WScript.Quit
End If

'Check Log File Modified Date/Time
Set oFile = oFSO.GetFile(sLogDir&sLogFile)
FileModified = CDate(oFile.DateLastModified)
TimeGapMin = DateDiff("n",FileModified,Now)

If TimeGapMin > 10 Then
 Set oFSO = Nothing
 Set oAPI = CreateObject("MOM.ScriptAPI")
 Call oAPI.LogScriptEvent("DDK", 2001, 2, "Modified Date of Log File is Older than 10 Minutes. Modified Date of Log File("&sLogDir&sLogFile&") is "&FileModified&".")
 Set oAPI = Nothing
 WScript.Quit
End If

'Check Log File Content
sData = oFSO.OpenTextFile(sLogDir&sLogFile,1).ReadAll
arrLines = Split(sData,vbCrLf)
LineCount = UBound(arrLines)-1

If LineCount = 0 Then
 Set oFSO = Nothing
 Set oAPI = CreateObject("MOM.ScriptAPI")
 Call oAPI.LogScriptEvent("DDK", 2001, 2, "Log File("&sLogDir&sLogFile&") is Empty.")
 Set oAPI = Nothing
 WScript.Quit
End If

'Get Registry Value
Const HKLM = &H80000002
Set oReg = getObject("WINMGMTS:root\default:StdRegProv")
oReg.GetStringValue HKLM,KeyPath,sName,sValue

If IsNull(sValue) OR sValue = "" Then
 Set oReg = Nothing
 WScript.Quit
End If

arrValue = Split(sValue,"|")

'Check the Process is Exist in Log File, Except First Line
Set oAPI = CreateObject("MOM.ScriptAPI")
Set oBag = oAPI.CreatePropertyBag()
For i = 0 to Ubound(arrValue)
 tmpState = 0
 CurrLine = 1
 Do While CurrLine <> UBound(arrLines)
  tmpLine = Split(arrLines(CurrLine),"|")
  If Ucase(tmpLine(2)) = Ucase(arrValue(i)) Then
   tmpState = 1
  End If
  CurrLine =  CurrLine + 1
 Loop

 If tmpState = 0 Then
  StoppedProc = StoppedProc & arrValue(i)&", "
  Call oBag.AddValue(arrValue(i), "Not running")
 ElseIf tmpState = 1 Then
  Call oBag.AddValue(arrValue(i), "Running")
 End If
Next

If StoppedProc <> "" Then
 Call oBag.AddValue("State", "ERROR")
 Call oBag.AddValue("Stopped Process(es)",Left(StoppedProc,Len(StoppedProc)-2))
Else
 Call oBag.AddValue("State", "NORMAL")
End If

Call oAPI.Return(oBag)
Set oFSO = Nothing
Set oAPI = Nothing



:
Posted by 커널64

아래 스크립트와 연계해 해당 PID에 기반해 CPU 사용률과 메모리 사용량 - WorkingSet (MB)을 수집하는 스크립트이며, SCOM에서 성능 수집 규칙(컬렉션 방식)으로 사용합니다. 로그 파일 생성(변경) 시간이 10분 이상되었거나 내용이 없는 경우(헤더만 있는 경우)에는 스크립트를 종료합니다.


'==========================================================
'Log File Configuration
'==========================================================
sLogDir = "C:\Dimensiondata\"
sLogFile = "NOTEPAD.Log"
'==========================================================

'==========================================================
'Performance Mapper
'==========================================================
'Object: Process
'Counter: $Data/Property[@Name='Counter']$
'Instance: $Data/Property[@Name='Instance']$
'Value: $Data/Property[@Name='PerfValue']$
'==========================================================


'If Log File doesn't Exist Then Quit
Set oFSO = CreateObject("Scripting.FileSystemObject")
If oFSO.FileExists(sLogDir&sLogFile) Then
Else
 Set oFSO = Nothing
 WScript.Quit
End If

'Check Log File Modified Date/Time
Set oFile = oFSO.GetFile(sLogDir&sLogFile)
FileModified = CDate(oFile.DateLastModified)
TimeGapMin = DateDiff("n",FileModified,Now)

If TimeGapMin > 10 Then
 Set oFSO = Nothing
 Set oAPI = CreateObject("MOM.ScriptAPI")
 Call oAPI.LogScriptEvent("DDK", 2001, 2, "Modified Date of Log File is Older than 10 Minutes. Modified Date of Log File("&sLogDir&sLogFile&") is "&FileModified&".")
 Set oAPI = Nothing
 WScript.Quit
End If

'Check Log File Content
sData = oFSO.OpenTextFile(sLogDir&sLogFile,1).ReadAll
arrLines = Split(sData,vbCrLf)
LineCount = UBound(arrLines)-1

If LineCount = 0 Then
 Set oFSO = Nothing
 Set oAPI = CreateObject("MOM.ScriptAPI")
 Call oAPI.LogScriptEvent("DDK", 2001, 2, "Log File("&sLogDir&sLogFile&") is Empty.")
 Set oAPI = Nothing
 WScript.Quit
End If

'Create Array and Insert PID, Performance Data of CPU and WorkingSet into Array
Set objWMIService = GetObject("WINMGMTS:\\.\root\cimv2")
Set colProcess = objWMIService.ExecQuery("Select * from Win32_PerfFormattedData_PerfProc_Process")
ProcessCount = colProcess.Count
ReDim tmpProcessID(ProcessCount),tmpProcessCPU(ProcessCount),tmpProcessMB(ProcessCount)

i = 0
For Each ProcInst in colProcess
 tmpProcessID(i) = ProcInst.IDProcess
 tmpProcessCPU(i) = ProcInst.PercentProcessorTime
 tmpProcessMB(i) = Round(ProcInst.WorkingSet/1048576,2)
 i = i + 1
Next

Set colProcess = Nothing
Set objWMIService = Nothing

'Get/Return CPU, Memory Performance Data, Except First Line
Set oAPI = CreateObject("MOM.ScriptAPI")
CurrLine = 1
Do While CurrLine <> UBound(arrLines)
 tmpLine = Split(arrLines(CurrLine),"|")
 tmpCPU = 0
 tmpMB = 0

 For i = 0 to ProcessCount
  If cDbl(tmpLine(1)) = cDbl(tmpProcessID(i)) Then
    tmpCPU = tmpProcessCPU(i)
    tmpMB = tmpProcessMB(i)
  End If
 Next

 Set propertyBag = oAPI.CreatePropertyBag()
 propertyBag.AddValue "Counter", "% Processor Time"
 propertyBag.AddValue "Instance", tmpLine(0)&"_"&tmpLine(2)
 propertyBag.AddValue "PerfValue", tmpCPU
 oAPI.AddItem(propertyBag)
 Call oAPI.Return(propertyBag)

 Set propertyBag = oAPI.CreatePropertyBag()
 propertyBag.AddValue "Counter", "Memory Usage MB"
 propertyBag.AddValue "Instance", tmpLine(0)&"_"&tmpLine(2)
 propertyBag.AddValue "PerfValue", tmpMB
 oAPI.AddItem(propertyBag)
 Call oAPI.Return(propertyBag)

 CurrLine =  CurrLine + 1
Loop

oAPI.ReturnItems
Set oFSO = Nothing
Set oAPI = Nothing


:
Posted by 커널64

VBS VB Script VB 스크립트
특정 프로세스로 실행되는 프로그램 목록을 텍스트 파일로 찍는 스크립트입니다. 텍스트 파일에 프로세스 이름, PID 및 창 제목을 기록합니다. 사실, 창 제목(프로세스에 파라미터를 달고 실행되는 애플리케이션)을 보고 프로세스의 실행 상태를 모니터링하기 위해 사용하였던 스크립트입니다.


'==========================================================
'Configuration - Host Process Name, Log File
'==========================================================
sProcess = "notepad.exe"
sLogDir = "C:\Dimensiondata\"
sLogFile = "NOTEPAD.Log"
'==========================================================


'Check/Create Log Directory
Set oFSO = CreateObject("Scripting.FileSystemObject")
If oFSO.FolderExists(sLogDir) Then
Else
 oFSO.CreateFolder sLogDir
End If

'Check/Create Log File
If oFSO.FileExists(sLogDir&sLogFile) Then
Else
 oFSO.CreateTextFile sLogDir&sLogFile
End If

'Run Tasklist Command and then Write Result to the Log File
Set LogFile = oFSO.OpenTextFile(sLogDir&sLogFile,2)
sCmd = "cmd /c Tasklist /FO CSV /V /FI "&chr(34)&"ImageName eq "&sProcess&chr(34)&" | Findstr /I "&chr(34)&sProcess&chr(34)
Set objShell = WScript.CreateObject("WScript.Shell")
Set objExecObject = objShell.Exec(sCmd)

LogFile.Write "ProcessName|PID|WindowName"&vbCRLF
tmp = 0

Do While Not objExecObject.StdOut.AtEndOfStream
 sLine = objExecObject.StdOut.ReadLine
 tmpLine = Split(sLine,chr(34))
 LogFile.Write tmpLine(1)&"|"&tmpLine(3)&"|"&tmpLine(17)&vbCRLF
Loop

LogFile.Close
Set oFSO = Nothing
Set objExecObject = Nothing
Set objShell = Nothing


:
Posted by 커널64
2013. 1. 21. 14:08

Windows Server 2012의 Failover Cluster Console Crash Etc.2013. 1. 21. 14:08

Windows Server 2012 기반의 Hyper-V 클러스터링 구성 후 언젠가부터 갑자기 장애 조치 클러스터 콘솔(Failover Cluster Console)이 Crash 되는 증상이 발생했습니다.

오류 메시지는 다음과 같습니다.

취약한 이벤트가 생성되어 잘못된 개체에 있으므로 이 작업이 실패할 가능성이 매우 높습니다. 문제를 방지하려면 코드를 검토하고 변경하십시오. 
   위치: MS.Internal.FailoverClusters.Framework.WeakEvent.WeakEventCallback.MethodTarget..ctor(Object target, MethodInfo method)
   위치: MS.Internal.FailoverClusters.Framework.WeakEvent.WeakEventCallback.Add(Object target, MethodInfo targetMethod)
...



원인을 찾아보니 업데이트 항목 중 KB2750149와의 충돌이더군요.

해결 방법은 해당 업데이트를 제거하시고 재부팅하시면 됩니다.



위 문제를 해결한 Hotfix가 업데이트 되었습니다. 아래 링크를 참고하시기 바랍니다.
Failover Cluster Management snap-in crashes after you install update 2750149 on a Windows Server 2012-based failover cluster
http://support.microsoft.com/kb/2803748/en-us

 

 

:
Posted by 커널64