获得指定磁盘上的最大音量

时间:2016-09-06 16:04:16

标签: powershell storage

编辑:我意识到我可能发布了错误的地方,可能最好将其发送到serverfault,对不起,如果是这样的话。

我正在研究磁盘恢复操作的自动化,并且在其中间我需要为包含Windows系统的已恢复卷分配一个字母,以允许修改它的内容(驱动程序)注射等)。

在机器上我有2个磁盘:磁盘0是恢复机器的系统磁盘,磁盘1是恢复机器的系统磁盘,其上有两个分区,系统保留和标准分区。

我想将驱动器号E分配给 磁盘1分区Windows。这样做之后手动:

Get-Partition

Disk Number: 1
PartitionNumber  DriveLetter Offset                                 Size Type
---------------  ----------- ------                                 ---- ----
1                            1048576                              350 MB IFS
2                E           368050176                          29.66 GB IFS

 Disk Number: 0
PartitionNumber  DriveLetter Offset                                 Size Type
---------------  ----------- ------                                 ---- ----
1                            1048576                              350 MB IFS
2                C           368050176                          49.66 GB IFS

我尝试了什么:

<?php

namespace App\Helpers\Common;

use Monolog\Logger;
use Monolog\Handler\StreamHandler;
use Carbon\Carbon;

class FileLogger extends Logger
{
    protected $path = null;

    public function __construct($name, $level = 'DEBUG', $path = null, array $processors = [ ])
    {
        $tz = static::$timezone = new \DateTimeZone(config('app.timezone'));
        $handlers = [ ];
        parent::__construct($name, $handlers, $processors);

        $dtObj = Carbon::now($tz);

        if ( ! $path) {
            $path = $name . '-' . $dtObj->format('Y-m-d') . '.log';
        }

        $path = $this->path = storage_path('logs/' . $path);

        $this->addStream($path, $level);

        return $this;
    }

    public static function getLevelNum($level)
    {
        return static::getLevels()[ strtoupper($level) ];
    }

    public function addStream($path, $level = 'DEBUG')
    {
        if ( ! is_int($level)) {
            $level = static::getLevelNum($level);
        }
        $this->pushHandler(new StreamHandler($path, $level));

        return $this;
    }

    public function addRecord($level, $message, array $context = array())
    {
        if ( ! is_int($level)) {
            $level = static::getLevelNum($level);
        }

        parent::addRecord($level, $message, $context);

        return $this;
    }
}

这不起作用,因为Where对象条件没有检测到基本类型。

我想也许我可以尝试检测最大的分区,因为磁盘上只会有两个分区。但是我怎么也不知道。

2 个答案:

答案 0 :(得分:3)

如果您想获得最大的分区,可以在size属性上使用Sort-Object,类型为uint64 - 因此您不必担心根据字符串获取错误的分区排序MB / GB - 然后使用Select-Object获取第一个结果,如下所示:

Get-Partition -DiskNumber 1 | Sort-Object "Size" -Descending | Select-object -First 1 |  Set-Partition -NewDriveLetter E

答案 1 :(得分:3)

这将选择磁盘1上的最大分区:

Get-Partition -DiskNumber 1 | sort-object -property size -descending | select -first 1

希望有所帮助