powershell - Powershell在不同的对象上拆分
问题描述
我正在尝试创建一个将拆分各种对象的脚本。例如我有磁盘名称
vm01-disk1
vm01_disk2
我正在尝试拆分磁盘名称,以便可以重命名磁盘虚拟机,但保留磁盘编号,我尝试过的是
$snapshot = Get-AzSnapShot
$vhdlong = ($snapshot.name).Split("_")[0]
$vhdrename = $vhdlong.split("-")[1]
但这仍然使 vm01_disk2 保持不变,如果我添加$vhdrename = $vhdlong.split("_")[1]
它会使 vm01-disk1 保持不变。
希望这是有道理的。提前感谢任何提示或建议:)
解决方案
除非性能是最重要的,否则我建议定期使用 PowerShell 的基于正则表达式
-split
的运算符,原因在此答案中讨论。- 从一组字符中任意分割可以表示为将这些字符包含在一个正则表达式中;在手头的情况下:
[...]
[-_]
- 从一组字符中任意分割可以表示为将这些字符包含在一个正则表达式中;在手头的情况下:
.ForEach()
数组方法可以(相当)有效地对内存中已经存在的值集合的每个元素进行操作。
因此,我建议如下:
(Get-AzSnapShot).Name.ForEach({ ($_ -split '[-_]')[1] })
推荐阅读
- javascript - 你如何旋转 Popper.js 弹出窗口?
- c++ - 是否有一种通用的方法来传递需要较少工作的重载方法的指针(比我的示例)
- javascript - 带连接的条件查询链
- php - 在 Codeigniter 中插入或更新条件
- r - 使用 ComplexHeatmap 包创建行注释时,R 找不到函数 anno_simple()
- python - 使用可能的动态函数创建来调试和理解代码
- reactjs - 如何在 useSubscription 挂钩中更新订阅变量 - Apollo v3
- python - 如何将特定的普通列表转换为嵌套列表
- java - 读取数据时 CipherInputStream 挂起
- ruby-on-rails - Toasts 通知未显示在导轨上