管道替换会丢弃我所有的数据吗?

Piping into replace discards all my data?

我运行下面的命令returns一长串虚拟机:

$vms = Get-AzureRmVM -status | select name,@{ n='IP Address'; e={"IP removed"}}, @{ n='OsType';
e={$_.StorageProfile.OsDisk.OsType}}, powerState
$vms

当我通过管道进行替换时,几乎没有剩余数据..

$vms = Get-AzureRmVM -status | select name,@{ n='IP Address'; e={"IP removed"}}, @{ n='OsType';
e={$_.StorageProfile.OsDisk.OsType}}, powerState | replace "VM Running", "poweredOn"
$vms

我什么也得不到。

您需要将 Select-Object 行的最后一部分从

更改为
powerState | replace "VM Running", "poweredOn"

进入:

@{Name = 'powerState'; Expression = { $_.powerState -replace "VM Running", "poweredOn"}}

创建另一个计算属性。

Replace 不是@Lee_Dailey 指出的语句、cmdlet、函数、别名或可执行程序。有一个替换运算符可以用正则表达式替换,替换方法可以在没有正则表达式的情况下执行此操作。 (令我惊讶的是它甚至没有显示错误)。所以这里没有replace with Regex所以我推荐用replace方法替换:

$vms = Get-AzureRmVM -status | select-object name,@{ n='IP Address'; e={"IP removed"}}, @{ n='OsType';
e={$_.StorageProfile.OsDisk.OsType}}, @{n='powerState';e={$_.powerState.ToString().Replace("VM Running", "poweredOn")}}
$vms

Replace 是一个 windows 命令来替换文件。这不是你想要的。 https://ss64.com/nt/replace.html