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
我想扩展此命令以查找SerialNumber624A937024897B4FF488CBF800027A56
,然后将名为$DriveNumber
的变量设置为6
的值,如输出所示
然后,我计划在设置磁盘
中使用此变量使驱动器脱机/联机,以执行卷覆盖。我不想硬编码驱动器号,因为重新启动后,驱动器号可能会更改。注意:我正在使用
Get Disk
并将适当的输出输送到Set Disk
以执行驱动器关闭/联机操作。但是,我有一个神秘的问题,虚拟驱动器没有显示在Get Disk
中,因此我试图找到一个解决办法Get PhysicalDisk
谢谢
$driveNumber = (
Get-PhysicalDisk | Where-Object UniqueId -eq '{624A937024897B4FF488CBF800027A56}'
).DeviceId
请注意,需要将GUID字符串括在{…}
中
与所有PowerShell cmdlet一样,Get PhysicalDisk
输出可以查询其属性的对象
CmdletWhere Object
充当它从管道接收的对象的过滤器,并将属性UniqueId
的值与指定的文本GUID(字符串)进行比较,根据定义,该字符串与(最多)一个对象相匹配
(…).DeviceId
返回目标对象的DeviceId
属性的值,并将其分配给变量$driveNumber
注意:重复使用
Format-*
cmdlet,如Format Table
:
仅使用Format-*
cmdlet设置显示格式
如果目的是进一步编程处理:
- 或者:只需访问输入对象的固有属性(其可用性与默认显示还是通过
cmdlet调用无关)格式-*
- 或者:如果需要仅使用原始特性和/或变换特性值的子集创建简化或变换对象,请使用
{…}
围绕GUID。在PowerShell中显示的内容与此无关-重要的是对象本身具有什么属性。请注意,Format-*
cmdlet只能用于显示格式设置-如果目的是进一步编程处理,则决不能使用。@RightCoaster-以防万一mklement0没有痛苦地执行此操作ar…Format-*
cmdlet获取您的对象,对它们进行分割,然后发送用格式化代码包装的剩余内容。要了解我所说的内容,请尝试以下操作…>>$Test=$PSVersionTable | Format Table;$Test.Count;$Test[1]`