我正在使用Get-PhysicalDisk | Format-Table DeviceID, UniqueID
获取Windows 2016 Server上所有驱动器的驱动器号和序列号列表。我想搜索一个序列号,只捕获驱动器号作为变量。我习惯于在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
我想扩展此命令以查找序列号qazxsw poi然后将名为qazxsw poi的变量设置为624A937024897B4FF488CBF800027A56
的值,如输出中所示。
然后,我计划在$DriveNumber
中使用此变量,使驱动器脱机/联机,以执行卷覆盖。我不想对驱动器号进行硬编码,因为在重新启动时,驱动器号可能会改变。
注意我使用6
并将适当的输出连接到Set-Disk
以执行我的驱动器关/在线。但是,我有一个神秘的问题,虚拟驱动器没有显示与Get-Disk
,因此我试图找到与Set-Disk
的解决方法谢谢!
Get-Disk
请注意需要将GUID字符串括在Get-PhysicalDisk
中。
与所有PowerShell cmdlet一样,$driveNumber = (
Get-PhysicalDisk | Where-Object UniqueId -eq '{624A937024897B4FF488CBF800027A56}'
).DeviceId
输出可以查询其属性的对象。
Cmdlet {...}
充当它从管道接收的对象的过滤器,并将属性Get-PhysicalDisk
的值与指定的文字GUID(字符串)进行比较,根据定义,它与(最多)一个对象匹配。
Where-Object
返回目标对象的UniqueId
属性的值,并将其分配给变量(...).DeviceId
。
DeviceId
cmdlets such as $driveNumber
:只使用Format-*
cmdlet进行显示格式化。
如果意图是进一步的程序化处理:
Format-Table
cmdlet调用无关)Format-*
,请使用Format-*
。