使用 Powershell 和 Diskpart 扩展具有可用空间的卷

use*_*297 1 powershell

我们所有的服务器都增加了磁盘分配。我不想打字:

Select disk 6
Select Partition 1
Extend
Select disk 7
Select Partition 1
Extend
.....
Run Code Online (Sandbox Code Playgroud)

对于每台服务器 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
Run Code Online (Sandbox Code Playgroud)

Ans*_*ers 5

由于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
    }
}
Run Code Online (Sandbox Code Playgroud)

第一个正则表达式仅选择具有 MB 或 GB 范围 ( [gm]b)可用空间的磁盘。根据需要进行调整。

diskpart调用包装到函数中,使它们更“易于理解”:

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 $_
    }
}
Run Code Online (Sandbox Code Playgroud)