Powershell 是运行在windows机器上实现系统和应用程序管理自动化的命令行脚本环境。你能够把它当作是命令行提示符cmd.exe的扩充,不对,应当是颠覆。 powershell须要.NET环境的支持,同时支持.NET对象。微软之因此将Powershell 定位为Power,并非夸大其词,由于它彻底支持对象,面向对象的便捷可想而知了。其可读性,易用性都很是的完美。python
在运维windows 服务器的时候,其做用是很是大的。简洁高效等等。这里我简单用一个我应用的地方来展现一下。sql
有时候咱们须要监视来自特定用户电脑对于数据库的链接。好比该用户说,他偶尔会断开链接或者有时链接某个程序时出现问题,而数据库就是个人数据库。这个问题一开始真的很让我着急(FUCK),由于问题不是常常可以重现难以追踪。即便重现了错误,可能提供的信息也不够完整。shell
为了帮助实现对此类问题的troubleshoot ,我编写了两个PowerShell 脚本。脚本可以能够无人值守,而且日志在一段时间后查询。我打算在用户的PC上运行这个脚本,而且该PC在不一样的网络或者不一样的子网。也能够在同一时间在SQLServer服务器运行脚本。会产生三个不一样的日志文件,而后进行比较。这些脚本是对于cpu使用和负载占用不多的轻量级程序。可是必需要谨慎使用运行的查询,尽可能针对一些小的表进行查询等,好比select count(*)from 小表。数据库
基本上全部这些脚本主要实现是:链接SQLServer而且执行查询。循环执行查询知道手动终止它。假若有错误重现了,就会记录日志到日志文件而后再次链接->执行查询。小程序
OpenConnQueryCloseConn.ps1 - 这个脚本做用就是打开链接数据库实例,运行sql指令,而后关闭链接。这个处理将会一次又一次的重复直到你手动关闭它。windows
OpenConnLoopQuery_Long.ps1 - 第二个脚本的功能就是打开链接,让它保持打开而后重复执行查询脚本,直到你手动终止循环才会中断循环关闭链接。服务器
图1 最大区别在于循环位置网络
两个脚本都会在终端和日志记录日志。若是链接产生问题咱们也但愿在日志文件中看到错误信息。当错误信息只在一个日志文件中,那么有时就能引导咱们发现网络或者特定的某种错误。运维
首先咱们来看一下OpenConnQueryCloseConn.ps1这个脚本。这个脚本一开始先设定链接参数。确保下面的参数是可用的参数。函数
21-27行就是咱们的链接参数和查询命令变量 。
图2 主要的参数变量
$serverName="服务器名称" $databaseName="数据库名称" $uid="User ID" $pwd="user Password " $sqlCommand="命令语句-好比查询一个小表的行数" $logLoaction="记录日志文件的位置. --- c:\ps\OpenConnQueryCloseConn.log"
脚本的底部就是循环的主要部分。
图3 循环部分
fn_HitSQL 函数大部分工做已经完成了。打开数据库链接而后不断去执行查询。有不少地方主要的工做就是日志记录。以下:
图4 日志记录部分
还有一个函数去记录链接和错误。函数fn_WriteToLog 将错误信息附加上日期后记录到终端而后添加到日志文件中。
作好了以上全部工做后,执行脚本,当法伤网络链接问题时,就会产生日志文件错误日志。以下:
错误日志信息
第二个脚(OpenConnLoopQuery_Long.ps1 )本基本上与第一个同样如图1 中所示同样就是在执行语句后面紧跟着一个循环语句这样避免了关闭链接。在一个链接中不断重复语句。这里也就不仔细讲解了。
运行两个脚本须要执行powershell 脚本,指令以下,固然也能够本身拼写:
PowerShell.exe -ExecutionPolicy Bypass -File C:\PS\OpenConnLoopQuery_Long.ps1
PowerShell.exe -ExecutionPolicy Bypass -File C:\PS\OpenConnQueryCloseConn.ps1
须要注意的是要提早设定好路径“C:\PS”
没找到如何上传脚本...,有哪位大神能够告知。具体脚本可向我询问留言便可。发邮箱
谢谢博友提供方式。
下载地址:
http://files.cnblogs.com/files/wenBlog/OpenConnLoopQuery_Long.zip
http://files.cnblogs.com/files/wenBlog/OpenConnQueryCloseConn.zip
本篇主要介绍了本身开发的一个利用powershell来实现的循环监测链接出现网络异常的脚本。本质上就是循环链接查询数据库,记录链接失败或者查询失败的信息。以前经过C#和其余开发工具也都实现过不管是windowsService 仍是其余小程序。可是感受powershell开发起来更简单,对机器性能影响更小,固然python也是同样的道理。之因此选择使用powershell主要是学习响应的语法便于未来运维windows服务器。愈来愈发现PowerShell的强大,与高手相比还有很大空间要去学习。