PowerShell:搜索所有属性值

ldxq2e6h  于 2023-01-20  发布在  Shell
关注(0)|答案(2)|浏览(111)

我怎样才能搜索给定字符串的单个对象的所有属性?
假设我有以下命令输出:

get-aduser jtest -properties *

DistinguishedName : CN=jtest,CN=Users,DC=confederationc,DC=on,DC=ca
Enabled           : True
GivenName         : Justus
Name              : jtest
ObjectClass       : user
ObjectGUID        : f4d31d45-0505-433e-9442-152419e75d26
SamAccountName    : jtest
SID               : S-1-5-21-2138664166-620177494-281947949-184391
Surname           : Test
UserPrincipalName : jtest@confederationcollege.ca
...output truncated

如何搜索包含字符串“jtest”的属性?
我觉得我肯定忽略了什么。

pobjuy32

pobjuy321#

总是有findstr(不区分大小写),但结果只是文本,这是一个常见的问题。

get-aduser jtest | findstr /i jtest

Name              : jtest
SamAccountName    : jtest
UserPrincipalName : jtest@confederationcollege.ca

这并不是在所有情况下都有效,但对注册表项有效。这可以匹配大多数属性名称或值。这取决于“$_”转换为字符串的内容。通用pscustomobjects有效。但对get-aduser示例无效(对象转换为可分辨名称字符串)。

get-itemproperty hkcu:\key1 | ? { $_ -match 'foo' } # or 'emspace'

value1       : 17
emspace      : foo bar
refcount     : {255, 255}
PSPath       : Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\key1
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER
PSChildName  : key1
PSDrive      : HKCU
PSProvider   : Microsoft.PowerShell.Core\Registry

get-itemproperty hkcu:\key1 | % { "$_" }  # showing string conversion

@{value1=17; emspace=foo bar; refcount=System.Byte[]; PSPath=Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\key1; PSParentPath=Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER; PSChildName=key1; PSDrive=HKCU; PSProvider=Microsoft.PowerShell.Core\Registry}
rqqzpn5f

rqqzpn5f2#

您可以在PowerShell中的任何对象上使用隐藏的psobject成员集,以编程方式访问其基础属性:

foreach($user in Get-ADUser jtest){
  foreach($property in $user.psobject.Properties){
    if($_.Value -like '*jtest*'){
      "Property '$($_.Name)' has value '$($_.Value)'"
    }
  }
}

相关问题