0

我正在运行以下命令,该命令返回一长串虚拟机:

$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

我什么也得不到。

4

3 回答 3

1

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

powerState | replace "VM Running", "poweredOn"

进入:

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

创建另一个计算属性。

于 2020-02-23T13:14:17.470 回答
1

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

于 2020-02-23T14:21:45.023 回答
0

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

$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
于 2020-02-23T13:50:52.867 回答