高级语法

时间:2013-09-25 19:07:30

标签: powershell syntax

我遇到了以下语法行,相当高级(对我来说):

(Get-ADReplicationSubnet -Filter *) -notmatch [String]::Join('|',$c.Subnet)

以上完全符合我的要求,检索与$c.Subnet变量不匹配的子网列表。我尝试用下面的线重新创建相同的效果。这不起作用。

Get-ADReplicationSubnet -Filter * | Where {$_.Name -notmatch $c.Subnet}

我的问题是;有人能用简单的英文解释第一行的工作原理吗? (在[String]::Join('|',$c.Subnet)部分不确定。很难找到你不知道名字的东西。除此之外,为什么我的版本不起作用?

我应该澄清$c.Subnet是一组值。

2 个答案:

答案 0 :(得分:3)

[String]::Join('|',$c.Subnet)调用.NET框架 - Join()类的String方法。您可以查看文档here

文档会对返回值进行以下说明:A string that consists of the elements in value delimited by the separator string. If value is an empty array, the method returns String.Empty.

这意味着您的返回字符串将类似于value1|value2|value3(其中每个value都是$c.Subnet的值),-notmatch将其解释为正则表达式,{{1}意思是|。第一行的返回值是不匹配 or value1 value2

为什么(我认为)你的行不起作用是因为你在value3使用数组而不是字符串。 This文章提供了有关这两者的一些使用信息。

答案 1 :(得分:0)

[String]::Join('|',$c.Subnet)

[String]部分表示.NET类。

:: Join部分意味着调用String类的静态方法,即在使用之前不必“新建”对象。

Join方法接受数组并将其转换为管道描述的字符串(在本例中)

其他人会对其他人有解释。