2014-11-05 54 views
0

第一篇文章在這裏。首先,我對腳本的使用經驗不多,所以非常感謝您的好意。PowerShell腳本檢查共享驅動器的驅動器號,然後檢查這些驅動器以查看卷影複製是否已啓用

我有一個劇本,我發現可以在一定程度得到有它

Push-Location 
Set-Location 'HKLM:\SYSTEM\CurrentControlSet\services\LanmanServer\Shares' 
Get-Item . | 
Select-Object -ExpandProperty property | 
ForEach-Object { 
    New-Object psobject -Property @{"property"=$_;"Value" = (Get-ItemProperty -Path . -Name $_).$_} 
} | 
Format-Table property, value -AutoSize 
Pop-Location 

股的驅動器號的「價值」的結果是長:

{CSCFlags=0, MaxUses=4294967295, Path=C:\location, Permissions=x...}

理想情況下,所有的我需要的是盤符。然後我想使用找到的驅動器號來查看是否在所述驅動器上啓用了卷影複製。

回答

0

這是非常可怕的,我肯定有一個更好的辦法來解決你的問題,但低於有效地看着你的社會公衆股,尋找驅動器號,查VolumeID爲驅動器盤符,然後檢查以查看是否VolumeID存在於陰影副本配置:

$paths = $(gwmi win32_share | ? {$_.name -notmatch '.*\$$' } | select -expandproperty path) -replace '([A-Z]:).*', '$1' 

foreach($p in $($paths | sort-object -Unique)) { 
    $deviceId = gwmi win32_volume | ? { $_.driveletter -eq $p } | select -expandproperty deviceid 
    if($(gwmi win32_shadowcopy | ? {$_.volumename -eq $deviceId })) { 
    Write-Host "$($p) Volume Shadow Copy enabled" 
    } 
    else { 
    Write-Host "$($p) No Volume Shadow Copy" 
    } 
} 
0

下面將在目標服務器上創建所有驅動器號的陣列,然後使用WMI,以查看是否卷陰影存儲是檢查每個當下。

# Specify host to check 
$serverName = "localhost" 
# Create an empty array to hold our drive letters 
$driveLetterArray = @() 

# Use wmi to get all share paths 
(get-wmiobject win32_share -computername $serverName).path | foreach { 
    # Get just the drive letter of the share path 
    $driveLetter = $_.split(":")[0] 
    # Send drive letter to array if it doesn't already exist in that array 
    if (($driveLetter) -and ($driveLetterArray -notcontains $driveLetter)) { 
     $driveLetterArray += $driveLetter 
    } 
} 

# Check if that drive letter has shadowstorage 
foreach ($letter in $driveLetterArray) { 
    # Clean up the letter variable so it will be able to match results from gwmi win32_volume 
    $letter = $letter + ":\" 
    $deviceID = (gwmi win32_volume -computername $serverName | Where-Object {$_.Name -eq $letter}).deviceID 
    # Clean up the deviceID variable so it will be able to match results from gwmi win32_shadowstorage 
    $deviceID = $deviceID.TrimStart("\\?\") 
    $deviceID = "Win32_Volume.DeviceID=`"\\\\?\\" + $deviceID + "\`"" 
    $shadowQuery = gwmi win32_shadowstorage -computername $serverName | Where-Object {$_.Volume -eq $deviceID} 
    # Report findings to the user 
    if ($shadowQuery) { 
     "Volume shadow enabled on drive $letter" 
    } else { 
     "Volume shadow NOT enabled on drive $letter" 
    } 
} 
相關問題