String 无法将输出转换为字符串

String 无法将输出转换为字符串,string,powershell,String,Powershell,我无法将此命令格式化为字符串。下面的代码以空字符串形式返回$r。为什么? $f = gwmi -ComputerName PCname -Class Win32_Process -Filter "name='process.exe'"| select {$_.WorkingSetSize/1MB}|fl $r = $f.ToString() 如果检查格式列表返回的对象类型,您将看到它是System.object的数组 $f = gwmi -ComputerName PCname -Clas

我无法将此命令格式化为字符串。下面的代码以空字符串形式返回
$r
。为什么?

$f = gwmi -ComputerName PCname -Class Win32_Process -Filter "name='process.exe'"|
  select {$_.WorkingSetSize/1MB}|fl
$r = $f.ToString()

如果检查格式列表返回的对象类型,您将看到它是System.object的数组

$f = gwmi -ComputerName PCname -Class Win32_Process -Filter "name='process.exe'"| `
select {$_.WorkingSetSize/1MB}|fl 
$r | get-member
如果您只需要工作集的值,请尝试以下操作:

gwmi -ComputerName PCname -Class Win32_Process -Filter "name='process.exe'" | `
select @{label='WorkingSetSize';expression={$_.WorkingSetSize/1MB}}| `
select -expandproperty WorkingSetSize

格式列表
生成字符串数组,而不是单个字符串,因此
$f.ToString()
应该为您提供
System.Object[]
。要将数组转换为单个字符串,可以将其通过管道传输到
Out-string
cmdlet中:

$f = gwmi -ComputerName PCname -Class Win32_Process -Filter "name='process.exe'" |
     select {$_.WorkingSetSize/1MB} | fl
$g = $f | Out-String

但是,如上所述,您至少应该获得
System.Object[]
,而不是空字符串,因此请仔细检查
$f

的值,我发现-Filter“name='process.exe'对我不起作用。所以我换了

| where {$_.name -match "Process"}
这是我的结果,我还用LocalHost替换了PCname并删除了| fl

$r = gwmi -ComputerName localhost -Class Win32_Process | where {$_.name -match "Process"} |
select @{label='WorkingSetSize';expression={$_.WorkingSetSize/1MB}} | 
select -expandproperty WorkingSetSize 
$r.ToString()