在Windows PowerShell中收集产品质量函数

日期: 2010-11-18 作者:Brandon Shell翻译:Dan 来源:TechTarget中国 英文

前面的文章对产品质量函数的基本情况作了介绍。 下面,我们将知道的内容进行整合,借用已经讨论过的三个组成部分:输入、输出和错误处理来看一个例子。   查看该例子之前,我们先对“产品质量”的含义扼要重述一下。这些函数要在实际的生产环境中应用,因此要求较高级别的质量。

它们一般包括下列三项主要的设计准则: 输入—函数如何接收数据错误处理—函数如何应对出错状态输出—函数返回的数据   下面是一个叫做测试主机的范例函数。 笔者常使用这个函数,它在功能和预计输出上都值得信赖。在这个例子中,我们不会逐字逐句地进行,但我还是希望花点时间介绍一下其中的关键部分。   文件材料—在函数的开头,读者会注意到带有<……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

前面的文章对产品质量函数的基本情况作了介绍。 下面,我们将知道的内容进行整合,借用已经讨论过的三个组成部分:输入、输出和错误处理来看一个例子。

  查看该例子之前,我们先对“产品质量”的含义扼要重述一下。这些函数要在实际的生产环境中应用,因此要求较高级别的质量。它们一般包括下列三项主要的设计准则:

  • 输入—函数如何接收数据
  • 错误处理—函数如何应对出错状态
  • 输出—函数返回的数据

  下面是一个叫做测试主机的范例函数。 笔者常使用这个函数,它在功能和预计输出上都值得信赖。在这个例子中,我们不会逐字逐句地进行,但我还是希望花点时间介绍一下其中的关键部分。

  •   文件材料—在函数的开头,读者会注意到带有< #...# >的部分。这是在线帮助的符号。输入函数借用它可以对函数使用者提供帮助。
  •   参数—参数()语句是我们开始建造参数的位置(输入),这些参数被函数接收。在这个例子中,我们测试了电脑名、TCP端口、超时时间和属性。
  •   脚本流—初始脚本块用来进行脚本设置,过程脚本块用来在项目(目标)通过时对其进行处理。
  •   错误处理—Try/Catch脚本块用于执行代码分支,并在代码失败时提供反馈信息。
  •   输出—如果检测到有目标通过,函数会对其进行测试。测试通过,函数会输出相同的目标。如果没有目标通过,函数会输出与电脑名一样的值。

  下面是一个完整的函数。该函数利用参数的形式进行输入(参数叫做电脑名),但是读者可以指定希望测试的属性。函数确定测试目标后,会进行一次简单的ping测试或创建给定端口的TCP连接。

测试主机函数

{
   <#
      .Synopsis
  运用WMI ping或TCP端口对主机的连通性进行测试

      .Description
  进行进一步操作前,允许对主机的连通性进行测试

      .Parameter Server
  要运行的服务器的名称

      .Parameter TCPPort
  需要连接的TCP端口(默认135)

      .Parameter Timeout
      TCP连接的超时(默认值为1秒)

      .Parameter Property
      含有待测值的属性的名称

      .Example
         cat ServerFile.txt | Test-Host | Invoke-DoSomething
         Description
         -----------
      测试一个主机列表

      .Example
         cat ServerFile.txt | Test-Host -tcp 80 | Invoke-
         DoSomething
         Description
         -----------
      测试一个主机列表的80端口

      .Example
         Get-ADComputer | Test-Host -property dnsHostname | Invoke-DoSomething
         Description
         -----------
       利用dnshostname属性对Get-ADCompute的输出进行测试

      .OUTPUTS
         System.Object
      .INPUTS
         System.String
      .Link
         Test-Port
      NAME: Test-Host
      AUTHOR: YetiCentralbshell
      Website: www.bsonposh.com
      LASTEDIT: 02/04/2009 18:25:15
      #Requires -Version 2.0
   #>
   [CmdletBinding()]
   Param(
 
[Parameter(ValueFromPipelineByPropertyName=$true,ValueFromPipeline=$true,
Mandatory=$True)]
   [string]$ComputerName,
   [Parameter()]
   [int]$TCPPort,
   [Parameter()]
   [int]$timeout=3000,
   [Parameter()]
   [string]$property
)
Begin
{
   function PingServer
   {
      Param($MyHost)
      $ErrorActionPreference = "SilentlyContinue"
      Write-Verbose " [PingServer] :: Pinging [$MyHost]"
      try
      {
         $pingresult = Get-WmiObject win32_pingstatus -f "address='$MyHost'"
         $ResultCode = $pingresult.statuscode
         Write-Verbose " [PingServer] :: Ping returned $ResultCode"
         if($ResultCode -eq 0) {$true} else {$false}
      }
      catch
      {
         Write-Verbose " [PingServer] :: Ping Failed with Error: ${error[0]}"
         $false
      }
   }
}
Process
{
   Write-Verbose " [Test-Host] :: Begin Process"
   if($ComputerName -match "(.*)($)$")
   {
      $ComputerName = $ComputerName -replace "(.*)($)$",'$1'
   }
   Write-Verbose " [Test-Host] :: ComputerName : $ComputerName"
   if($TCPPort)
   {
      Write-Verbose " [Test-Host] :: Timeout : $timeout"
      Write-Verbose " [Test-Host] :: Port : $TCPPort"
      if($property)
      {
         Write-Verbose " [Test-Host] :: Property : $Property"
         $Result = Test-Port $_.$property -tcp $TCPPort -timeout $timeout
         if($Result)
         {
            if($_){ $_ }else{ $ComputerName }
         }
      }

相关推荐