Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PowerShell:如何从多列输出中的单列设置变量?_Powershell_Variables_Output - Fatal编程技术网

PowerShell:如何从多列输出中的单列设置变量?

PowerShell:如何从多列输出中的单列设置变量?,powershell,variables,output,Powershell,Variables,Output,我正在使用Get PhysicalDisk | Format Table DeviceID,UniqueID获取Windows 2016服务器上所有驱动器的驱动器号和序列号列表。我想搜索一个序列号,只捕获驱动器号作为变量。我习惯于在UNIX中使用awk,我完全不知道如何在PowerShell中实现这一点 Get-PhysicalDisk | Format-Table DeviceID, UniqueID DeviceID UniqueID

我正在使用
Get PhysicalDisk | Format Table DeviceID,UniqueID
获取Windows 2016服务器上所有驱动器的驱动器号和序列号列表。我想搜索一个序列号,只捕获驱动器号作为变量。我习惯于在UNIX中使用awk,我完全不知道如何在PowerShell中实现这一点

Get-PhysicalDisk | Format-Table DeviceID, UniqueID

DeviceID UniqueID                              
-------- --------                              
5        624A937024897B4FF488CBF800027A4B      
8        624A937024897B4FF488CBF800028A4D      
7        624A937024897B4FF488CBF800027A59      
0        {c4d394f5-509e-11e9-a834-806e6f6e6963}
1        {c4d394f6-509e-11e9-a834-806e6f6e6963}
2        {c4d394f7-509e-11e9-a834-806e6f6e6963}
3        {c4d394f8-509e-11e9-a834-806e6f6e6963}
4        {c4d394f9-509e-11e9-a834-806e6f6e6963}
6        624A937024897B4FF488CBF800027A56
我想扩展此命令以查找SerialNumber
624A937024897B4FF488CBF800027A56
,然后将名为
$DriveNumber
的变量设置为
6
的值,如输出所示

然后,我计划在
设置磁盘
中使用此变量使驱动器脱机/联机,以执行卷覆盖。我不想硬编码驱动器号,因为重新启动后,驱动器号可能会更改。
注意:我正在使用
Get Disk
并将适当的输出输送到
Set Disk
以执行驱动器关闭/联机操作。但是,我有一个神秘的问题,虚拟驱动器没有显示在
Get Disk
中,因此我试图找到一个解决办法
Get PhysicalDisk
谢谢

$driveNumber = (
  Get-PhysicalDisk | Where-Object UniqueId -eq '{624A937024897B4FF488CBF800027A56}'
).DeviceId
请注意,需要将GUID字符串括在
{…}

与所有PowerShell cmdlet一样,
Get PhysicalDisk
输出可以查询其属性的对象

Cmdlet
Where Object
充当它从管道接收的对象的过滤器,并将属性
UniqueId
的值与指定的文本GUID(字符串)进行比较,根据定义,该字符串与(最多)一个对象相匹配

(…).DeviceId
返回目标对象的
DeviceId
属性的值,并将其分配给变量
$driveNumber


注意:重复使用
Format-*
cmdlet,如
Format Table
: 仅使用
Format-*
cmdlet设置显示格式

如果目的是进一步编程处理:

  • 或者:只需访问输入对象的固有属性(其可用性与默认显示还是通过
    格式-*
    cmdlet调用无关)

  • 或者:如果需要仅使用原始特性和/或变换特性值的子集创建简化或变换对象,请使用


@RightCoaster:您缺少
{…}
围绕GUID。在PowerShell中显示的内容与此无关-重要的是对象本身具有什么属性。请注意,
Format-*
cmdlet只能用于显示格式设置-如果目的是进一步编程处理,则决不能使用。@RightCoaster-以防万一mklement0没有痛苦地执行此操作ar…
Format-*
cmdlet获取您的对象,对它们进行分割,然后发送用格式化代码包装的剩余内容。要了解我所说的内容,请尝试以下操作…>>$Test=$PSVersionTable | Format Table;$Test.Count;$Test[1]`