如何使用PowerShell远程确定存储类型(SAN / NAS /本地磁盘)?

时间:2013-01-25 10:02:40

标签: powershell storage nas san

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

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

我在想一个剧本,我能想到的最好的东西会做如下的事情:

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

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

非常感谢

2 个答案:

答案 0 :(得分:2)

我发现了一篇关于在PowerShell中访问VDS服务的文章。 Getting More Information About You Cluster LUN’s

按一下代码来获取类型。即使在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) )"
        }

    }
}

答案 1 :(得分: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 }