powershell - 如何将 Powershell CanonicalName 格式化为单独的列?
问题描述
我试图将下面的结果分开,以便可以将名为 CanonicalName 的一列分成:CanonicalName, ComputerName, DateEncrypted
代码:
$includeOUs = @(
'Laptops'
'Laptop'
'Remote Offices'
) | ForEach-Object {
If ($ou = Get-ADOrganizationalUnit -Filter "name -eq '$($_)'" -Properties canonicalName) {
$ou
}
Else {
Throw "OU '$($_)' not found!"
}
}
$includeOUs |
Select-Object -ExpandProperty DistinguishedName |
Foreach-Object{
Get-ADObject -ldapfilter "(msFVE-Recoverypassword=*)" -Searchbase $_ -Properties canonicalname,msfve-recoverypassword,msTPM-OwnerInformation |
Select-Object canonicalname,msfve-recoverypassword,msTPM-OwnerInformation
} |
Out-GridView
注意:在不同的地理位置,OU 的名称是相同的。
domain.com/Site1/Laptops
domain.com/Site2/Laptops
domain.com/Site3/Laptops
属性msTPM-OwnerInformation总是为空有什么原因吗?
结果:
解决方案
研究表明,“msTPM-OwnerInformation”和“msTPM-TpmInformationForComputer”属性仅在某些情况下填充,例如强制通过 GPO 时。而且,BitLocker 确实可以在没有它们的情况下启用。澄清 TPM 所有者密码与 BitLocker 恢复密钥或密码不同。
另外:TPM 基础
在研究、实际测试和直接观察之间,我不得不得出结论该列是空的,因为数据可能不存在。
注意:经受@Theos 正确观察
为您最后评论如何拆分 CanonicalName。由于几个原因,这有点难以回答。首先,不清楚您在寻找什么,我们没有示例输出可供参考。其次,我可能想以不同的方式处理整个问题。例如,可能使用更擅长获取子对象的 AD 提供程序。或者,我可能会尝试在计算机对象与其包含的恢复密码之间建立关系,以便正确制作报告。这些只是头脑风暴的建议。
当前代码返回“msFVE-RecoveryInformation”对象,因此您看到的规范名称是准确的。这是因为它是计算机的子对象。而且,这是您的过滤器的结果。只有 objectClass msFVE-RecoveryInformation 会匹配"(msFVE-Recoverypassword=*)"
。分解 canonicalName 的一种非常粗略的方法可能是:
$includeOUs |
ForEach-Object { Get-ADObject -ldapfilter "(msFVE-Recoverypassword=*)" -Searchbase $_ -Properties $ObjProps } |
Select-Object ObjectClass,
@{ Name = 'ComputerPath'; Expression = { $_.CanonicalName.SubString(0, ($_.CanonicalName.LastindexOf('/') -1 ) ) } },
@{ Name = 'RecoveryPasswordName'; Expression = { $_.CanonicalName.Split('/')[-1] } },
msfve-recoverypassword
注意:还有其他一些变化
注意:每台计算机可能有超过 1 个恢复密码。这取决于该机器上有多少 voumes 被加密和/或存储在 AD 中。例如,Exchange 服务器可能在 AD 中存储了数十个恢复密码……我们在这里讨论的表格输出中的数组可能格式不正确。
推荐阅读
- c# - 可以用某个dll执行某段代码吗?
- javascript - Material UI Autocomplete 组件的 getOptionLabel Prop 没有按预期执行,并且选项从下拉列表中消失)
- laravel - 拉拉维尔 | 三字段组合验证
- c# - 以编程方式查找 Cosmos 容器的 Partition Key Path
- c++ - 具有不同函数类型值的 std::map
- vagrant - 替代在 M1 Apple Silicon 上运行 Vagrant 和 VirtualBox
- collision - Unity - 分数保持在 1
- function - 使用带参数的函数,打印并修改以下消息,以便能够将名称 Python 更改为任何其他编程语言
- php - 在 Laravel 中使用 maatwebsite/excel 的未定义方法 'download'.intelephense(1013)
- javascript - 样式输入问题[type='range']