首先发布在这里。首先,我对脚本的经验很少,所以谢谢你的好意。
我有一个脚本,我发现可以稍微获得有共享的驱动器号
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 :(得分:0)
这非常可怕,我确定有更好的方法可以解决您的问题,但下面有效地查看您的公共分享,查找驱动器号,查找{{1对于该驱动器号,然后检查以查看卷影副本配置中是否存在VolumeID
:
VolumeID
答案 1 :(得分: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"
}
}