我目前正在尝试编写一个脚本,该脚本获取加入我们域的计算机列表,一次遍历它们以检查它们是否存在于我创建的 Access DB 中,对它们运行 WMI 查询以收集它们的系统信息,并且如果它们还没有在数据库中,则将该数据添加到数据库中。我可以在大多数计算机(大约一半)上成功执行此操作,但其中一些说找不到 RPC 服务器。
我知道其中一些错误是由于计算机处于脱机状态(防火墙已禁用且 WMI 查询已启用)。问题是一些计算机在线,当我Get-WmiObject
在脚本中对它们运行命令时,我得到了 RPC 服务器错误,但是当我在脚本之外单独运行命令时,我能够成功查询信息。我已经发布了导致奇怪行为的函数,并希望有更多编程知识的人能找到我犯的菜鸟错误。
第二个问题是,在第一次迭代之后,我得到下面的错误说空白CompName
字段?前两次迭代按预期工作,然后它只是抛出一堆这些错误,“计算机之后已经存在”。
function Update-Systems {
$PSCredential = Get-Credential
$Comp = (Get-ADComputer -Filter * | select -ExpandProperty Name)
foreach ($Computer in $Comp) {
$RecordSet.MoveFirst()
$RecordSet.Find("CompName = '$Computer'")
$RecordCheck = $RecordSet.Fields.Item("CompName").Value
if (!$RecordCheck) {
"Collecting Data for $Record"
$SystemProp = Get-WmiObject -Class Win32_ComputerSystem -Credential $PSCredential -ComputerName: $Computer -ErrorAction SilentlyContinue
$RecordSet.Addnew()
$RecordSet.Fields.Item("DateRan") = Get-Date
$RecordSet.Fields.Item("Domain") = $SystemProp.Domain
$RecordSet.Fields.Item("CompName") = $SystemProp.Name
$RecordSet.Fields.Item("Model") = $SystemProp.Model
$RecordSet.Fields.Item("Manufacturer") = $SystemProp.Manufacturer
$RecordSet.Update()
} else {
"Computer already exists"
}
}
}