概念

Powershell 是运行在windows机器上实现系统和应用程序管理自动化的命令行脚本环境。你可以把它看成是命令行提示符cmd.exe的扩充,不对,应当是颠覆。 powershell需要.NET环境的支持,同时支持.NET对象。微软之所以将Powershell 定位为Power,并不是夸大其词,因为它完全支持对象,面向对象的便捷可想而知了。其可读性,易用性都非常的完美。

在运维windows 服务器的时候,其作用是非常大的。简洁高效等等。这里我简单用一个我应用的地方来展示一下。

背景

有时候我们需要监视来自特定用户电脑对于数据库的连接。比如该用户说,他偶尔会断开连接或者有时连接某个程序时出现问题,而数据库就是我的数据库。这个问题一开始真的很让我着急(FUCK),因为问题不是经常能够重现难以追踪。即使重现了错误,可能提供的信息也不够完整。

为了帮助实现对此类问题的troubleshoot ,我编写了两个PowerShell 脚本。脚本能够可以无人值守,并且日志在一段时间后查询。我打算在用户的PC上运行这个脚本,并且该PC在不同的网络或者不同的子网。也可以在同一时间在SQLServer服务器运行脚本。会产生三个不同的日志文件,然后进行比较。这些脚本是对于cpu使用和负载占用很少的轻量级程序。但是必须要谨慎使用运行的查询,尽量针对一些小的表进行查询等,比如select count(*)from 小表。

基本上所有这些脚本主要实现是:连接SQLServer并且执行查询。循环执行查询知道手动终止它。假如有错误重现了,就会记录日志到日志文件然后再次连接->执行查询。

OpenConnQueryCloseConn.ps1 - 这个脚本作用就是打开连接数据库实例,运行sql指令,然后关闭连接。这个处理将会一次又一次的重复直到你手动关闭它。

OpenConnLoopQuery_Long.ps1 - 第二个脚本的功能就是打开连接,让它保持打开然后重复执行查询脚本,直到你手动终止循环才会中断循环关闭连接。

图1 最大区别在于循环位置

两个脚本都会在终端和日志记录日志。如果连接产生问题我们也希望在日志文件中看到错误信息。当错误信息只在一个日志文件中,那么有时就能引导我们发现网络或者特定的某种错误。

PowerShell脚本的概述

首先我们来看一下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的强大,与高手相比还有很大空间要去学习。

使用PowerShell 监控运行时间和连接情况的更多相关文章

  1. datasnap 如何监控客户端的连接情况

    如果客户端是TCP/IP是短连接的情况就没有必要了. type pClientConns = ^TClientConns; // 客户连接 TClientConns = record clientid ...

  2. zabbix监控redis连接情况

    配置zabbix客户端配置文件 vim /etc/zabbix/zabbix_agentd.conf 添加  Include=/etc/zabbix/zabbix_agentd.d/ 添加脚本对red ...

  3. [AlwaysOn Availability Groups]使用Powershell监控AlwayOn健康

    使用Powershell监控AlwayOn健康 1.基本命令概述 AlwayOn Dashboard是很有用的查看整体AG健康状况的工具.但是这个工具不是用于7*24监控的.如果应用程序夜间发送严重的 ...

  4. netstat监控大量ESTABLISHED连接与Time_Wait连接问题

    问题描述: 在不考虑系统负载.CPU.内存等情况下,netstat监控大量ESTABLISHED连接与Time_Wait连接. # netstat -n | awk '/^tcp/ {++y[$NF] ...

  5. netstat监控大量ESTABLISHED连接与Time_Wait连接问题(转载)

    问题描述: 在不考虑系统负载.CPU.内存等情况下,netstat监控大量ESTABLISHED连接与Time_Wait连接. # netstat -n | awk '/^tcp/ {++y[$NF] ...

  6. powershell 监控, 重启网卡

    #powershell 监控, 重启网卡 一台Windows服务器,由于负荷较大,偶尔会网络中断,就写了个powershell脚本,监控ip是否通,不通就重启网卡 cls $host.UI.RawUI ...

  7. 服务器性能调优(netstat监控大量ESTABLISHED连接与Time_Wait连接问题)

    netstat监控大量ESTABLISHED连接与Time_Wait连接问题 问题描述: 在不考虑系统负载.CPU.内存等情况下,netstat监控大量ESTABLISHED连接与Time_Wait连 ...

  8. [转帖]Linux监测某一时刻对外的IP连接情况

    Linux监测某一时刻对外的IP连接情况 https://blog.csdn.net/twt326/article/details/81454171 公司机器有病毒 需要分析一下. 之前有需要,在CS ...

  9. SQL SERVER 监控数据文件增长情况

    在项目前期评估数据库的增长情况,然后根据数据库数据量的增长情况来规划存储的分配其实是一件比较麻烦的事情.因为项目没有上线,用什么来评估数据库的数据增长情况呢? 如果手头没有实际的数据,我们只能从表的数 ...

随机推荐

  1. (系统架构)标准Web系统的架构分层

    标准Web系统的架构分层 1.架构体系分层图 在上图中我们描述了Web系统架构中的组成部分.并且给出了每一层常用的技术组件/服务实现.需要注意以下几点: 系统架构是灵活的,根据需求的不同,不一定每一层 ...

  2. Bootstrap-Select 动态加载数据的小记

    关于前端框架系列的可以参考我我刚学Bootstrap时候写的LoT.UI http://www.cnblogs.com/dunitian/p/4822808.html#lotui bootstrap- ...

  3. ASP.NET Core中如影随形的”依赖注入”[下]: 历数依赖注入的N种玩法

    在对ASP.NET Core管道中关于依赖注入的两个核心对象(ServiceCollection和ServiceProvider)有了足够的认识之后,我们将关注的目光转移到编程层面.在ASP.NET ...

  4. 快递Api接口 & 微信公众号开发流程

    之前的文章,已经分析过快递Api接口可能被使用的需求及场景:今天呢,简单给大家介绍一下微信公众号中怎么来使用快递Api接口,来完成我们的需求和业务场景. 开发语言:Nodejs,其中用到了Neo4j图 ...

  5. 基于改进人工蜂群算法的K均值聚类算法(附MATLAB版源代码)

    其实一直以来也没有准备在园子里发这样的文章,相对来说,算法改进放在园子里还是会稍稍显得格格不入.但是最近邮箱收到的几封邮件让我觉得有必要通过我的博客把过去做过的东西分享出去更给更多需要的人.从论文刊登 ...

  6. spring boot 部署为jar

    前言 一直在ide中敲代码,使用命令行mvn spring-boot:run或者gradlew bootRun来运行spring boot项目.想来放到prod上面也应该很简单.然而今天试了下,各种问 ...

  7. python 数据类型 ---文件一

    1.文件的操作流程: 打开(open), 操作(read,write), 关闭(close) 下面分别用三种方式打开文件,r,w,a 模式 . "a"模式将不会覆盖原来的文件内容, ...

  8. Python学习基础

    1.使用范围: 大数据 .图像处理.web .运维.爬虫.自动化.科学计算 2.准备环境: linux/mac python 3.5.2 ipython vim/sublime/atom 3.列表 3 ...

  9. 我的MYSQL学习心得(十三) 权限管理

    我的MYSQL学习心得(十三) 权限管理 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) ...

  10. opengl 笔记(2)

    /*- * Opengl Demo Test * * Fredric : 2016-7-10 */ #include <GLUT/GLUT.h> #include <stdlib.h ...