设为首页 收藏本站
查看: 1355|回复: 0

使用PowerShell排错----使用PowerShell调查Server问题

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-7-18 10:34:17 | 显示全部楼层 |阅读模式
PowerShell与WMI框架完全集成,而WMI框架对于查找Windows系统详细信息来说是很强大的方式。传统访问WMI并不容易,因为这主要通过程序界面来实现。PowerShell开启访问WMI使得它成为对排错很有用的资源。
查询磁盘空间使用率
在这个例子中,你将会看到如何利用WMI win32-logicaldisk类来获取服务器的磁盘空间使用率的信息。开始时,该类会返回原始信息,然后会利用数据去生成可用磁盘空间的细节分析:
Get-wmiobject win32_logicaldisk
运行Get-WmiObject并提供win32_logicaldisk类,将会返回计算机的如下结果:
DeviceID : C:
DriveType : 3
ProviderName :
FreeSpace : 105582891008
Size : 128742060032
VolumeName :
DeviceID : D:
DriveType : 5
ProviderName :
FreeSpace : 0
Size : 45471744
VolumeName : VBOXADDITIONS_4.
这输出默认的列表视图可读性不高,但是你可以通过格式化成表来改进它:
Get-wmiobject win32-logicaldisk | format-table -autosize
这时输出就会类似下面的结果:
DeviceID DriveType ProviderName FreeSpace Size VolumeName
-------- --------- ------------ --------- ---- ----------
C: 3 105582891008 128742060032
D: 5 0 45471744 VBOXADDITIONS_4.
你或许想过滤信息,仅显示固定的磁盘。这可以通过Filter参数来实现:
Get-WmiObject Win32_logicaldisk -Filter "DriveType = 3" | Format-Table -autosize
这渐渐好转,但是结果显示的是可用空间和以字节为单位的大小。你可以修改脚本,把输出格式化为GB(代码文件:PS_DiskInfo01.PS1):
$diskinfo = Get-WmiObject Win32_logicaldisk -Filter "DriveType = 3"
$diskinfo | foreach-object {$_.FreeSpace = $_.FreeSpace / 1GB; '
$_.Size = $_.Size / 1GB}
$diskinfo | format-table -autoSize
查询当前Server的活动
检查一台远程计算机是否响应,首先可以检查ping响应。使用WMI类win32_pingstatus会非常简单。该类返回的数据是结构化的,它能够用于调查其他部分,或记录到磁盘文件中,e-mail给接收者,或存放在数据库。下面的例子检查ping测试的状态代码(0表示成功):
Get-WmiObject win32_pingstatus -Filter "Address='SQL2012'" '
| Select-Object statuscode
假设返回的状态代码是0,那么你就可以把注意力转向计算机上正在运行的服务。执行如下命令可以看到正在运行的服务:
Get-Service | Where-Object { $_.Status -eq 'Running' }
对于简单的服务查询,使用Get-Service会很方便。不幸的是,它不提供访问服务的每个属性。查看服务状态及启动模式很有用。幸运的是,该信息可以使用WMI类Win32-Service来获取,下面的脚本是显示查询该类的例子,它能够找出自动启动但当前是停止的服务:
Get-WmiObject -Class Win32_Service -Property Name,State,StartMode -Filter
"StartMode='Auto' AND State='Stopped'" '
| Select-Object -Property Name,StartMode,State
在排错时找出哪些进程是活动的是很有用的。通常,一个进程耗完CPU或内存,因此会施压给系统,引起其他关键的服务急需资源。PowerShell通过Get-Proces立即去营救,返回进程信息。一个繁忙的系统有很多正在运行的进程,所以我喜欢运行2个查询,第一个找出前10个CPU使用最高的进程,第二个超出前10个内存使用最高的进程,如下
PS C:\> get-process | Sort-Object CPU -Descending | Select-Object -First 10
PS C:\> get-process | Sort-Object WS -Descending | Select-Object -First 10
查询警告和错误信息
当Server异常时,常会发生错误。调查Windows事件日志是调查哪里出错的第一步。PowerShell完全支持Windows事件日志。Get-EventLog会罗列一个事件日志中所有条目。下面的例子显示了源为MSSQLSERVER且是错误类型的条目列表:
Get-Eventlog application '
| Where-Object {$_.Source -eq "MSSQLSERVER" -and $_.EntryType -eq "Error"}
SQL Server也会有错误日志,常常包含有关SQL Server特定问题的详细信息。下面的例子显示了如何查询SQL Server错误日志并过滤出类型为错误的结果(PS_ReadSQLErrorLog01.PS1):
[reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo") | out-null
$server = New-Object "Microsoft.SqlServer.Management.Smo.Server" "(local)"
$server.ReadErrorLog() | Where-Object {$_.Text -like "Error:*"}
我的本地只有一个默认的SQL Server实例,如果你使用一个命名的实例,要把“(local)”换成SQL Server实例名称。
使用SQL Server Management Objects也能很快过滤可用的Job,识别出那些最后一次失败的并且是开启状态的Job。下面的脚本显示了如何查询SMO对象,来获取运行失败但处于开启状态的Job(代码文件:PS_ReadFailedJobs01.PS1):
[reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo") | out-null
$server = New-Object "Microsoft.SqlServer.Management.Smo.Server" "(local)"
$server.jobserver.jobs | where-object {$_.lastrunoutcome -eq "Failed" -and
$_.isenabled -eq $TRUE}
查询Server性能
PowerShell 2.0和Windows性能计数器集成了。这意味着你可以快速查看所有的性能计数器:
Get-Counter -listSet * | Select-Object -ExpandProperty Paths
然后你可以找出SQL Server特定的计数器:
Get-Counter -listSet * | Select-Object -ExpandProperty Paths | where-object {$_ -like "*SQL*"}
也可以获取一个性能计数器的一个样本:
Get-Counter '\Processor(*)\% Processor Time'
你甚至可以让PowerShell侦听计数器并收集样本,直到你按下CTRL+C:
Get-Counter '\Processor(*)\% Processor Time' -continuous


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-22294-1-1.html 上篇帖子: 使用PowerShell排错----PowerShell入门 下篇帖子: 使用PowerShell排错----使用PowerShell调校SQL Server性能
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表