Powershell фильтрует значение свойства без расширения имени свойства - PullRequest
0 голосов
/ 01 апреля 2020

Можно ли отфильтровать свойство "Роли" без использования -expandproperty Роли? Первый набор операторов показывает мне, что мне нужно, за исключением того, что я не могу фильтровать роли -eq "db_owner" и пользователей -ne "user3"

#import-module dbatools
$servers = server1,server2
Get-DbaDatabase -SqlInstance $servers -Status Normal | Select SQLInstance,  Name, Owner,Roles, Users 

Results:
SqlInstance : server1
Name        : testdb
Owner       : sa
Roles       : {db_accessadmin, db_backupoperator, db_datareader, db_datawriter, db_ddladmin, db_denydatareader, db_denydatawriter, 
              db_owner, db_securityadmin, public}
Users       : {user1,user2,user3}

Если я запускаю другой оператор Get-DbaDatabase -SqlInstance $servers -Status Normal | select -expandproperty Roles| Where Name -eq 'db_owner', свойство для db_owner теперь называется «Name», и он будет возвращать результаты, где «Roles» -eq db_owner.

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

Свойство «Роли» Имя Имя элемента Определение


Свойство Roles Microsoft.SqlServer.Management.Smo.DatabaseRoleCollection Roles {get;}

IsPubli c Имя IsSerial BaseType
-------- --- ----- ---- --------
True False PSCustomObject System.Object

1 Ответ

0 голосов
/ 01 апреля 2020
$servers = server1,server2
Get-DbaDatabase -SqlInstance $servers -Status Normal | Select SQLInstance,  Name, Owner,Roles, Users | Where-Object { (@($_.Roles)) -contains 'db_owner' }

Предполагая, что свойство Roles возвращает базовый тип массива (я не могу проверить, так как у меня нет этого env, доступного в atm), вы можете использовать оператор -contains, чтобы увидеть, содержится ли строковое значение в the array.

Если свойство Roles является типом base-Collection (вы можете проверить это с помощью .GetType ()), вы можете явно преобразовать Collections в Arrays, поместив коллекцию в нотацию массива: ... | Where-Object { (@($_.Roles)) -contains 'db_owner' }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...