PowerShell的力量:Windows管理员会喜欢的基本提示

通过掌握PowerShell语言的细微差别,充分利用微软的命令行

通过Pixabay RyanMcGuire

对于习惯于使用GUI的Windows管理员来说,掌握PowerShell可能是一个令人生畏的工具。但正如我在PowerShell入门中讨论的Windows服务器交换管理员,添加一点PowerShell到您的日常组合可以节省大量的努力。

在这里,我将专注于PowerShell作为一种语言的一些基本原理,以帮助您将您的权力技能提升到一个新的水平。我不会涵盖如何管理如何管理Active Directory,Exchange或IIS的技术特定主题,也不会涵盖特定的PowerShell cmdlet。相反,我将钻取语言的语义,以显示您今天可以进入脚本的一些关键技术。跟随并让我们让你的PowerShell脚本最好。

抛雪球算法

PowerShell代码使用cmdlet或函数等命令执行。为了增加重用值,命令通常使用参数。而不是要求你过度指定自定义函数Get-ContentFromFileXYZ.TXTGet-ContentFromFileABC.TXT, PowerShell在其上提供了Path参数获得内容cmdlet。相同的参数,如路径,通常传递给具有短划线的函数和cmdlet,后跟参数名称,空格和参数参数或值:

获取内容路径C: \ FileABC.txt

但是cmdlet和函数像获得内容通常支持几个参数,不久,你可能会输入这样的命令:

Get-Content -Path C:\MyText.txt -ReadCount 1 -TotalCount 3 -Force -Delimiter "," -Filter '*' -Include * -Exclude 'a'

这里,将传递8个参数获得内容,它显然难以读取,到了在从您传递参数中的值中辨别参数时可能出现混淆的程度。任何时候使用多个参数,都可以选择将参数传递给命令的另一个方法,以具有搞笑分裂的命令。

在PowerShell版本2中引入的分组允许您以更容易读取的格式定义所有参数。

让我们使用这一长而复杂的参数集,并看看如何传递它们获得内容使用拆分。

$ getContentParameters = @ {
“路径”=“C: \ MyText.txt”
“ReadCount”= 1
'totalcount'= 3
“力”=真正的美元
'delimiter' =','
“过滤器”= ' * '
“包括”= ' * '
“排除”=“a”

获取内容@getContentParameters

虽然我被迫使用更多的行,但很明显,这种方法比将它们全部阻塞在一行上更具可读性。我还选择了排队“=”语句,使用制表符将所有形参参数对齐。

getContentParameters美元第一行中定义的变量是一个散列表。你可以看到这个@ {}.在内部,每个键表示参数,每个值表示参数实参或值。在这个示例中需要注意的一项是力量参数。你会注意到当力量在一行上使用它在技术上没有等于任何东西。这是因为它是一种开关。交换机参数没有值,简单地用作标志。由于Hashtables需要每个密钥的值,因此必须使使用等于布尔的任何交换机参数真正的美元价值。

定义了哈希表之后,使用&号将整个变量传递给命令,以表示一个splting变量。获得内容然后将完全处理命令,就好像您将传统方式与短划线传递给它们一样。

这是一种将参数传递给命令的更清晰的方法,并且我鼓励在播放多个参数时使用。

计算属性

使用PowerShell的最大优点之一是所有东西都是对象。对象具有属性,但有时您可能不希望只获得对象的默认属性名。也许您想要添加另一个属性,向现有的字符串属性添加文本,或者对整数属性执行算术操作。您可以将该属性发送到一个变量并进行必要的更改,但这需要另一行,并且根据复杂性,可能很快变得不可读。

例如,假设我想测试计算机的网络连接并获得一些常见的属性。为此,我会使用Test-NetConnectioncmdlet。

Test-Connection -ComputerName localhost -Count 1 |
ResponseTime Select-Object IPv4Address, TimeToLive

Test-Connection -ComputerName localhost -Count 1 |Select-object IPv4Address,OrkeTeTime,Timetoliv

这很好,但也许我想把它放到CSV报告中。作为CSV报告的一部分,我从文本文件中读取服务器名称。我想包括服务器名和上面显示的属性。我从读取文本文件开始,但是我没有文本文件中的服务器名称。

CSV报告

我需要添加另一个属性来将IP与服务器名关联起来。这是计算属性的工作。由于这需要额外的代码,我现在将转移到脚本中,而不是直接从控制台向您展示示例。

添加servername.

现在输出将包括新的自定义属性,称为ServerName

ServerName输出

我不得不对代码做了一些修改,所以允许我将其分解。首先,请注意我是如何移动被传递到的原始属性的选择对象IPv4Address,Orkeetime,Timetolive)上面,然后通过了$ selectproperties.选择对象那样。这只是为了减少线的长度。它的行为与我只是直接传递给他们选择对象就像我之前在控制台做的那样。

