亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

如何利用PowerShell監(jiān)控Win-Server性能詳解

 更新時間:2018年10月26日 08:36:25   作者:GeaoZhang  
這篇文章主要給大家介紹了關于如何利用PowerShell監(jiān)控Win-Server性能的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

前言

Q:如何系統(tǒng)層面的去監(jiān)控一下Windows Server?

A:額……一時間的話……能想到的可能也就是PowerShell+SQL Server+job,試試。

本文就給大家介紹了關于利用PowerShell監(jiān)控Win-Server性能的相關內容,下面話不多說了,來一起看看詳細的介紹吧

一、關于PowerShell

1、什么是PowerShell

  表層面的翻譯:強大的Shell。

  強大?

  如果是從知名度和用戶的使用量來談的話,PowerShell相較當下流行的一些面向對象的語言來說應該是遜色太多太多了,但是,作為一款系統(tǒng)內置的腳本語言,和Linux里的Shell一樣,說其強大當然是不容置喙的。

  Windows PowerShell 是一種命令行外殼程序和腳本環(huán)境,是運行在windows機器上實現(xiàn)系統(tǒng)和應用程序管理自動化的命令行腳本環(huán)境,使命令行用戶和腳本編寫者可以利用 .NET Framework的強大功能。你可以把它看成是命令行提示符cmd.exe的擴充,不對,應當是顛覆。 powershell需要.NET環(huán)境的支持,同時支持.NET對象。微軟之所以將Powershell 定位為Power,并不是夸大其詞,因為它完全支持對象。其可讀性,易用性,可以位居當前所有shell之首。

2、如何打開PowerShell

  1)Win鍵+R,輸入cmd,然后cmd會話框里再輸入powershell

  2)Win鍵+R,輸入powershell,即來到其會話框

  3)或是直接找到Windows PowerShell程序打開

3、學習PowerShell

  一開始接觸到PowerShell的時候,也是有一些懵圈的,但多少也還是和DOS、Shell命令有些相似之處,習慣就好。

  推薦學習網(wǎng)站:http://www.pstips.net/powershell-online-tutorials/

二、PowerShell腳本的編寫與執(zhí)行

1、編寫腳本(.psl擴展名的腳本文件)

  1)對于簡單的小腳本編寫,可以通過echo命令重定向進文件,或是將腳本文件通過@‘ '@閉合起來

PS E:\> echo "Hello China"
Hello China
PS E:\> echo "Hello China">hello.psl
PS E:\> cat .\hello.psl
Hello China
PS E:\> @'
>> dir
>> help dir
>> ls
>> '@>test.psl

  2)復雜點的大腳本編寫,一般借助文本編輯器方便些。

2、腳本執(zhí)行

  1)PowerShell腳本的執(zhí)行直接是使用腳本文件的相對路徑,或者絕對路徑

  2)通過別名設置(> Set-Alias),將腳本的執(zhí)行語句保存為別名,如此,就能像輸入命令一樣的執(zhí)行腳本

3、執(zhí)行策略限制

  腳本能否執(zhí)行取決于Powershell的執(zhí)行策略;

  Powershell一般初始化情況下都會禁止腳本執(zhí)行。只有管理員才有權限更改該策略,非管理員會報錯。以管理員身份打開powershell:

PS E:\> Get-ExecutionPolicy
Restricted
PS E:\> Set-ExecutionPolicy Unrestricted

執(zhí)行策略更改
執(zhí)行策略可幫助你防止執(zhí)行不信任的腳本。更改執(zhí)行策略可能會產(chǎn)生安全風險,如 https:/go.microsoft.com/fwlink/?LinkID=135170
中的 about_Execution_Policies 幫助主題所述。是否要更改執(zhí)行策略?
[Y] 是(Y) [A] 全是(A) [N] 否(N) [L] 全否(L) [S] 暫停(S) [?] 幫助 (默認值為“N”): y

  查看所有支持的執(zhí)行策略:

  1>Unrestricted:權限最高,可以不受限制執(zhí)行任何腳本。

  2>Default:為Powershell默認的策略:Restricted,不允許任何腳本執(zhí)行。

  3>AllSigned:所有腳本都必須經(jīng)過簽名才能在運行。

  4>RemoteSigned:本地腳本無限制,但是對來自網(wǎng)絡的腳本必須經(jīng)過簽名。

三、獲取系統(tǒng)性能情況

1、主機名

PS D:\> $env:computername

2、CPU使用情況

  注意,-f:-filter:過濾,執(zhí)行;對于不是很清楚的命令可以通過 man 命令 來獲取幫助。

3、內存使用情況

