Vssadmin和powershell对象到数组



我一直在考虑从我们的服务器上定期提取一些数据。我做了一些研究,并找出哪个服务器在哪个磁盘上运行VSS,我发现这很有挑战性-或者只是没有找到正确的命令。

我得到的关闭是这样的:vssadmin列表shadowstorage,但它是一个powershell对象,我无法弄清楚。我得到的结果,我需要搜索字符串,如'(D:)',并得到那一行。

我想以数组格式选择驱动器和空间信息,请。

Shadow Copy Storage association
   For volume: (G:)\?Volume{68cefbec-f673-467d-95ac-7e442df77cdb}
   Shadow Copy Storage volume: (G:)\?Volume{68cefbec-f673-467d-95ac-7e442df77cdb}
   Used Shadow Copy Storage space: 2.91 GB (0%)
   Allocated Shadow Copy Storage space: 5.80 GB (0%)
   Maximum Shadow Copy Storage space: 400 GB (19%)

编辑:我想把这些数据拿出来:

Computername: xxxxxxxsvr01 
Drive (where VSS running on the drive): G:
Allocated Shadows Storage space: 5.80GB
Next run date: which I have no clue how to get it yet

都在字符串数组中,所以我可以使用它

如果有人能给这个黑暗的话题带来一些启示,我将不胜感激。

vssadmin是一个命令行工具,而不是PowerShell命令行。它生成字符串输出,因此如果您想将字符串转换为对象,则需要从字符串中解析信息。

$pattern = 'for volume: ((.*?))[sS]*?' +
           'used.*?space: (d+.*?b)[sS]*?' +
           'allocated.*?space: (d.*?b)'
& vssadmin list shadowstorage | Out-String |
  Select-String $pattern -AllMatches |
  Select-Object -Expand Matches |
  ForEach-Object {
    New-Object -Type PSObject -Property @{
      ComputerName   = $env:COMPUTERNAME
      Drive          = $_.Groups[1].Value
      UsedSpace      = $_.Groups[2].Value
      AllocatedSpace = $_.Groups[3].Value
    }
  }

一个更好的方法可能是查询Win32_ShadowStorage WMI类。下一次运行时可以从相应的计划任务中获得。

Get-WmiObject -Class Win32_ShadowStorage |
  Select-Object PSComputername, @{n='Drive';e={([wmi]$_.Volume).DriveLetter}},
                AllocatedSpace, UsedSpace,
                @{n='NextRunTime';e={
                  $volume = ([wmi]$_.Volume).DeviceId -replace '[\?]'
                  (Get-ScheduledTaskInfo "ShadowCopy$volume").NextRunTime
                }}

vssadmin不返回一个PowerShell对象,它只是将文本打印到标准输出。您得到的是一个数组,其中每行文本是一个项目。如果您想逐行处理输出,这很方便。

您需要解析文本以获得所需的值。

的例子:

switch -Regex (vssadmin list shadowstorage | ? { $_ -like '   *' }) {
    'For volume: ((.+))' { "Volume $($Matches[1])" }
    'Shadow Copy Storage volume:' { }
    'Used Shadow Copy Storage space: ([d|.]+) GB' { "Used: $($Matches[1]) GB" }
    'Allocated Shadow Copy Storage space: ([d|.]+) GB' { "Allocated: $($Matches[1]) GB" }
    'Maximum Shadow Copy Storage space: ([d|.]+) GB' { "Maximum: $($Matches[1]) GB" }
    default { "This line is not recognized yet (add a rule): $_" }
}

相关内容

  • 没有找到相关文章

最新更新