2

我遇到了以下相当先进的语法行(对我来说):

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

以上正是我想要的,检索与$c.Subnet变量不匹配的子网列表。我尝试使用下面的行重新创建相同的效果。这不起作用。

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

我的问题是;有人可以用简单的英语解释第一行是如何工作的吗?(部分不确定[String]::Join('|',$c.Subnet)。很难搜索您不知道名称的东西。除此之外,为什么我的版本不起作用?

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

4

2 回答 2

3

[String]::Join('|',$c.Subnet)是对.NET 框架的调用——类的Join()方法String。您可以在此处查看文档。

该文档导致对返回值的以下解释: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解释为正则表达式,具有|含义or。第一行的作用是返回不匹配 value1 or value2 value3的值。

为什么(我认为)您的行不起作用是因为您使用-notmatch的是数组而不是字符串。本文有一些关于这两者的使用信息。

于 2013-09-25T19:26:41.647 回答
0
[String]::Join('|',$c.Subnet)

[String] 部分表示 .NET 类。

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

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

其余的会有人解释。

于 2013-09-25T19:24:32.400 回答