2016-10-13 10 views
0

나는 우리 서버에서 정기적으로 일부 데이터를 가져올 생각했습니다. 몇 가지 조사를 해본 결과 어떤 서버에서 VSS를 실행하고 있는지 확인하기가 어려웠습니다. 또는 올바른 명령을 찾지 못했습니다.배열에 vssadmin 및 powershell 개체

나는 이걸 닫는다 : vssadmin list shadowstorage하지만 알아 내지 못하는 powershell 객체이다. WI는 '(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 

모두 문자열 배열에 나는 그것으로 재생할 수 있습니다.

누군가가이 어두운 주제에 대해 밝힐 수 있다면 크게 감사하겠습니다.

+0

WMI 개체는 용도에 맞게 사용할 수 있습니까? http://stackoverflow.com/questions/12159341/how-to-get-disk-capacity-and-free-space-of-remote-computer –

+0

안녕하세요, 저는 실제로 VSS에 대한 정보를 제공하지 않는다고 생각하는 쿼리를 편집했습니다. 각 드라이브에? –

답변

0

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): $_" } 
} 
0

vssadmin는 명령 행 도구가 아닌 PowerShell에서의 cmdlet입니다. 문자열 출력을 생성하므로 객체로 변환하려는 경우 문자열의 정보를 구문 분석해야합니다.

$pattern = 'for volume: \((.*?)\)[\s\S]*?' + 
      'used.*?space: (\d+.*?b)[\s\S]*?' + 
      '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 
       }} 
+0

세부 정보를 보내 주셔서 감사합니다. 나는 그것을 곧 확인하고 다시 얻을 것이다. 많은 시간과 의지에 감사드립니다. –