什么功能做了改变是在中添加另一个属性$ selectproperties.要传递给选择对象.请注意,它不是像其他人那样的字符串,而是一个有两个元素的哈希特:的名字表达.这被称为计算属性。这就是如何使用选择对象您可以在速度上基本上创建属性。您想要添加的每个属性都必须占据哈希特的名字表达关键的名字。的的名字Key的值是要调用对象属性的名称。的表达Key的值必须是一个脚本块。请注意$ servername.封闭在卷曲的括号中。这是如何$ servername.可以在文本文件中测试每个服务器时,可以扩展到实际服务器名称。

这不仅可以使用它来创建新属性,但也可以修改现有属性。也许我想附加一个女士标签到所有TimeToLive属性以毫秒表示数字。的名称,而不是指定TimeToLive属性,我将创建一个哈希表并连接foreach管道的价值TimeToLive代表$ _。TimeToLive女士创建一个字符串。

TimeToLive脚本
TimeToLive输出

使用计算的属性选择对象非常方便,但要注意:它们会影响性能。如果您正在处理大数据集,我不推荐使用计算属性,因为它会大大降低您的脚本速度。但是,如果您的数据集非常小,只有100个或更少的元素,那么性能受到的影响将是最小的。

自定义对象创建

PowerShell中有大量的对象,只有能够从头创建自己的对象才有意义。幸运的是,PowerShell为我们提供了几种不同的方法。在本技巧中,我将介绍三种创建自定义对象的方法。

在PowerShell中,对象具有特定的类型。在创建自定义对象时,最常见的对象类型是system.management.automation.pscustomobject.pscustomobject.pl.这就是我们将在本文中创建的对象类型。此外,对象还有一个或多个不同类型的属性。在本文中,我们将重点关注NoteProperty类型。

创建适用于所有PowerShell版本的自定义对象的最古老的方法之一是通过新对象cmdlet。创建类型为空的自定义对象system.management.automation.pscustomobject.pscustomobject.pl没有属性使用新对象你会简单的调用新对象并指定TypeName参数的PSObject

$object = New-Object -TypeName PSObject

$object = New-Object -TypeName PSObject

然而,这对我们没有任何好处,因为它不包含任何属性。要添加属性,可以使用添加成员cmdlet。这个cmdlet实质上是将一个新成员(或属性)绑定到一个与我们创建的对象类似的现有对象。

$object | Add-Member -MemberType NoteProperty -Name MyProperty -Value somvalue . $object | Add-Member -MemberType

$object | Add-Member -MemberType NoteProperty -Name MyProperty -Value somvalue . $object | Add-Member -MemberType

大家可以看到添加成员有一个MemberType参数。正如我之前提到的,在创建自己的对象时,您通常会使用NoteProperty类型。此时,您只需要指定属性的名称和属性将包含的值。

从这里,您可以重复添加尽可能多的属性添加成员

接下来,而不是使用添加成员您可以在Hashtable中指定所有属性并将这些属性传递给新对象

$properties = @{'MyProperty1' = 'Value1';'MyProperty2' = 'Value2'}
$object = New-Object -TypeName PSObject -Property

$object = New-Object -TypeName PSObject -Property

最后,从PowerShell v3开始,我们可以使用(pscustomobject)类型加速器。偶尔,PowerShell团队将创建所谓的类型加速器。这些是创建特定类型对象的方便快捷方式。由于创建自定义类型在PowerShell中如此常见,因此他们决定创建一个用于创建它们。如今,这是创建自定义对象的最常用方式。

使用的创建自定义对象(pscustomobject)键入加速器,首先需要创建一个散列表,属性名作为键名,属性值作为散列表值。让我们重用前面创建的散列表。

$properties = @{'MyProperty1' = 'Value1';'MyProperty2' = 'Value2'}

现在,而不是使用新对象Cmdlet并指定类型和属性,我们只需将哈希表“声明”为自定义对象类型,就可以将该哈希表直接转换为自定义对象。

美元[pscustomobject]属性

美元[pscustomobject]属性

你会发现这是一种更快的创建自定义对象的方法。我建议在使用PowerShell v3或更高版本时使用这种方法。到目前为止,它是最容易记住的,也是最易读的。

在这篇技巧和技巧的文章中,我们介绍了PowerShell中一些特定于语言的概念。复制我做过的,修补一下,用获取成员cmdlet进一步探索自定义对象。Powershell从语言角度提供了更多的信息。如果你是Powershell的新手,我建议签出这本书“PowerShell在一个月的午餐。“它解决了我们在这里讨论的主题,但涵盖了更多的PowerShell,并采取了一种学习语言的完全圆润的方法。

相关文章

这个故事,“PowerShell的力量:Windows管理员会喜欢的基本技巧”最初是由infoworld.

加入网络世界社区有个足球雷竞技app脸谱网LinkedIn对自己最关心的话题发表评论。
有关的:

版权所有©2015.Raybet2

工资调查:结果在