1

此函数使用 win32_logicaldisk 类列出服务器详细信息,以提供有关特定服务器的信息。提供一个服务器,该表提供了清晰可读的所有信息,但使用 10 多个服务器会变得有点复杂。功能内部或外部是否有一种方法可以为其拾取的每个服务器提供空间。

Function Get-DiskInfo

    {
    param ($System =".")
    $display = @{label = "Server name" ; Expression={$_.systemname}}, `
    @{label = "Drive" ; Expression={$_.DeviceID}}, `
    @{label = "Volume Name" ; Expression={$_.volumename}}, `
    @{label = "File Sytem" ; Expression={$_.filesystem}}, `
    @{label = "size (GB)" ; Expression={ [Math]::round($_.size / 1gb)}}, `
    @{label = "Free Space (GB)" ; Expression={ [Math]::round($_.freespace / 1gb)}}, `
    @{label = "Free %" ; Expression={ [Math]::round($_.freespace / $_.size * 100)}}
    Get-WmiObject win32_logicaldisk -computername $server | format-table $display -auto
    write-host "testing"
    # THIS FUNCTION DETAILS DISK SPACE AND $% REMAINING FOR A SERVER
}
4

2 回答 2

2

只需添加""到函数的末尾。这将在最后放置一个空行。您甚至可以花哨并做一些类似的事情:

Function Get-DiskInfo
{
    param ($System =".")
    write-host $system "----------------"
    $display = @{label = "Server name" ; Expression={$_.systemname}}, `
    @{label = "Drive" ; Expression={$_.DeviceID}}, `
    @{label = "Volume Name" ; Expression={$_.volumename}}, `
    @{label = "File Sytem" ; Expression={$_.filesystem}}, `
    @{label = "size (GB)" ; Expression={ [Math]::round($_.size / 1gb)}}, `
    @{label = "Free Space (GB)" ; Expression={ [Math]::round($_.freespace / 1gb)}}, `
    @{label = "Free %" ; Expression={ [Math]::round($_.freespace / $_.size * 100)}}
    Get-WmiObject win32_logicaldisk -computername $System | format-table $display -auto
    ""
    # THIS FUNCTION DETAILS DISK SPACE AND $% REMAINING FOR A SERVER
}
Get-DiskInfo localhost
Get-DiskInfo .
Get-DiskInfo 7vm01

这会产生以下结果:

localhost ----------------

Server name Drive Volume Name File Sytem size (GB) Free Space (GB) Free %
----------- ----- ----------- ---------- --------- --------------- ------
7VM01       A:                                   0               0       
7VM01       C:                NTFS              80              29 36    
7VM01       D:                                   0               0       



. ----------------

Server name Drive Volume Name File Sytem size (GB) Free Space (GB) Free %
----------- ----- ----------- ---------- --------- --------------- ------
7VM01       A:                                   0               0       
7VM01       C:                NTFS              80              29 36    
7VM01       D:                                   0               0       



7vm01 ----------------

Server name Drive Volume Name File Sytem size (GB) Free Space (GB) Free %
----------- ----- ----------- ---------- --------- --------------- ------
7VM01       A:                                   0               0       
7VM01       C:                NTFS              80              29 36    
7VM01       D:                                   0               0       

要在机器列表上运行,可以将列表加载到字符串中,然后使用 foreach 遍历字符串。

foreach($server in $serverlist){
    Get-DiskInfo $server
}
于 2013-11-05T12:56:52.517 回答
2

要在函数中处理多个服务器,请执行以下操作:

Function Get-DiskInfo
{
  param ([string[]]$System =@("."))

  foreach ($s in $server) {
    $display = @{label = "Server name" ; Expression={$_.systemname}}, `
    @{label = "Drive" ; Expression={$_.DeviceID}}, `
    @{label = "Volume Name" ; Expression={$_.volumename}}, `
    @{label = "File Sytem" ; Expression={$_.filesystem}}, `
    @{label = "size (GB)" ; Expression={ [Math]::round($_.size / 1gb)}}, `
    @{label = "Free Space (GB)" ; Expression={ [Math]::round($_.freespace / 1gb)}}, `
    @{label = "Free %" ; Expression={ [Math]::round($_.freespace / $_.size * 100)}}
    Get-WmiObject win32_logicaldisk -computername $s | format-table $display -auto
    # THIS FUNCTION DETAILS DISK SPACE AND $% REMAINING FOR A SERVER
  }
}

但是,当您从这样的函数输出格式化文本时,您不能真正使用其中的数据。您可以看到它的格式非常漂亮,但可以通过编程方式使用它——好吧,您又回到了解析文本的过程中。我会这样做:

Function Get-DiskInfo
{
  param ([string[]]$System =@("."))

  foreach ($s in $server) {
    Get-WmiObject win32_logicaldisk -computername $s | Foreach {new-object psobject `
       -property @{ServerName = $_.systemname; `
                   Drive=$_.DeviceID; `
                   VolumeName=$_.volumename; `
                   FileSystem=$_.filesystem; `
                   SizeGB=[Math]::round($_.size / 1gb); `
                   FreeSpaceGB=[Math]::round($_.freespace / 1gb); `
                   FreePercent=[Math]::round($_.freespace / $_.size * 100)} `
    }
    # THIS FUNCTION DETAILS DISK SPACE AND $% REMAINING FOR A SERVER
  }
}

现在您正在输出具有所需数据的对象。您始终可以在函数调用后使用 Format-Table 来格式化字段。或者,如果您想获得真正的冒险,您可以考虑使用 Update-FormatData 让您的自定义对象由 PowerShell 自动格式化。

于 2013-11-05T14:24:23.493 回答