달력

2

« 2014/2 »

  • 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
테스트 환경에 단독으로 운영 중인 Windows Server 2012 R2 기반의 Hyper-V 호스트 서버에서 가상 하드 디스크 공유 기능을 사용해 보려고 하는데 다음과 같이 오류가 발생하네요.

첨부 파일 'xxxx.vhdx'에 대한 정보를 가져올 수 없습니다.
가상 하드 디스크가 있는 저장소가 가상 하드디스크 공유를 지원하지 않습니다.


로컬 디스크에 대한 요구 사항(SCSI 영구 예약 등)이 맞지 않나... 하고 고민하던 중 다음과 같은 방법으로 해결하였습니다.

먼저, 명령 프롬프트에서 fltmc 명령을 입력해 보면 svhdxflt 필터가 목록에 없습니다.


이 필터를 설치하기 위해서는 장애 조치 클러스터링을 설치해야만 합니다. PowerShell을 실행한 후 다음 명령을 사용하거나 또는 서버 관리자 GUI를 통해 기능을 설치합니다.
Install-WindowsFeature Failover-Clustering -IncludeManagementTools


기능을 설치한 후 다시 fltmc 명령을 실행해 보면 svhdxflt 필터가 목록에 표시됨을 확인할 수 있습니다.


이제 해당 필터를 볼륨에 Attach 합니다. 명령은 다음과 같습니다.
fltmc attach svhdxflt <볼륨>


이제 다시 Hyper-V 관리자를 통해 가상 하드 디스크 공유 기능을 사용하면 정상적으로 설정됩니다.




 
:
Posted by 커널64
Microsoft 기반의 VDI나 RemoteApp 등의 시스템 구축 시 사용자들의 접근을 위해 RD 웹 액세스 서버를 구축합니다.
기본적으로 페이지 제목에 표시되는 Work Resources 문구를 변경하는 방법을 설명 드립니다.
 

RD 연결 브로커 서버에 로그온 한 후 PowerShell을 실행하고 아래 명령을 사용합니다.
Set-RDWorkspace -Name "표시할 제목" -ConnectionBroker <RD 연결 브로커 서버의 FQDN>

예를 들어, 제목을 Enterprise Mobility로 하고, 연결 브로서 서버의 이름이 rds.domain.local인 경우
Set-RDWorkspace -Name "Enterprise Mobility" -ConnectionBroker rds.domain.local





:
Posted by 커널64
일반적으로 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