달력

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
예전에 어떤 블로그의 글을 메모장으로 저장해 놓았던 글을 기록해 놓습니다.

Windows Server 2012 기반, 즉 Hyper-V 기반의 서버 가상화 인프라 구성 시 권장 구성에 대한 체크 리스트입니다. 어디까지나 권장 구성이기 때문에 실제 인프라의 상황에 따라 달라질 수 있습니다.


1. 하드웨어 펌웨어 업데이트 설치
호스트 서버 및 기타 하드웨어 장치(NIC, HBA 등)에 대한 펌웨어를 최신 버전으로 업데이트 합니다. 안정성 향상, 또는 SLAT, NPIV, ODX 등의 기능을 활용하기 위해 펌웨어 업데이트가 필요할 수 있으므로, 설치 전에 한 번 체크해 보도록 합니다.


2. Windows 2012 권장 업데이트 설치
반드시 가상 머신을 운영하기 전에 인프라 구성 시 아래 링크를 참고해 필요한 업데이트들을 설치할 것을 권장합니다.

Looking for Windows Server 2012 Clustering and Hyper-V Hotfixes?
Validating Hyper-V 2012 and Failover Clustering 2012 Hotfixes and updates with Powershell
http://blogs.technet.com/b/cedward/archive/2013/05/24/validating-hyper-v-2012-and-failover-clustering-2012-hotfixes-and-updates-with-powershell.aspx


3. 프린터 매핑 해제
도메인 그룹 정책 또는 로컬 그룹 정책을 사용해 Hyper-V 호스트에 대한 클라이언트 프린터 매핑 해제를 설정합니다. 운영자가 호스트 서버에 터미널 연결 시 드라이버 설치로 인해 예기치 않게 문제가 발생하지 않기 위해 설정을 권장합니다.

컴퓨터 구성 -> 관리 템플릿 -> Windows 구성 요소 -> 터미널 서비스 -> 원격 데스크톱 세션 호스트 -> 프린터 리디렉션
클라이언트 프린터의 리디렉션을 허용하지 않음: 사용


4. 필수 역할/기능 외 설치 금지
당연한 얘기지만 Hyper-V 호스트에는 필수적인 역할과 기능을 제외한 다른 기능을 설치하지 말 것을 권장합니다.
일반적인 구성 시 - 역할: Hyper-V,  기능: 장애 조치 클러스터, 다중 경로 IO
VDI 환경 구성 시 - 위 목록 외에 추가적으로 원격 데스크톱 서비스 역할


5. 백신 프로그램 예외 설정
보안 상의 이유로 Hyper-V 호스트 서버에 백신 프로그램을 설치하는 경우 아래 링크를 참고해 검사 예외 설정을 합니다.

- VHD, VHDX, AVHD, VSV, ISO 및 스냅샷 파일이 위치하는 모든 디렉터리
- 가상 머신 구성 디렉터리(기본 값: C:\ProgramData\Microsoft\Windows\Hyper-V 및 하위 디렉터리)
- 클러스터 환경의 경우 C:\Clusterstorage 및 하위 디렉터리
- vmms.exe, vmwp.exe 프로세스



6. TCP Chimney 기능 해제
Windows Server 2012의 자체 Teaming 기능을 사용하는 경우 네트워크 스택을 하드웨어(NIC)로 오프로드 하는 기능인 TCP Chimney Offload 기능을 해제하도록 합니다. 이외에 간혹 NIC의 특정 기능에 의해 예기치 않은 네트워크 관련 이상 증상이 발생하는 경우가 있습니다. 이런 경우 네트워크 인터페이스의 모든 Offload 기능들과 RSS 기능을 해제한 후 점검해 보시길 바랍니다.(TCP Connection Offload (IPV4), TCP Connection Offload (IPV6), TCP/UDP Checksum Offload (IPV4), TCP/UDP Checksum Offload (IPV4), Large Send Offload V2 (IPV4), Large Send Offload V2 (IPV6), Receive Side Scaling)

netsh int tcp set global chimney=disabled


