我们所有的服务器都在增加磁盘分配。我不想打字:
Select disk 6
Select Partition 1
Extend
Select disk 7
Select Partition 1
Extend
.....
每台服务器10卷,100台服务器......
有没有办法让powershell扫描磁盘,寻找可用空间大于100MB的磁盘。然后让它扩展所述磁盘上的分区?
运行2008R2的服务器
$psVersion Table
Name Value
---- -----
CLRVersion 2.0.50727.5485
BuildVersion 6.1.7601.17514
PSVersion 2.0
WSManStackVersion 2.0
PSCompatibleVersions {1.0, 2.0}
SerializationVersion 1.1.0.1
PSRemotingProtocolVersion 2.1
答案 0 :(得分:3)
由于diskpart
从STDIN读取命令,您可以执行以下操作:
'list disk' | diskpart | Where-Object {
$_ -match 'disk (\d+)\s+online\s+\d+ .?b\s+\d+ [gm]b'
} | ForEach-Object {
$disk = $matches[1]
"select disk $disk", "list partition" | diskpart | Where-Object {
$_ -match 'partition (\d+)'
} | ForEach-Object { $matches[1] } | ForEach-Object {
"select disk $disk", "select partition $_", "extend" | diskpart | Out-Null
}
}
第一个正则表达式仅选择MB或GB范围([gm]b
)中具有可用空间的磁盘。根据需要进行调整。
将diskpart
次来电话包含在功能中,让它们更容易消化,并且#34;:
function List-Disks {
'list disk' | diskpart |
Where-Object { $_ -match 'disk (\d+)\s+online\s+\d+ .?b\s+\d+ [gm]b' } |
ForEach-Object { $matches[1] }
}
function List-Partitions($disk) {
"select disk $disk", "list partition" | diskpart |
Where-Object { $_ -match 'partition (\d+)' } |
ForEach-Object { $matches[1] }
}
function Extend-Partition($disk, $part) {
"select disk $disk","select partition $part","extend" | diskpart | Out-Null
}
List-Disks | ForEach-Object {
$disk = $_
List-Partitions $disk | ForEach-Object {
Extend-Partition $disk $_
}
}
答案 1 :(得分:0)
相同的解决方案,但更简单,它也适用于其他语言环境:
function Extend-Partition($disk, $part)
{
"select disk $disk","select partition $part","extend" | diskpart | Out-Null
}
$disks = ((wmic diskdrive get Index | Select-String "[0-9]+") -replace '\D','')
ForEach ($disk in $disks) {
$parts = ((wmic partition where DiskIndex=$diskId get Index | Select-String "[0-9]+") -replace '\D','' | %{[int]$_ + 1})
ForEach ($part in $parts) {
Extend-Partition $disk $part
}
}
答案 2 :(得分:0)
对于vSphere / ESX中的VM
在vSphere中扩展VMDK后,Windows客户操作系统的扩展并不总是显而易见。在采取以下步骤之前,有时它根本看不到它。
通常,您必须打开磁盘管理并为系统执行刷新,然后查看已添加的其他空间。只有在那之后才能在Windows中展开驱动器。
如果您已经进入并完成了刷新,上面的两个脚本工作正常,但显然所有这一切的重点是尽可能多地省力。我测试并添加到第一个脚本。完全按照我的需要工作。
更新 - 磁盘 - 数量$匹配[1]是关键线。
function List-Disks {
'list disk' | diskpart |
? { $_ -match 'disk (\d+)\s+online\s+\d+ .?b\s+\d+ [gm]b' } |
% { $matches[1] }
Update-Disk -Number $matches[1]
}
function List-Partitions($disk) {
"select disk $disk", "list partition" | diskpart |
? { $_ -match 'partition (\d+)' } |
% { $matches[1] }
}
function Extend-Partition($disk, $part) {
"select disk $disk","select partition $part","extend" | diskpart |
Out-Null
}
List-Disks | % {
$disk = $_
List-Partitions $disk | % {
Extend-Partition $disk $_
}
}
抱歉丑陋的格式化。