PowerShell脚本检查共享驱动器的驱动器号,然后检查这些驱动器以查看卷影复制是否已启用
问题描述:
第一篇文章在这里。首先,我对脚本的使用经验不多,所以非常感谢您的好意。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...}
理想情况下,所有的我需要的是盘符。然后我想使用找到的驱动器号来查看是否在所述驱动器上启用了卷影复制。
答
这是非常可怕的,我肯定有一个更好的办法来解决你的问题,但低于有效地看着你的社会公众股,寻找驱动器号,查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"
}
}
答
下面将在目标服务器上创建所有驱动器号的阵列,然后使用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"
}
}