2014-03-13 25 views
0

我想提供列出2003和2008/r2服务器的域列表。随着这些信息,我想给他们的个人C驱动器“自由空间”&“磁盘的大小”的当前状态。下面的脚本运行良好,并打印出所有正确的操作系统列表 - 但...powershell - get-adcomputer&win32_logicaldisk属性

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

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

你需要使用Get-WmiObject cmdlet的-ComputerName参数,要检索这些远程计算机的信息。如果您未指定-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 } 
} 
+1

感谢您的解决方案,它背后的原因。让我感觉完整的感觉已经让我厌烦了太久! – Richard

+0

不客气,伙计!很高兴它正在努力。 –