Использование ContainsValue
использует линейный поиск по хеш-таблице, поэтому вы теряете преимущество поиска O (1), который обычно предлагает хеш-таблица.Вы можете попробовать создать другую хеш-таблицу, в которой вместо этого используется общее имя.Тогда вы будете использовать ContainsKey
или просто попытаетесь получить доступ по имени и посмотрите, не будет ли результат $ null.
Кстати, одна из причин разницы заключается в том, что при передаче $group
в ContainsValue
PowerShellничего не делает в отношении приведения типов, поскольку этот параметр метода имеет тип object
.Однако, когда он выполняет $val -eq $group
, PowerShell потенциально проделает большую работу, чтобы привести тип $group
к $val
.Теперь, хотя может показаться, что $group
уже является строкой, здесь есть некоторые ошибки переноса psobject, которые могут появиться здесь (только предположение).Что произойдет, если вы попробуете $groups.ContainsValue('IT-Avd')
?
Вы также можете проверить тип, хранящийся в хеш-таблице, например:
$groups.Values | Get-Member