powershell - 如何将 Get-ADComputer 中的错误附加到表中?
问题描述
我正在尝试使用 Get-ADComputer 从域中查询多台计算机。我想将我查询的电脑名称附加到数组中,其中包含“错误”一词或无意义的日期,甚至是该位置的空白值。
Import-Module ActiveDirectory
$PCNames = "laptop-namea", "laptop-nameb", "laptop-badname"
$Output = @()
$Output = foreach ($PC in $PCNames) {
try {
Get-ADComputer -Identity $PC -Properties * |
Select-Object Name, LastLogonDate
} catch {
$Output += ($PC)
}
}
电流输出:
姓名 LastLogonDate ---- ------------- 笔记本电脑名称A 1/27/2019 10:37:13 AM 笔记本电脑-NAMEB 1/22/2019 8:23:02 AM
想要/预期的输出:
姓名 LastLogonDate ---- ------------- 笔记本电脑名称A 1/27/2019 10:37:13 AM 笔记本电脑-NAMEB 1/22/2019 8:23:02 AM 笔记本电脑坏名
解决方案
使用-Filter
而不是-Identity
避免在名称无效的情况下引发错误。
$Output = foreach ($PC in $PCNames) {
New-Object -Type PSObject -Property @{
'Name' = $PC
'LastLogon' = Get-ADComputer -Filter "Name -eq '$PC'" -Property LastLogonDate |
Select-Object -Expand LastLogonDate
}
}
请注意,查询每台计算机的 AD 非常耗时。如果查询数量超过某个点,最好查询所有计算机,将它们放入适当的数据结构(通常是哈希表)中,然后在该数据结构中查找所需的信息。
$computers = @{}
Get-ADComputer -Filter '*' -Property LastLogonDate | ForEach-Object {
$computers[$_.Name] = $_.LastLogonDate
}
$Output = foreach ($PC in $PCNames) {
New-Object -Type PSObject -Property @{
'Name' = $PC
'LastLogon' = $computers[$PC].LastLogonDate
}
}
推荐阅读
- cypress - Cypress.io - 从 wrap 输入时超时
- python-3.x - Python3 Sqlite3 - 检查名称是否指注册的 sqlite3 类型
- python - 列表脚本的困难
- node.js - 如何在 node.js (openweathermap.api) 中呈现 html 格式
- typescript - 有意`export {}` 关闭 TypeScript 模块声明中所有符号的自动导出?
- java - Vaadin 8 alpha/beta 预发布失败,出现“不可解析的导入 POM:找不到”错误
- ios - (Swift) UIImageView 不显示/不可见
- python - Django - 是否可以在 Count() 中执行查询集
- sql - SQL Server:按周分组格式 W 22/09 - 28/09
- javascript - 注入网站的无限循环冻结 javascript 加载