PS D:\> $mem = gwmi win32_OperatingSystem
PS D:\> $mem
SystemDirectory : C:\Windows\system32
Organization :
BuildNumber : 15063
RegisteredUser : Windows 用戶
SerialNumber : 00331-10000-00001-AA275
Version : 10.0.15063

  1)總內存:

PS D:\> $Allmem = "{0:0.0} MB" -f ($mem.TotalVisibleMemorySize / 1KB)
PS D:\> $Allmem
4003.4 MB

  2)剩余內存:

PS D:\> $Freemem = "{0:0.0} MB" -f ($mem.FreePhysicalMemory / 1KB)
PS D:\> $Freemem
285.5 MB

  3)內存使用比:

PS D:\> $Permem = "{0:0.0} %" -f ((($mem.TotalVisibleMemorySize-$mem.FreePhysicalMemory)/$mem.TotalVisibleMemorySize)*100)
PS D:\> $Permem
92.9 %

4、磁盤使用情況

  1)多條件過濾:只獲取D、E磁盤的信息

  PS D:\> gwmi win32_logicaldisk -f "drivetype=3 and (DeviceID='E:' or DeviceID='D:')"

  2)輔助智能顯示信息:

PS D:\> gwmi Win32_LogicalDisk | Foreach-Object { 'Disk {0} has {1:0.0} GB space available' -f $_.Caption, ($_.FreeSpace / 1024MB) }
Disk C: has 53.1 GB space available
Disk D: has 183.5 GB space available
Disk E: has 164.1 GB space available

5、大合集:執(zhí)行腳本獲取CPU、內存信息

PS D:\> cat .\GetCPUMem.ps1
$Server = $env:computername
#server's CPU Mem Hardinfor
 $cpu = Get-WMIObject –computername $Server win32_Processor
 $mem = gwmi -ComputerName $Server win32_OperatingSystem
 $Disks = gwmi –Computer: $Server win32_logicaldisk -filter "drivetype=3"
 $Havecpu = "{0:0.0} %" -f $cpu.LoadPercentage
 $Allmem = "{0:0.0} MB" -f ($mem.TotalVisibleMemorySize / 1KB)
 $Freemem = "{0:0.0} MB" -f ($mem.FreePhysicalMemory / 1KB)
 $Permem = "{0:0.0} %" -f ((($mem.TotalVisibleMemorySize-$mem.FreePhysicalMemory)/$mem.TotalVisibleMemorySize)*100)
 Write-Host "COMPUTER:$Server"`r`n
# `r`n表示換行輸出
 Write-Host "CPU:$Havecpu"`r`n
 Write-Host "Total Mem:$Allmem"
 Write-Host "Free Mem:$Freemem"
 Write-Host "Used Mem:$Permem"`r`n
 $IpAdd = (Get-WmiObject -class win32_NetworkAdapterConfiguration -Filter 'ipenabled = "true"').ipaddress[0]
 Write-Host "Ipaddress:$IpAdd"`r`n

PS D:\> .\GetCPUMem.ps1
COMPUTER:DESKTOP-P8MIUHK

CPU:15.0 %

Total Mem:4003.4 MB
Free Mem:272.9 MB
Used Mem:93.2 %

Ipaddress:192.168.203.111

四、系統(tǒng)性能監(jiān)控:CPU、內存、Disk

1、利用psl腳本獲取性能信息

  死循環(huán)作業(yè),只需要啟動一次job即ok,如果擔心重啟之后停掉,就設置:start automatically when SQL Server Agent start。

2、監(jiān)控標準把控

  1)CPU:80%

  2)內存:60% (通過io 和 ple 側面反映內存情況)

  3)Disk:90%

3、T-SQL存儲過程

