-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathWindows虚拟磁盘.ps1
93 lines (74 loc) · 3.03 KB
/
Windows虚拟磁盘.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# 设置记录文件的路径
$RecordFilePath = "C:\Path\To\VHDRecords.txt"
function Create-VHD {
# 询问用户输入虚拟磁盘的路径
$VHDPath = Read-Host "请输入虚拟磁盘的完整路径(例如 C:\Path\To\VirtualDisk.vhdx)"
# 询问用户输入虚拟磁盘的大小(以GB为单位)
$SizeGB = Read-Host "请输入虚拟磁盘的大小(以GB为单位)"
# 将大小转换为字节
$SizeBytes = [int64]$SizeGB * 1GB
# 创建虚拟磁盘
New-VHD -Path $VHDPath -SizeBytes $SizeBytes -Dynamic
# 挂载虚拟磁盘
Mount-VHD -Path $VHDPath
# 获取最新的磁盘号
$Disk = Get-Disk | Where-Object PartitionStyle -Eq 'RAW' | Select-Object -First 1
# 初始化磁盘
Initialize-Disk -Number $Disk.Number
# 创建分区并分配驱动器号
$Partition = New-Partition -DiskNumber $Disk.Number -UseMaximumSize -AssignDriveLetter
# 格式化分区为 NTFS
Format-Volume -DriveLetter $Partition.DriveLetter -FileSystem NTFS -NewFileSystemLabel "VirtualDisk"
# 设置磁盘策略以提高安全性和可靠性
Set-Disk -Number $Disk.Number -IsOffline $false -IsReadOnly $false
Set-StorageSetting -NewFileSystemLabel "VirtualDisk" -IsIntegrityEnabled $true
# 禁用写缓存以确保数据安全
Set-Disk -Number $Disk.Number -IsWriteCacheEnabled $false
# 记录创建的虚拟磁盘信息
Add-Content -Path $RecordFilePath -Value "$VHDPath,$($Partition.DriveLetter)"
Write-Host "虚拟磁盘已创建并挂载。驱动器号为 $($Partition.DriveLetter):"
}
function Mount-VHDFromRecord {
# 显示记录的虚拟磁盘
if (Test-Path $RecordFilePath) {
$Records = Get-Content -Path $RecordFilePath
Write-Host "可挂载的虚拟磁盘:"
$Records | ForEach-Object { Write-Host $_ }
# 询问用户选择挂载哪个虚拟磁盘
$VHDPath = Read-Host "请输入要挂载的虚拟磁盘路径"
if ($Records -contains $VHDPath) {
Mount-VHD -Path $VHDPath.Split(',')[0]
Write-Host "虚拟磁盘已挂载。"
} else {
Write-Host "未找到指定的虚拟磁盘。"
}
} else {
Write-Host "没有记录可用。"
}
}
function View-VHDRecords {
# 查看所有记录的虚拟磁盘
if (Test-Path $RecordFilePath) {
$Records = Get-Content -Path $RecordFilePath
Write-Host "已创建的虚拟磁盘:"
$Records | ForEach-Object { Write-Host $_ }
} else {
Write-Host "没有记录可用。"
}
}
# 主菜单
while ($true) {
Write-Host "`n请选择操作:"
Write-Host "1. 创建新的虚拟磁盘"
Write-Host "2. 挂载已创建的虚拟磁盘"
Write-Host "3. 查看已创建的虚拟磁盘"
Write-Host "4. 退出"
$choice = Read-Host "输入选项编号"
switch ($choice) {
"1" { Create-VHD }
"2" { Mount-VHDFromRecord }
"3" { View-VHDRecords }
"4" { break }
default { Write-Host "无效的选项,请重试。" }
}
}