Я только что проверил ваши команды и могу успешно получить группу безопасности приложения с компьютера, на котором настроена ASG. Однако это будет работать только в том случае, если вы поместили виртуальную машину в ASG, ASG предоставляют микросегментацию внутри подсети, поэтому вы можете группировать серверы приложений, базы данных и т. Д. И применять правила NSG к группам, а не к отдельным серверам. .
Если вместо этого вы хотите узнать, в каком NSG находится виртуальная машина, вам нужна другая команда. NSG - это ресурс, который подключается к ВМ или NIC и действует как брандмауэр. Если вы хотите этого, то вам нужно выполнить:
$nsg = $nic | select-object -ExpandProperty NetworkSecurityGroup
Однако, это только приведет к тому, что вы примените NSG к ВМ, вы также можете применить их на уровне ВМ, чтобы вы лучше работали эта команда:
$effectiveRules=Get-AzureRmEffectiveNetworkSecurityGroup -NetworkInterfaceName <nicName> -ResourceGroupName <resourceGroup>
$effectiveRules.NetworSecurityGroup
В этом списке перечислены все NSG, примененные на уровне NIC или подсети.
Нет абсолютно ничего неправильно с этим кодом (если это не сбивает с толку Ваших пользователей), и это не шаблон ни с каким именем, с которым я знаком. CanDoThisAndThat
реализации два интерфейса, таким образом, клиенты могут использовать его в так или иначе.
.NET позволяет интерфейсам быть реализованными этот путь - известный как явная интерфейсная реализация.
Явная интерфейсная реализация полезна когда:
Пример случая 2 от платформы.NET ICollection.SyncLock
. List<T>
реализации ICollection
все же следующий код не скомпилирует, потому что участник намеренно был 'скрыт', поскольку разработчики BCL больше не рекомендуют блокировать наборы таким образом:
List<object> list = new List<object>();
lock (list.SyncRoot) // compiler fails here
{
// ...
}
Любой унаследованный код этого формата будет все еще работать, потому что ссылка имеет тип ICollection
явно:
ICollection list = new List<object>();
lock (list.SyncRoot) // no problem
{
// ...
}
Каждый тип имеет отображение интерфейса (который может быть получен с Типом. GetInterfaceMap, если Вы хотите посмотреть на него с отражением). Это в основном говорит, "Когда метод X в интерфейсе Y вызывается, этот метод Z является тем для вызова". Обратите внимание, что даже при том, что это не поддерживается в C#, это возможно для отображающегося целевого метода иметь другое имя с имени метода интерфейса! (VB явно поддерживает это, я верю.)
В Вашем случае у Вас есть три метода, и каждый из этих трех методов соответствует методу в одном из включенных интерфейсов.
Когда компилятор издает приказ к виртуальному методу через интерфейс, сгенерированный IL говорит что-то как "вызов IFoo. Панель на этом объекте" - и IFoo. Панель затем разрешена с помощью интерфейсной карты.
Вы, возможно, иногда должны использовать его, если у или Вас есть подписи, которые отличаются только в ответ тип, или если Вы реализуете два неоднородных интерфейса, которые, оказывается, имеют те же имена методов, но должны сделать разные вещи. Везде, где можно избежать его, хотя, сделайте! Это делает для очень запутывающего кода.