powershell - get-adcomputer& win32_logicaldisk属性

时间:2014-03-13 15:15:27

标签: powershell powershell-v2.0

我正在尝试在我们的域中提供列出2003和2008 / r2服务器的服务器列表。除了这些信息,我想提供他们个人C Drive"免费空间的当前状态" &安培; "磁盘的大小"。下面的脚本运行正常并打印出所有正确操作系统的列表 - 但是......

可用空间和大小都是相同的..它给出了第一个服务器驱动器状态并复制它,直到脚本完成。例如脚本打印:

serverName1   Windows server 2003 standard   deviceid=c    freespace=40gb size=12gb
serverName2   Windows server 2008r2 standard   deviceid=c  freespace=40gb size=12gb
....
serverName100 .....                                        freespace=40gb size=12gb



Import-Module activedirectory
$2008LogPath = "e:/2008servers.txt"
$2003LogPath = "e:/2003servers.txt"
$servers = get-adcomputer -Filter 'ObjectClass -eq "Computer"' -properties "OperatingSystem"
foreach ($server in $servers) {
   if($server.OperatingSystem -match "Windows Server 2008") {
   Get-WmiObject win32_logicaldisk | Where-Object {$_.deviceid -match "C"} |
   ft $server.name, $server.operatingsystem, deviceid, freespace, size -AutoSize }#Out-File -Append $2008LogPath }

   elseif($server.operatingsystem -match "Windows Server 2003") {
   Get-WmiObject win32_logicaldisk | Where-Object {$_.deviceid -match "C"} |
   ft $server.name, $server.operatingsystem, deviceid, freespace, size -AutoSize }#Out-File -Append $2003LogPath }
}

1 个答案:

答案 0 :(得分:1)

您需要使用-ComputerName cmdlet的Get-WmiObject参数来从这些远程计算机中检索信息。如果您未指定-ComputerName参数,则需要从本地计算机中检索WMI数据。

要解决此问题,请将foreach循环更改为如下所示:

foreach ($server in $servers) {
   if($server.OperatingSystem -match "Windows Server 2008") {
   Get-WmiObject -ComputerName $Server.Name -Class win32_logicaldisk | Where-Object {$_.deviceid -match "C"} |
   ft $server.name, $server.operatingsystem, deviceid, freespace, size -AutoSize }#Out-File -Append $2008LogPath }

   elseif($server.operatingsystem -match "Windows Server 2003") {
   Get-WmiObject -ComputerName $Server.Name -Class win32_logicaldisk | Where-Object {$_.deviceid -match "C"} |
   ft $server.name, $server.operatingsystem, deviceid, freespace, size -AutoSize }#Out-File -Append $2003LogPath }
}