7.  Jumbo Frame 설정
실시간 마이그레이션, 스토리지(iSCSI), CSV 리디렉션 용도의 네트워크 인터페이스에는 Jumbo Frame을 설정할 것을 권장합니다. 설정 방법은 제조사마다 조금씩 다를 수 있으나 보통 설정을 Enable, Disable하거나, MTU 설정을 9000 또는 9014로 설정하면 됩니다. 주의할 점은 네트워크 스위치 및 iSCSI 대상(스토리지)에 대해서도 설정이 되어야 합니다. 설정이 제대로 되었는지 확인하는 방법은 ping 명령을 이용합니다.

PING <대상 IP> -f -l 8000


8. CSV Cache 설정
Hyper-V 인프라가 VDI 환경에 사용되는 경우 CSV Cache 설정을 하도록 합니다. CSV Cache 기능을 메모리의 일부를 CSV 볼륨의 캐시로 활용해 비슷한 디스크 블록들이 다수 존재하는 VDI 환경에서 성능 향상을 기대할 수 있습니다. 기본적으로는 사용하지 않도록 설정되어 있으며, PowerShell에서 다음 명령을 통해 설정이 가능합니다.

- 메모리 설정 확인
Get-Cluster | fl *Cache*

- 캐시를 1GB로 설정(설정 후 각 호스트 재부팅)
(Get-Cluster).SharedVolumeBlockCacheSizeInMB = 1024

- CSV 볼륨 별 설정 확인
Get-ClusterSharedVolume | Get-ClusterParameter CsvEnableBlockCache

- CSV 볼륨에 대해 사용으로 설정(설정 후 디스크 리소스 Offline -> Online)
Get-ClusterSharedVolume <CSV 볼륨 이름> | Set-ClusterParameter CsvEnableBlockCache 1

 
 
:
Posted by 커널64
2013. 6. 1. 10:59

SCCM 2012 하드웨어 인벤토리 확장 SystemCenter2013. 6. 1. 10:59

SCCM 관리 서버의 configuration.mof 파일을 수정해 수집 항목을 수정할 수 있습니다.

기본 값으로 설치한 경우 파일의 기본 위치는 C:\Program Files\Microsoft Configuration Manager\inboxes\clifiles.src\hinv\configuration.mof 입니다.

해당 파일을 먼저 백업해 놓은 후 메모장으로 열어 맨 아래 부분에 아래와 같은 형태로 추가합니다.


#pragma namespace ("\\\\.\\root\\cimv2")
#pragma deleteclass("<Name_of_Custom_Class>", NOFAIL)

[DYNPROPS]
Class <Name_of_Custom_Class>
{
[key] string <Key_Property>;
String <Property1>;
String <Property2>;
};

[DYNPROPS]
Instance of <Name_of_Custom_Class>
{
<Key_Property>="<Value>";
[PropertyContext("Local|<Registry Location>|<Value Name>"),Dynamic,Provider("RegPropProv")] <Property1>;
[PropertyContext("Local|<Registry Location>|<Value Name>"),Dynamic,Provider("RegPropProv")] <Property2>;

예:)
[PropertyContext("Local|HKEY_LOCAL_MACHINE\\SOFTWARE\\DDK|Name"),Dynamic,Provider("RegPropProv")] Name;
[PropertyContext("Local|HKEY_LOCAL_MACHINE\\SOFTWARE\\DDK|Version"),Dynamic,Provider("RegPropProv")] Version;
};

파일을 저장한 후 SCCM 콘솔에서 관리 -> 클라이언트 설정 -> 클라이언트 설정 속성을 엽니다.
하드웨어 인벤토리 항목으로 이동해 '클래스 설정' 버튼을 클릭한 후 생성한 클래스를 추가하고 체크합니다.


:
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
2013. 4. 2. 17:59

디스크 성능 분석 도구 (SQLIO) Performance2013. 4. 2. 17:59

많은 분들이 디스크 성능 측정과 관련해 IOMeter 등의 도구들을 많이 사용하시고 계실텐데요, 제가 소개해 드릴 도구는 Microsoft에서 배포하는 SQLIO라는 디스크 성능 측정 도구입니다.

SQLIO Disk Subsystem Benchmark Tool
http://www.microsoft.com/en-us/download/details.aspx?id=20163

우선 프로그램을 다운 받아 설치하시면 되며, 기본적으로 32비트 Program Files\SQLIO 디렉터리에 설치됩니다.
실행 방법은 간단히 SQLIO.EXE 프로그램을 실행하실 수도 있겠으나 몇 가지 설정 방법을 설명 드리겠습니다.
*주의* 운영 중인 서버에서는 실행하시지 말 것을 적극 권장 드립니다.

