6

我必须收集我们环境中每个服务器的附加存储类型:数百个 W2K3/W2K8 服务器。

脚本对于确定附加存储是否是这些存储SAN / SAN mirrored / NAS / local或这些存储的组合非常有用。问题是我还没有真正找到任何好的解决方案。

我正在考虑一个脚本,我能想到的最好的方法是执行以下操作:

  • 如果服务器使用SAN,则始终安装 Veritas Storage Foundation,因此我会使用 gwmi win32_product 进行搜索。这真的很慢,如果存储是 SAN 或 SAN 镜像,这不会提供信息。
  • 如果附加的存储是NAS,则必须有一个 ISCSI 目标 ip,我会以某种方式搜索它。

我真的不认为这些方法是可以接受的。你能帮我找到一种更好的方法来以某种方式确定附加的存储类型吗?

非常感谢

4

2 回答 2

2

我找到了一篇关于在powershell中访问VDS服务的文章。获取有关集群 LUN 的更多信息

稍微按摩一下代码以获取类型。甚至在 2003 年也有效。

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.Storage.Vds") | Out-Null
$oVdsServiceLoader = New-Object Microsoft.Storage.Vds.ServiceLoader
$oVdsService = $oVdsServiceLoader.LoadService($null) 
$oVdsService.WaitForServiceReady() 
$oVdsService.Reenumerate() 
$cDisks = ($oVdsService.Providers |% {$_.Packs}) |% {$_.Disks}
$cPacks = $oVdsService.Providers |% {$_.Packs}

foreach($oPack in $cPacks)
{
    If($oPack.Status -eq "Online")
    {
        foreach($oDisk in $oPack.Disks)
        {
            Write-Host "$($oDisk.FriendlyName) ( $($oDisk.BusType) )"
        }


        foreach($oVolume in $oPack.Volumes)
        {
            Write-Host "`t$($oVolume.AccessPaths) ( $($oVolume.Label) )"
        }

    }
}
于 2013-09-12T19:18:25.313 回答
1

您可能会在以下 WMI 类之一中找到信息:

Win32_LogicalDisk http://msdn.microsoft.com/en-us/library/windows/desktop/aa394173(v=vs.85).aspx

Win32_Volume http://msdn.microsoft.com/en-us/library/windows/desktop/aa394515(v=vs.85).aspx

Win32_DiskDrive http://msdn.microsoft.com/en-us/library/windows/desktop/aa394132(v=vs.85).aspx

然后...做类似的事情:

Get-AdComputer Server* | Foreach-Object { Get-WmiObject -Class Win32_DiskDrive -ComputerName $_.Name }
于 2013-03-04T07:16:19.763 回答