Powershell 高级语法
我遇到了(对我来说)相当高级的以下语法: 上面的操作正是我想要的,检索与Powershell 高级语法,powershell,syntax,Powershell,Syntax,我遇到了(对我来说)相当高级的以下语法: 上面的操作正是我想要的,检索与$c.Subnet变量不匹配的子网列表。我试着用下面的线条重现同样的效果。这是行不通的 Get-ADReplicationSubnet -Filter * | Where {$_.Name -notmatch $c.Subnet} 我的问题是,;有人能用简单的英语解释第一行是如何工作的吗?(在[String]:Join('|',$c.Subnet)部分不确定。很难搜索您不知道名称的内容。此外,为什么我的版本不起作用 我应该
$c.Subnet
变量不匹配的子网列表。我试着用下面的线条重现同样的效果。这是行不通的
Get-ADReplicationSubnet -Filter * | Where {$_.Name -notmatch $c.Subnet}
我的问题是,;有人能用简单的英语解释第一行是如何工作的吗?(在[String]:Join('|',$c.Subnet)
部分不确定。很难搜索您不知道名称的内容。此外,为什么我的版本不起作用
我应该澄清,$c.Subnet
是一个值数组
[String]::Join('|',$c.Subnet)
[String]部分表示.NET类
::Join部分意味着调用String类的静态方法,也就是说,在使用对象之前不必“新建”对象
Join方法接受和数组,并将其转换为管道所描绘的字符串(在本例中)
其他人将对此进行解释。[String]:Join(“|”,$c.Subnet)
是对.NET framework的调用--String
类的Join()
方法。您可以查看文档
文档对返回值进行了以下解释:一个字符串,由分隔符字符串分隔的值中的元素组成。如果值是空数组,则该方法返回string.empty。
这意味着您的返回字符串类似于value1 | value2 | value3
(其中每个值都是$c.Subnet
中的值),它将-notmatch
解释为正则表达式,其中|表示或。第一行的作用是返回不匹配的值值1
或值2
或值3
为什么(我认为)您的行不起作用是因为您使用了数组而不是字符串的-notmatch
。本文提供了关于这两个字符的一些用法信息。因此从技术上讲,这意味着我可以使用任何分隔符而不是|?文档链接声明它使用了“指定分隔符”.我不明白的最后一件事;[字符串]为什么::获取带有两个冒号的表示法?@SiemHermans不,您不能使用任何分隔符,
是特定于正则表达式的语法,意思是匹配其中任何一个。@SiemHermans您“可以”在该方法中使用您想要的任何定界字符,但是-notmatch
将不起作用,因为
在Powershell正则表达式语法中有特殊含义(仅
表示或to-notmatch
)。[String]:
只是调用.NET类时使用的符号。[Math]::Pow(2,2)
调用Math
类的Pow()
方法。
[String]::Join('|',$c.Subnet)