먼저, 설치 디렉터리에 보면 param.txt 라는 이름의 기본 설정 파일이 있습니다.
이 파일을 메모장으로 열어 보시면 기본적으로 아래와 같은 내용이 입력되어 있습니다.

c:\testfile.dat 2 0x0 100
#d:\testfile.dat 2 0x0 100


입력된 값에 대한 설명은 다음과 같습니다.
c:\testfile.dat : IO 테스트 파일 경로
2 : 실행 스레드 수
0x0 : CPU 마스크
100 : 테스트 파일 크기(MB)

부연 설명을 드리자면 테스트할 드라이브에 파일을 생성하도록 설정하고, 실행 스레드 수는 시스템의 코어 수를 입력하시면 전체 CPU를 사용하게 됩니다. 그리고, 테스트에 사용할 파일은 되도록이면 크게 잡아주시는 것이 좀 더 정확한 데이터를 얻으실 수 있으니, 적어도 5GB 이상으로 설정해 주시는 것이 좋겠습니다. 참고로, 저의 테스트 환경에서는 아래와 같이 설정하였습니다.

c:\testfile.dat 16 0x0 5120
#d:\testfile.dat 2 0x0 100



설정 파일에 대한 수정이 끝나셨으면 이제 SQLIO.exe 명령을 아래의 예를 보시고 적당한 매개 변수를 달아 실행하시면 되겠습니다. 기본 테스트 시간은 30초이며, 테스트 시간을 정하시고자 하는 경우에는 -s 매개 변수를 사용하시면 됩니다.

sqlio -kR -BH -LS -o8 -fsequential -Fparam.txt -b8

옵션에 대한 설명
-kW : 쓰기 테스트 실행
-kR : 읽기 테스트 실행
-BH : 캐시 설정(하드웨어 캐시)
-LS : 지연 설정(시스템 타이머)
-o16 : 스레드 당 동시 IO 수(16개)
-frandom : 렌덤 IO 테스트
-fsequential : 순차 IO 테스트
-Fparam.txt : 참조 파라미터 파일
-b8 : 테스트 블럭 크기(8KB)


아래는 테스트 결과를 C:\<서버 이름_SQLIO>.txt 파일로 기록하는 내용인데, 텍스트 파일로 내린 이유는 아래에서 설명 드리겠지만 결과를 분석해 엑셀 시트로 간편하게 만드는 방법이 있기 때문입니다.

sqlio -kR -BH -LS -o16 -fsequential -Fparam.txt -b8 > C:\%COMPUTERNAME%_SQLIO.txt
sqlio -kR -BH -LS -o16 -fsequential -Fparam.txt -b32 >> C:\%COMPUTERNAME%_SQLIO.txt
sqlio -kR -BH -LS -o16 -fsequential -Fparam.txt -b64 >> C:\%COMPUTERNAME%_SQLIO.txt
sqlio -kR -BH -LS -o16 -fsequential -Fparam.txt -b128 >> C:\%COMPUTERNAME%_SQLIO.txt
sqlio -kR -BH -LS -o16 -fsequential -Fparam.txt -b256 >> C:\%COMPUTERNAME%_SQLIO.txt

sqlio -kW -BH -LS -o16 -fsequential -Fparam.txt -b8 >> C:\%COMPUTERNAME%_SQLIO.txt
sqlio -kW -BH -LS -o16 -fsequential -Fparam.txt -b32 >> C:\%COMPUTERNAME%_SQLIO.txt
sqlio -kW -BH -LS -o16 -fsequential -Fparam.txt -b64 >> C:\%COMPUTERNAME%_SQLIO.txt
sqlio -kW -BH -LS -o16 -fsequential -Fparam.txt -b128 >> C:\%COMPUTERNAME%_SQLIO.txt
sqlio -kW -BH -LS -o16 -fsequential -Fparam.txt -b256 >> C:\%COMPUTERNAME%_SQLIO.txt

