2013-09-25 4 views
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 представляет собой массив значений.

ответ

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 интерпретируют как регулярное выражение, с | что означает or. То, что первая строка делает возвращаемые значения, которые не соответствуютvalue1илиvalue2илиvalue3.

Почему (я думаю) ваша линия не работает, потому что вы используете -notmatch с массивом, а не с строкой. This В статье есть информация об использовании двух.

+0

Так что это означает, что я могу использовать любой разделительный символ вместо |? Ссылка на документацию указывает, что она использует «указанный разделитель». Последнее, чего я не понимаю; Почему [String] :: получает обозначение с двумя двоеточиями? –

+1

@SiemHermans Нет, вы не можете использовать какой-либо разделитель, '' 'специфичен для синтаксиса регулярного выражения, соответствующего любому из них. – zdan

+2

@SiemHermans Вы можете «использовать любой разделительный символ, который вы хотите с помощью этого метода, но тогда' -notmatch' не будет работать, потому что '|' имеет особое значение в синтаксисе regex PowerShell (только '|' означает ** или ** на '-notmatch'). '[String] ::' - это только обозначение, используемое при вызове класса **. NET **. '[Math] :: Pow (2, 2)' вызывает метод 'Pow()' класса 'Math'. – SpellingD

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

код [String] часть означает, что класс .NET.

:: Регистрация часть означает сделать вызов статического метода класса Струнный, то есть вы не должны «новый вверх» объект, прежде чем использовать его.

Метод объединения (и в этом случае)

У кого-то есть объяснение остальной части.

Смежные вопросы