USE [TestDB]
GO
/*系統(tǒng)性能監(jiān)控:CPU、內存、disk*/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER proc M_cpumem
--手動獲取數(shù)據(jù)庫服務器IP
@ip nvarchar(20)
AS
BEGIN
 /*獲取CPU、內存使用情況信息*/
 --作業(yè)Get-CPU_Mem,執(zhí)行powershell腳本
 DECLARE @cm nvarchar(100)
 SET @cm=(
  SELECT log 
  FROM msdb.dbo.sysjobstepslogs)
 --cpu使用率
 DECLARE @cpu int
 SET @cpu=CAST((SELECT SUBSTRING(@cm,5,4)) AS numeric(2,0))
 --內存使用率
 DECLARE @mem int
 SET @mem=CAST((SELECT SUBSTRING(@cm,22,4)) AS numeric(2,0))
 
 /*CPU過載報警監(jiān)控*/
 --CPU使用率大于80%說明系統(tǒng)出現(xiàn)高耗
 IF (@cpu>80)
 BEGIN
  DECLARE @str_subject_cpu nvarchar(100),@str_html_cpu nvarchar(max);
  SET @str_subject_cpu='服務器:'+@ip+' CPU高耗報警'
  --CPU或調度器當前分配的工作情況
  SET @str_html_cpu='Dear All:
    <br>&nbsp;&nbsp;系統(tǒng)CPU>80%,請參閱系統(tǒng)調度情況,進行性能優(yōu)化處理!<br>
    <table border=1 >'+
    '<tr>
     <td style="width: 80px"><p align="center" >Scheduler_ID</p></td>
     <td style="width: 80px"><p align="center" >CPU_ID</p></td>
     <td style="width: 150px"><p align="center" >狀態(tài)</p></td>
     <td style="width: 80px"><p align="center" >Is_Idle</p></td>
     <td style="width: 90px"><p align="center" >當前任務數(shù)</p></td>
     <td style="width: 80px"><p align="center" >等待調度線程數(shù)</p></td>
     <td style="width: 90px"><p align="center" >當前線程數(shù)</p></td>
     <td style="width: 90px"><p align="center" >活動線程數(shù)</p></td>
     <td style="width: 90px"><p align="center" >掛起任務數(shù)</p></td>
    </tr>'+
   CAST((
    SELECT
     td=scheduler_id,'',
     td=cpu_id,'',
     td=status,'',
     td=is_idle,'',
     td=current_tasks_count,'',
     td=runnable_tasks_count,'',
     td=current_workers_count,'',
     td=active_workers_count,'',
     td=work_queue_count,''
    FROM master.sys.dm_os_schedulers
    WHERE scheduler_id<255
    FOR xml path('tr'),type
    ) AS nvarchar(max))+
    N'</table>';
  BEGIN 
   EXEC msdb.dbo.sp_send_dbmail
   @profile_name='Email',
   @recipients='xxx@xxx.com',
   @subject=@str_subject_cpu,
   @body=@str_html_cpu,
   @body_format='HTML'    
  END
 END
 
 /*內存過載報警監(jiān)控*/
 --內存使用率大于60%說明系統(tǒng)出現(xiàn)高耗
 IF (@mem>60)
 BEGIN
  DECLARE @str_subject_mem nvarchar(100),@str_html_mem nvarchar(max);
  SET @str_subject_mem='服務器:'+@ip+' 內存高耗報警'
  --系統(tǒng)性能計數(shù)器
  SET @str_html_mem='Dear All:
    <br>&nbsp;&nbsp;系統(tǒng)Memory>60%,請參閱系統(tǒng)性能監(jiān)控情況,進行性能優(yōu)化處理!<br>
    <table border=1 >'+ 
    '<tr>
     <td style="width: 150px"><p align="center" >Object_Name</p></td>
     <td style="width: 150px"><p align="center" >Counter_Name</p></td>
     <td style="width: 100px"><p align="center" >Value</p></td>    
    </tr>'+
   CAST((
    SELECT 
     td=object_name,'',
     td=counter_name,'',
     td=cntr_value,''
    FROM sys.dm_os_performance_counters
    WHERE object_name in ('SQLServer:Buffer Manager','SQLServer:Memory Manager') 
    AND counter_name in ('Buffer cache hit ratio','Checkpoint pages/sec','Lazy writes/sec','Page lIFe expectancy','Memory Grants PENDing','Target Server Memory (KB)','Total Server Memory (KB)')
    FOR xml path('tr'),type
    ) AS nvarchar(max))+
    N'</table>';
  BEGIN 
   EXEC msdb.dbo.sp_send_dbmail
   @profile_name='Email',
   @recipients='xxx@xxx.com',
   @subject=@str_subject_mem,
   @body=@str_html_mem,
   @body_format='HTML'    
  END
 END

 /*磁盤使用報警監(jiān)控*/
 --磁盤可使用率小于15%時進行郵件報警
 CREATE TABLE temp_disk_space(Drive_Name nvarchar(50),Total_Space_GB NUMERIC(18,2),Free_Space_GB NUMERIC(18,2))
 INSERT INTO temp_disk_space 
 SELECT DISTINCT 
  vs.volume_mount_point, 
  CAST(vs.total_bytes / 1024.0 / 1024 / 1024 AS NUMERIC(18,2)),
  CAST(vs.available_bytes / 1024.0 / 1024 / 1024 AS NUMERIC(18,2)) 
 FROM sys.master_files AS f 
 CROSS APPLY sys.dm_os_volume_stats(f.database_id,f.file_id) AS vs 
 
 SELECT Drive_Name,(Free_Space_GB * 100)/Total_Space_GB AS [% Free_Space] 
 INTO #temp_space_monitor 
 FROM temp_disk_space 
 ORDER BY Drive_Name 
 
 IF exists(SELECT 1 FROM #temp_space_monitor WHERE [% Free_Space] < 15) 
 BEGIN
  DECLARE @str_subject_disk nvarchar(100);
  SET @str_subject_disk='服務器:'+@ip+' 磁盤空間不足' 
  EXEC msdb.dbo.sp_send_dbmail
  @profile_name='Email',
  @recipients='xxx@xxx.com',
  @subject=@str_subject_disk,
  @body = 'Dear ALL:
  請及時清理磁盤,磁盤空間使用情況見附件!',
  @query = 'SELECT * FROM TestDB.dbo.temp_disk_space', --使用全稱
  @attach_query_result_as_file = 1, 
  @query_attachment_filename = 'disk.txt'
 END 
 
 DROP table TestDB.dbo.temp_disk_space, #temp_space_monitor 
    
END

4、最后就是將上面的存儲過程添加到定時作業(yè)里進行監(jiān)控

總結:

最后的功能是實現(xiàn)了,到達了Windows Server性能的監(jiān)控要求,但是,各種波折的獲取性能信息,真的是很難把控到“實時監(jiān)控”。

好了,以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關文章

  • PowerShell實現(xiàn)統(tǒng)計函數(shù)嵌套深度

    PowerShell實現(xiàn)統(tǒng)計函數(shù)嵌套深度

    這篇文章主要介紹了PowerShell實現(xiàn)統(tǒng)計函數(shù)嵌套深度,本文分享一個函數(shù),可以實現(xiàn)統(tǒng)計腳本執(zhí)行的嵌套層次,需要的朋友可以參考下
    2015-06-06
  • PowerShell中使用正則表達式篩選數(shù)組實例

    PowerShell中使用正則表達式篩選數(shù)組實例

    這篇文章主要介紹了PowerShell中使用正則表達式篩選數(shù)組實例,使用match操作符配合相應正則表達式實現(xiàn)數(shù)組篩選功能,需要的朋友可以參考下
    2014-07-07
  • 了解Powershell中的Exit函數(shù)

    了解Powershell中的Exit函數(shù)

    這篇文章主要介紹了了解Powershell中的Exit函數(shù),對exit的函數(shù)使用技巧上做了小結,并用實例說明了exit函數(shù)的使用,需要的朋友可以參考下
    2014-07-07
  • Windows Powershell強類型數(shù)組

    Windows Powershell強類型數(shù)組

    強類型數(shù)組可以理解為強制數(shù)據(jù)類型的數(shù)組,也就是一個數(shù)組里只包含一種數(shù)據(jù)類型,強制轉換數(shù)組語法的優(yōu)勢就是如果使用分號代替逗號分隔值,PowerShell將每個值看作命令文本,PowerShell會執(zhí)行它并且存儲結果。
    2014-09-09
  • PowerShell小技巧之獲取域名whois信息

    PowerShell小技巧之獲取域名whois信息

    平常我們要查詢whois信息都是通過godaddy、name.com、萬網(wǎng)、新網(wǎng)等域名注冊商網(wǎng)站通過查詢頁面提交域名進行查詢,既慢又不能批量查詢,太費勁了,這里我就把我珍藏很久的一個PS function貢獻給大家,這個腳本支持140多種后綴的域名進行查詢。
    2014-10-10
  • Powershell從注冊表中查詢默認MAPI客戶端的例子

    Powershell從注冊表中查詢默認MAPI客戶端的例子

    這篇文章主要介紹了Powershell從注冊表中查詢默認MAPI客戶端的例子
    2014-05-05
  • Tornado中database模塊被取消的替代方法

    Tornado中database模塊被取消的替代方法

    這篇文章主要介紹了Tornado中database模塊被取消的替代方法,新的方法是使用torndb模塊,需要的朋友可以參考下
    2014-08-08
  • 探索PowerShell(十一)函數(shù)介紹

    探索PowerShell(十一)函數(shù)介紹

    通常,代碼塊就是指函數(shù),調用函數(shù),就是執(zhí)行不同的代碼塊,以便實現(xiàn)各種功能
    2012-12-12
  • PowerShell中實現(xiàn)播放WAV音頻文件

    PowerShell中實現(xiàn)播放WAV音頻文件

    這篇文章主要介紹了PowerShell中實現(xiàn)播放WAV音頻文件,本文直接給出實現(xiàn)代碼,需要的朋友可以參考下
    2015-03-03
  • PowerShell中終止管道的方法

    PowerShell中終止管道的方法

    這篇文章主要介紹了PowerShell中終止管道的方法,本文直接給出代碼實例,需要的朋友可以參考下
    2015-05-05

最新評論