sqlio -kR -BH -LS -o16 -frandom -Fparam.txt -b8 >> C:\%COMPUTERNAME%_SQLIO.txt
sqlio -kR -BH -LS -o16 -frandom -Fparam.txt -b32 >> C:\%COMPUTERNAME%_SQLIO.txt
sqlio -kR -BH -LS -o16 -frandom -Fparam.txt -b64 >> C:\%COMPUTERNAME%_SQLIO.txt
sqlio -kR -BH -LS -o16 -frandom -Fparam.txt -b128 >> C:\%COMPUTERNAME%_SQLIO.txt
sqlio -kR -BH -LS -o16 -frandom -Fparam.txt -b256 >> C:\%COMPUTERNAME%_SQLIO.txt

sqlio -kW -BH -LS -o16 -frandom -Fparam.txt -b8 >> C:\%COMPUTERNAME%_SQLIO.txt
sqlio -kW -BH -LS -o16 -frandom -Fparam.txt -b32 >> C:\%COMPUTERNAME%_SQLIO.txt
sqlio -kW -BH -LS -o16 -frandom -Fparam.txt -b64 >> C:\%COMPUTERNAME%_SQLIO.txt
sqlio -kW -BH -LS -o16 -frandom -Fparam.txt -b128 >> C:\%COMPUTERNAME%_SQLIO.txt
sqlio -kW -BH -LS -o16 -frandom -Fparam.txt -b256 >> C:\%COMPUTERNAME%_SQLIO.txt


출력된 결과를 직접 눈으로 확인하고 정리를 하셔도 되겠지만 좀 더 편하게 결과를 분석할 수 있는 방법을 알려 드리겠습니다. 먼저, 결과 파일을 MS Office가 설치되어 있는 PC로 복사해 온 다음 첨부된 PowerShell 스크립트 파일을 매개 변수로 결과 파일을 주어 실행하시면 아래와 같이 자동으로 결과를 Parsing 해서 엑셀 시트로 만들어 줍니다. PowerShell 스크립트의 출처는 http://sqlblog.com/blogs/jonathan_kehayias 입니다.









:
Posted by 커널64
2013. 3. 14. 16:51

SUSE Linux에 SCCM 에이전트 설치 SystemCenter2013. 3. 14. 16:51

System Center 2012 Configuration Manager SP1을 위한 Non-Windows, 즉 Linux, UNIX 등을 위한 SCCM 에이전트 설치 절차입니다.

Microsoft System Center 2012 Service Pack 1 Configuration Manager - Clients for Additional Operating Systems
먼저 위 링크에서 플랫폼에 맞는 설치 파일을 다운로드 받은 후 압축을 풉니다.

WinSCP 등을 이용해 대상 서버에 설치 파일(.tar 파일과 install 스크립트 파일)을 복사합니다.

다음과 같은 형태로 설치 명령을 입력해 에이전트를 설치합니다.
./install -mp <관리 지점> -sitecode <사이트 코드> <설치 파일 이름> 


그런 다음 SCCM 콘솔을 통해 해당 시스템을 승인해 주시면 됩니다.
인벤토리 수집 결과는 리소스 탐색기를 통해 확인하시면 되며, 다음과 같은 항목들이 수집됩니다.



아래는 기타 유용한 명령들과 참고 링크입니다.
로그 파일 보기
tail -f /var/opt/microsoft/scxcm.log

정책 수신
/opt/microsoft/configmgr/bin/ccmexec -rs policy

인벤토리 수집 
/opt/microsoft/configmgr/bin/ccmexec -rs hinv

에이전트 설치 방법 및 파라미터 정보

에이전트 서비스 제어(시작, 중지, 재시작)
:
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
2013. 3. 8. 11:53

Office Web Apps 서버 2013 설치 Collaboration2013. 3. 8. 11:53

Lync 2013 인프라 설치 후 한 가지 빠뜨릴 수 있을 만한 기능이 있습니다.
바로 Office Web Apps 서버인데요. Lync 대화 상자의 도구들 중 프레젠테이션 공유 기능이 있습니다.




만약, 기본 서버 인프라만 설치된 상태에서 이 기능을 사용하고자 클릭하고 공유할 PPT 파일을 선택하면 잠시 후 다음과 같은 오류 메시지가 나타나게 됩니다.
'서비스 연결에 문제가 있어 <파일 이름>.pptx을(를) 업로드할 수 없습니다. 문제가 계속되는 경우 지원 팀에 문의하세요.'



