powershell-获取adcomputer&;win32_logicaldisk属性

powershell-获取adcomputer&;win32_logicaldisk属性,powershell,powershell-2.0,Powershell,Powershell 2.0,我试图提供我们域中列出2003和2008/r2服务器的服务器列表。除了这些信息之外,我还想给出他们各自C驱动器的“可用空间”和“磁盘大小”的当前状态。下面的脚本运行良好,并打印出所有正确操作系统的列表-但是 可用空间和大小都是相同的。它给出第一个服务器驱动器状态,并复制该状态,直到脚本完成。例如,脚本打印: serverName1 Windows server 2003 standard deviceid=c freespace=40gb size=12gb serverName2

我试图提供我们域中列出2003和2008/r2服务器的服务器列表。除了这些信息之外,我还想给出他们各自C驱动器的“可用空间”和“磁盘大小”的当前状态。下面的脚本运行良好,并打印出所有正确操作系统的列表-但是

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

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 }
}

您需要使用
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 }
}

感谢您的解决方案和背后的原因。这完全有道理,我已经受了太久的折磨了!