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

问题描述 投票:1回答:1

我正在使用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的解决方法谢谢!

powershell variables output
1个回答
2
投票
Get-Disk

请注意需要将GUID字符串括在Get-PhysicalDisk中。

与所有PowerShell cmdlet一样,$driveNumber = ( Get-PhysicalDisk | Where-Object UniqueId -eq '{624A937024897B4FF488CBF800027A56}' ).DeviceId 输出可以查询其属性的对象。

Cmdlet {...}充当它从管道接收的对象的过滤器,并将属性Get-PhysicalDisk的值与指定的文字GUID(字符串)进行比较,根据定义,它与(最多)一个对象匹配。

Where-Object返回目标对象的UniqueId属性的值,并将其分配给变量(...).DeviceId


A note re use of DeviceId cmdlets such as $driveNumber:

只使用Format-* cmdlet进行显示格式化。

如果意图是进一步的程序化处理:

  • 要么:只是访问输入对象的内在属性(其可用性与它们是默认显示还是通过Format-Table cmdlet调用无关)
  • 或者:如果您需要创建仅包含原始属性和/或转换属性属性值的子集的简化或转换对象(Format-*,请使用Format-*
© www.soinside.com 2019 - 2024. All rights reserved.