Lync 서버의 이벤트 로그에도 주기적으로 아래와 같은 오류 이벤트가 기록됩니다.
원본: LS Data MCU
ID: 41033
설명: Office WAC(Web Apps Server) 검색이 실패했으며 PowerPoint 콘텐츠를 사용할 수 없습니다.
시도한 Office Web Apps Server 검색 URL:
받은 오류 메시지: Invalid Uri syntax for WAC configuration
원인: Office Web Apps Server를 사용할 수 없거나 네트워크 연결이 손상되었을 수 있습니다.
해결 방법: 검색 URL을 사용하여 이 상자에서 Office Web Apps Server 배포로의 HTTPS 연결을 확인하세요.


이는 토폴로지 구성에 Office Web Apps 서버 구성이 되어 있지 않기 때문에 발생합니다.

Office Web Apps 서버는 Windows Server 2008 R2 SP1 또는 Windows Server 2012에 설치될 수 있으며, Exchange Server, SharePoint Server 및 Lync Server와 함께 설치할 수 없습니다.

먼저, 운영 체제 별로 소프트웨어 요구 사항을 설치합니다.

Windows Server 2012의 경우
- 역할 및 기능(PowerShell)
Add-WindowsFeature Web-Server,Web-Mgmt-Tools,Web-Mgmt-Console,Web-WebServer,Web-Common-Http,Web-Default-Doc,Web-Static-Content,Web-Performance,Web-Stat-Compression,Web-Dyn-Compression,Web-Security,Web-Filtering,Web-Windows-Auth,Web-App-Dev,Web-Net-Ext45,Web-Asp-Net45,Web-ISAPI-Ext,Web-ISAPI-Filter,Web-Includes,InkandHandwritingServices

Windows Server 2008 R2 SP1의 경우
- Microsoft .NET Framework 4.5
http://www.microsoft.com/ko-kr/download/details.aspx?id=30653
- Windows Management Framework 3.0
http://www.microsoft.com/en-us/download/details.aspx?id=34595
- KB2592525
http://support.microsoft.com/kb/2592525
(참고로, 이 업데이트를 설치하려는데 적용할 수 없다는 메시지를 보실 수도 있습니다. 그런 경우에는 KB2670838을 제거하신 후 설치하시기 바랍니다.)
- 역할 및 기능(PowerShell)
Add-WindowsFeature Web-Server,Web-WebServer,Web-Common-Http,Web-Static-Content,Web-App-Dev,Web-Asp-Net,Web-Net-Ext,Web-ISAPI-Ext,Web-ISAPI-Filter,Web-Includes,Web-Security,Web-Windows-Auth,Web-Filtering,Web-Stat-Compression,Web-Dyn-Compression,Web-Mgmt-Console,Ink-Handwriting,IH-Ink-Support

.NET Framework를 IIS 보다 먼저 설치한 경우에는 아래 명령을 실행해 줍니다.
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -iru


Microsoft Office Web Apps 서버를 다운로드하고 설치합니다.
http://www.microsoft.com/ko-kr/download/details.aspx?id=35489


설치는 그냥 기본 값으로 설치하시면 됩니다.



인증 기관을 통해 Office Web Apps 서버의 FQDN으로 웹 서버 용도의 인증서를 설치합니다.



PowerShell을 실행해 새로운 팜을 생성합니다.
Import-Module OfficeWebApps
New-OfficeWebAppsFarm -InternalURL <HTTPS URL 주소(FQDN)> -CertificateName <인증서 이름>



정상적으로 생성이 되었는지 확인해 보기 위해 페이지를 열어 봅니다.
https://<설정한 FQDN>/hosting/discovery



Office Web Apps 서버에서의 작업은 모두 끝났습니다. 이제 Lync 서버로 이동해 Office Web Apps 서버를 사용하도록 설정하시면 됩니다.

1. 토폴로지 작성기에서 '새 Office Web Apps Server' 클릭


2. Office Web Apps 서버의 FQDN 입력(아래는 자동으로 입력됩니다.)


3. 프런트 엔드 서버의 속성에서 Office Web Apps 서버 설정


4. 포톨로지 게시

5. Lync Server 이벤트 로그(41034, 41032) 확인 


참고: Integration Office Web Apps with Exchange Server 2013
http://technet.microsoft.com/en-us/library/jj150495.aspx

참고: Integration Office Web Apps with SharePoint 2013
http://technet.microsoft.com/en-us/library/ee855124

참고: Office Web Apps
http://technet.microsoft.com/en-us/library/jj219456.aspx



:
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