【发布时间】:2014-09-29 15:34:21
【问题描述】:
在编程逻辑方面,我是一个完全的菜鸟,我们将不胜感激。我的问题涉及 Try Block 中的 Get-WmiObject win32_bios 和 Get-WmiObject win32_computersystem commandlet。如果他们在没有另一个但不在一起的情况下,两者都按预期工作。它会生成一个包含域中所有计算机的电子邮件报告,如下所示:
服务器名称 BIOS 版本 序列号
exserver DELL - 1 Phoenix ROM BIOS PLUS 版本 1.10 2.7.0 3ZTVDC1
我想添加型号,但该属性不在 win32_bios 中(至少我知道)。所以,我打算从 win32_computersystem 中获取它。就像我说的,他们都工作,只是不在一起。它总是只运行第一个命令行开关,然后转到列表中的下一台计算机。
Import-Module ActiveDirectory
function getthebios {
$badcomp = @()
$CompList = Get-ADComputer -Filter 'name -like "*"' | select -ExpandProperty Name
foreach ($c in $CompList) {
Try {
Get-WmiObject win32_bios -ComputerName $c |
Select-Object @{l='ServerName';e= {$_.__SERVER} },
@{l='BIOS version';e = {$_.BIOSVersion} },
@{l='Serial Number';e = {$_.SerialNumber} }
Get-WmiObject win32_computersystem -ComputerName $c |
Select-Object @{l='Model Number';e = {$_.Model} }
}
Catch {
$badcomp += $c
}
}
"the following servers could not be reached:"
$badcomp
}
Send-MailMessage -To person@example.com -From "person@example.com" -SmtpServer
server.domain.net -Subject "BIOS Version Report" -body (getthebios | Sort-Object 'BIOS version'
| convertTo-Html | out-string ) -BodyAsHtml
【问题讨论】:
-
请花时间最小化您的代码。目前有很多不必要的行,例如
Get-ADComputer和Send-MailMessage。让这个在我们的机器上重现,然后我们可以提供帮助。
标签: powershell