【问题标题】:Failing to combine 2 commands in PowerShell无法在 PowerShell 中组合 2 个命令
【发布时间】:2020-08-03 19:31:43
【问题描述】:

我正在尝试使以下 PowerShell 命令工作但失败了。任何人都知道如何使它工作?
我知道 Expression 标签中有问题,但不知道是什么。

Get-BrokerDesktop -MaxRecordCount 5000 | Where{($_.LastConnectionUser -eq $null) -and ($_.AssociatedUserNames -ne $null)} | Select MachineName,@{ Name = 'CreationDate';  Expression = {Get-ProvVM -MaxRecordCount 5000 -Filter "VMName -eq $_.HostedMachineName" | Select CreationDate}} | ft -AutoSize

它只给出第一列输出。显示了第二列名称但没有数据。
如果我如下单独运行第二个命令,我会得到输出。

Get-ProvVM -MaxRecordCount 5000 -Filter "VMName -eq 'ComputerName'" | Select CreationDate

HostedMachineNameGet-BrokerDesktop 的属性。
VMNameGet-ProvVM 的属性。

【问题讨论】:

  • 似乎-Filter 使用不正确。大多数命令期望过滤器值是一个字符串。 Powershell 不会将您的过滤器正确标记为字符串。
  • 不确定从这些命令返回的对象,但可以尝试:$(Get-ProvVM -MaxRecordCount 5000 -Filter (VMName -eq $_.HostedMachineName)).CreationDate
  • @mjsqu,谢谢你的建议,但没用 :-(
  • @AdminOfThings,如果-Filter 不是前面的路,我也可以使用Where
  • 试试"VMName -eq '$($_.HostedMachineName)'"

标签: powershell powershell-3.0 powershell-4.0


【解决方案1】:

@Theo,谢谢,您的解决方案有效,但我必须添加 -ExpandProperty 才能按我的意愿进行操作。这是我的最终命令,它完全按照预期工作。

Get-BrokerDesktop -MaxRecordCount 5000 | Where{($_.LastConnectionUser -eq $null) -and ($_.AssociatedUserNames -ne $null)} | Select MachineName,@{ Name = 'CreationDate';  Expression = {Get-ProvVM -MaxRecordCount 5000 -Filter "VMName -eq '$($_.HostedMachineName)'" | Select CreationDate -ExpandProperty CreationDate}} | ft -AutoSize

【讨论】:

  • 干得好!但是,我会在一个变量中捕获此结果,然后在该变量上执行ft -AutoSize。这样,您可以对结果做更多​​的事情,而不仅仅是在控制台中输出。此外,Select 可以缩短为 Select-Object -ExpandProperty CreationDate
  • @Theo,再次感谢您的建议,但是此命令是更大片段的一部分,我也有几个其他片段。所以,我会保持这种状态。
猜你喜欢
  • 2022-01-17
  • 2014-01-14
  • 1970-01-01
  • 1970-01-01
  • 2014-08-15
  • 1970-01-01
  • 1970-01-01
  • 2022-01-07
  • 1970-01-01
相关资源
最近更新 更多