前面的文章对产品质量函数的基本情况作了介绍。 下面,我们将知道的内容进行整合,借用已经讨论过的三个组成部分:输入、输出和错误处理来看一个例子。 查看该例子之前,我们先对“产品质量”的含义扼要重述一下。这些函数要在实际的生产环境中应用,因此要求较高级别的质量。
它们一般包括下列三项主要的设计准则: 输入—函数如何接收数据错误处理—函数如何应对出错状态输出—函数返回的数据 下面是一个叫做测试主机的范例函数。 笔者常使用这个函数,它在功能和预计输出上都值得信赖。在这个例子中,我们不会逐字逐句地进行,但我还是希望花点时间介绍一下其中的关键部分。 文件材料—在函数的开头,读者会注意到带有<……
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属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 }
}
}
相关推荐
-
管理员常用Windows PowerShell命令Top25
即使Windows PowerShell已经由来已久,但很多管理员并不愿意主动熟悉PowerShell cmdlet命令行。随着微软扩展了PowerShell的功能,管理员应该对其功能及使用烂熟于心……
-
巧用PowerShell参数防止操作失误
使用PowerShell自动化操作可以帮助你节省大量的时间——或产生问题。幸运的是,巧用PowerShell参数可以防止发生更改脚本意外。
-
Windows Server 2012 R2下如何处理磁盘故障
Windows管理员可以通过Event Viewer日志、Server Manager报告、SCOM的警告对话框或者Windows PowerShell查询等确定Windows Server 2012 R2中的磁盘故障。
-
Windows Server 2016软件定义存储:Storage Spaces Direct介绍
微软在Windows Server 2016 Technical Preview 2中引入了Storage Spaces Direct。这个特性将本地存储扩展为高可用(HA)存储系统。