鲍威rShell can be a daunting tool to master for Windows admins used to working with the GUI. But as I discussed in our hands-on PowerShell intros for在Windows Serverand交换admins, adding even a little PowerShell into your daily mix can save a ton of effort.
在这里,我要集中精力一些PowerShell的基本面作为一门语言,以帮助你把你的PowerShell技能到一个新的水平。我将不包括技术特定的主题,例如如何管理Active Directory,Exchange或IIS,我也不会涉及具体的PowerShell命令。相反,我会钻到语言的语义,说明你今天可以把你的脚本中的一些关键技术。请跟随,让我们使你的PowerShell脚本,他们可以做到最好。
泼溅
PowerShell代码是使用诸如小命令或功能的命令执行。为了提高他们的再利用价值,命令通常使用的参数。而不是要求你overspecify像一个自定义函数GET-ContentFromFileXYZ.TXT
andGET-ContentFromFileABC.TXT
,PowerShell中提供了一个路径参数的获取内容
小命令。参数,如路径,通常是传递给函数和cmdlet有一个破折号,后面跟着参数名称,空间和参数变量或值:
获取内容–Path C:\FileABC.txt
But cmdlets and functions like获取内容
often support several parameters, and before long, you may be typing commands like this:
获取内容-Path C:\MyText.txt -ReadCount 1 -TotalCount 3 -Force -Delimiter "," -Filter '*' -Include * -Exclude 'a'
Here, eight parameters are being passed to获取内容
,而且它显然越来越难读,到了那里混乱可以雪亮从你传递的参数的值的参数出现的点。使用多个参数的任何时间,这是明智的选择将参数传递到命令与泼洒的滑稽名字的另一种方法。
泼溅,在PowerShell中第2版推出,允许你定义在一个更容易阅读的格式,所有参数前面的。
让我们那么久,参数复杂的设置,看看他们都可以传递到获取内容
采用泼溅。
$ getContentParameters = @ {
'Path' = 'C:\MyText.txt'
'ReadCount'= 1
'TOTALCOUNT'= 3
“力” = $真
'分隔符'= ''
'过滤器'= '*'
'包含'= '*'
'Exclude' = 'a'
}
获取内容@getContentParameters
Though I was forced to use more lines it's plain to see this method is much more readable than jamming them all on a single line. I also chose to line up the“=”
通过使用标签语句都一字排开参数参数。
该$getContentParameters
在第一行中定义的变量是一个哈希表。您可以通过在看到这@{}
。在内部,每个键表示参数,并且每个值表示参数变量或值。一个项目要注意在这个例子中是力
参数。你会注意到,当力
在一行中使用它在技术上并不等于什么。这是因为它是一个类型的开关。开关参数没有值,并且简单地用作一个标记。由于哈希表需要为每个键的值,你必须使用等于布尔任何开关参数$true
值。
Once you've defined the hashtable you then pass the entire variable to the command using the ampersand to represent a splatting variable.获取内容
然后将处理的命令完全一样,如果你想通过他们与破折号的传统方式。
这是一个非常干净的方式传递参数给命令,我鼓励使用时多个参数都在发挥作用。
计算特性。
对使用PowerShell中的最大的优点就是一切都是对象。对象有属性,但有时你可能不希望得到的只是一个对象上的默认属性名称。也许你想添加另一个属性,添加文本到现有的字符串属性,或者在整数属性进行运算。你可以说属性发送给一个变量,使你必要的修改,但是这需要另一条线,并根据不同的复杂性,可以成为不可读真正的快。
例如,假设我想测试计算机的网络连接,并得到一些公共属性。要做到这一点,我将使用测试的NetConnection
小命令。
测试连接-ComputerName本地主机-Count 1 |
选择-对象IPv4Address,RESPONSETIME,传输TimeToLive
This is great, but maybe I want to put this into a CSV report. As part of the CSV report, I'm reading server names from a text file. I'd like to include the server name as well as the properties I've shown above. I start out by reading the text file, but I don't have the server names that were in the text file.
我需要另一个属性添加到这个与服务器名称的IP相关。这对于计算性能的工作。因为这需要额外的代码,我现在将进入一个脚本,而不是直接从控制台告诉你的例子。
该output will now include our new custom property calledServerName
。
我不得不改变代码颇有几分所以让我打破它。首先,我注意到如何移动的原始特性传递给选择-对象
(IPV4Address,RESPONSETIME,传输TimeToLive
) above, then passed$ selectProperties
至选择-对象
那样。这是简单地减少线路的长度。它的行为完全一样,如果我只是通过他们直接向选择-对象
正如我在控制台没有以前。
哪些功能没有变化是增加的另一个属性$ selectProperties
至pass to选择-对象
。请注意,这不是其他人一样的字符串,但里面两个元素的哈希表:名称
andExpression
。这就是所谓的计算性能。这是怎么使用选择-对象
你基本上可以动态创建属性。你想添加的每个属性必须是与哈希表名称
和Expression
作为键名称。该名称
key's value is the name you'd like to call the object property. TheExpression
key's value always has to be a script block. Notice$ SERVERNAME
括在大括号内。这是怎么$ SERVERNAME
因为每个服务器在文本文件中测试的可扩展到实际的服务器名称。
这可以用来不仅要创造新的特性,但也可以修改现有的属性。也许我想追加一个ms
标签所有传输TimeToLive
属性,以表示数为以毫秒为单位。除了指定的名称传输TimeToLive
property I would instead create a hashtable and concatenate theforeach
管道值传输TimeToLive
表示为$_.TimeToLive
同ms
创建一个字符串。
使用与计算性能选择-对象
很方便,但要注意:它们都配有性能损失。我不建议使用,如果你与大型数据集计算的性能,因为它可以在你的脚本大大减慢。但如果你有非常小的数据集,100个或更少的元件的性能影响将是最小的。
自定义对象的创建
Objects abound in PowerShell, and it only makes sense for us to be able to create our own objects from scratch. Fortunately, PowerShell provides us with a few different ways to do that. In this tip, I'll cover three methods to create custom objects.
In PowerShell, an object is of a specific type. When creating custom objects, the most common type of object type isSystem.Management.Automation.PSCustomObject
。这是怎样的对象,我们将在本文中创建。此外,对象具有各种类型中的一种或多种性能。在这篇文章中,我们将重点放在NoteProperty
类型。
One of the oldest ways to create a custom object that works on all versions of PowerShell is via theNew-Object
小命令。To create a blank custom object of typeSystem.Management.Automation.PSCustomObject
同no properties usingNew-Object
you'd simply callNew-Object
and specify the类型名
parameter ofPSObject
。
$对象=新物体-TypeName PSObject
这并不是我们有什么好处,但是,因为它不包含任何属性。要添加的属性,我们可以使用加入会员
小命令。This cmdlet essentially binds a new member (or property) to an existing object similar to the one we created.
$object | Add-Member –MemberType NoteProperty –Name MyProperty –Value SomeValue
你可以看到,加入会员
has aMemberType
参数。正如我前面提到的,创建自己的对象时,你通常会使用NoteProperty
type here. At this point, you simply need to specify the name of the property and the value that the property will hold.
从这里,你可以重复,只要你愿意使用添加尽可能多的性能加入会员
。
Next, rather than using加入会员
您可以指定所有的属性了在哈希表前,这些属性传递给New-Object
。
$属性= @ { 'MyProperty1'= '值1';'MyProperty2'= '值2'}
$对象=新物体-TypeName PSObject,物业$性能
最后,PowerShell的V3的,我们可以使用[pscustomobject]
式加速器。偶尔,PowerShell团队将会创造什么叫类型的加速器。这些都是方便的快捷方式创建特定类型的对象。由于创建自定义类型在PowerShell中很常见,他们决定建立一个用于创建它们。如今,这是创建自定义对象的最常见的方式。
要创建一个自定义对象[pscustomobject]
式加速器您首先需要创建一个属性名称作为键名称和它们的值作为哈希表值的哈希表。我们重新使用我们之前创建的哈希表。
$属性= @ { 'MyProperty1'= '值1';'MyProperty2'= '值2'}
现在,而不是使用New-Object
cmdlet并简单地通过“声明”散列表作为自定义对象类型指定我们可以简单地投直接散列表的自定义对象的类型和属性。
[pscustomobject]$properties
你会看到它的创建自定义对象更快的方法。使用PowerShell v3的或更高版本的工作时,我推荐这种方法。这是,到目前为止,最容易记住,是最可读的。
In this tips and tricks article, we were able to cover a few language-specific concepts in PowerShell. Replicate what I've done, tinker around, use the获得会员
cmdlet进一步探索定制对象。鲍威rShell has so much more to offer from a language perspective. If you're new to PowerShell I recommend checking out the book "PowerShell的在午餐一个月”这解决了我们在这里讨论的主题,而是涵盖很多的PowerShell的更多,并采取了全面的方法来学习语言。
相关文章
- PowerShell的强大:适用于Windows Server管理员的前奏
- 该power of PowerShell: An intro for Exchange admins
- 快速指南:如何移动到Office 365
- 在Windows Server 8:InfoWorld的专项报告
- 所有你需要知道的关于Windows 10
- 我们所知道的有关Exchange Server 2016
- PowerShell的4.0:10个最好的新命令
- 该DevOps的数字聚光灯
- 首先看看:运行码头工人在Windows Server 2016
- 首先看看:WINDOWS 2016那张云饮食
- 5个Office 365的管理设置,你必须得到正确的
- 10第三方工具,以满足您的Office 365的需求
- 15 open source CodePlex gems for Microsoft admins
- 15个必需的开源工具的Windows管理员
This story, "The power of PowerShell: Essential tips Windows admins will love" was originally published byInfoWorld的 。