使用PowerShell 监控运行时间和连接情况

使用PowerShell 监控运行时间和连接情况

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

概念

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

 

 image

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

 

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

PowerShell脚本的概述

 

首先我们来看一下OpenConnQueryCloseConn.ps1这个脚本。这个脚本一开始先设定连接参数。确保下面的参数是可用的参数。

21-27行就是我们的连接参数和查询命令变量 。

123

图2 主要的参数变量

$serverName="服务器名称"
$databaseName="数据库名称"
$uid="User ID"
$pwd="user Password "
$sqlCommand="命令语句-比如查询一个小表的行数"
$logLoaction="记录日志文件的位置.   ---  c:\ps\OpenConnQueryCloseConn.log"

脚本的底部就是循环的主要部分。

121

图3 循环部分

    fn_HitSQL 函数大部分工作已经完成了。打开数据库连接然后不断去执行查询。有很多地方主要的工作就是日志记录。如下:

321

图4 日志记录部分

    还有一个函数去记录连接和错误。函数fn_WriteToLog 将错误信息附加上日期后记录到终端然后添加到日志文件中。

321

 

    做好了以上所有工作后,执行脚本,当法伤网络连接问题时,就会产生日志文件错误日志。如下:

321

错误日志信息

 

第二个脚(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”

脚本下载地址:

没找到如何上传脚本…,有哪位大神可以告知。具体脚本可向我询问留言即可。发邮箱

谢谢博友提供方式。

下载地址:

https://files.cnblogs.com/files/wenBlog/OpenConnLoopQuery_Long.zip

https://files.cnblogs.com/files/wenBlog/OpenConnQueryCloseConn.zip

总结

    本篇主要介绍了自己开发的一个利用powershell来实现的循环监测连接出现网络异常的脚本。本质上就是循环连接查询数据库,记录连接失败或者查询失败的信息。之前通过C#和其他开发工具也都实现过不论是windowsService 还是其他小程序。但是感觉powershell开发起来更简单,对机器性能影响更小,当然python也是一样的道理。之所以选择使用powershell主要是学习响应的语法便于将来运维windows服务器。越来越发现PowerShell的强大,与高手相比还有很大空间要去学习。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/119619.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Flask表单提交的方法[通俗易懂]

    Flask表单提交的方法[通俗易懂]这里介绍一下Flask表单提交相关的方法,还是以代码实例为主。首先,Flask模板中表单提交代码与我们一般写的H5表单无异,当然,Flask也提供了表单类,Flask-WTF扩展。这里只介绍常规的表单提交方法。首先是模板类:<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"&g…

    2022年9月16日
    3
  • 像素密度(衡量屏幕显示能力)

    像素密度(衡量屏幕显示能力)像素密度=√[(长度像素数)^2+(宽度像素数)^2]/屏幕尺寸eg:

    2022年5月17日
    41
  • 遍历数组的12种方法

    遍历数组的12种方法第一种 普通 for 循环 for vari 0 i lt arr length i 代码 第二种 forEach 循环 arr forEach item index arr gt 代码 forEach 接收一个回调函数作为参数 而这个回调函数有接受三个参数 作为参数 item 是每

    2025年8月18日
    0
  • 机器视觉光源的选择_机器视觉光源选择方法

    机器视觉光源的选择_机器视觉光源选择方法环形光源主要是为机器视觉,工业检测灯方面的LED光源,具有亮度可调,低温,均衡,无闪烁,无阴影,同时在特用的内嵌式的结构,同时可以添加偏光片加上光线的干扰应用实例电路板字符检测包装检测易拉罐罐底检测食

    2022年8月1日
    8
  • windows loader v2.2_Windows Modules Installer

    windows loader v2.2_Windows Modules Installer这是WindowsLoader最新版本,解决了Win7+Win8双系统情况下,Win7“软改”激活的失效异常。目前网上“软改”工具尽管不少但制作精良者不多。特别是制作技术精湛、支持版本众多的更是凤毛麟角。我对激活工具历来要求比较苛刻。今天向大家推荐的这款“软改”工具,支持包括Win7在内的MicrosoftWindows多版本永久激活。值得各位网友收藏使用。可对以下32位/64位…

    2022年10月12日
    4
  • 微信小程序bindtap的作用_小程序分享带参数

    微信小程序bindtap的作用_小程序分享带参数之前一直以为微信小程序按钮点击事件传参是和web端相同,即在事件中写明所传递的参数即可,但是这样尝试过以后发现小程序的控制台报错,报所写的bindtap中参数错误,之后百度发现,小程序按钮点击这类事件时一般的处理方法是指明元素所在的id,bindtap只是写明函数名,例如,bindtap=’setNumber’,而不是bindtap=’setNumber(1)’,在js中只要写function(e

    2022年4月19日
    97

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号