powershell - PowerShell:如何从多列输出中的单列设置变量?
问题描述
我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
如输出所示。
然后我计划使用此变量Set-Disk
使驱动器脱机/联机作为执行卷覆盖。我不想硬编码驱动器号,因为重新启动后,驱动器号可能会改变。
注意我正在使用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 进行显示格式化。
如果意图是进一步的程序化处理:
要么:简单地访问输入对象的内在属性(其可用性与它们是默认显示还是通过
Format-*
cmdlet 调用无关)或者:如果您需要创建仅具有原始属性的子集和/或转换的属性属性值(计算的属性,请使用
Select-Object
.
推荐阅读
- performance - 优化 Page speed Insights Google 桌面版和移动版
- python - 如何使用 discord.py 机器人断开人们与语音频道的连接?
- sql - 在 Kylin 中将子查询结果转换为数组
- json - 使用 Optional 管理我的 Hibernate POJO NullPointerException
- java - 我的 Spring MVC 应用程序的较新版本未在 App 引擎上实例化
- html - 如何修复或删除底部多余的黑色空间?iOS
- amazon-web-services - AWS API Gateway 资源 ID 与 Terraform 的映射
- django-models - 编程错误在 /
- python - Pandas Dataframe Groupby 加入字符串,同时保留字符串的顺序
- node.js - Mongoose Populate 不知道如何填充