PowerShell 属性 在此对象上找不到计数
PowerShell property Count cannot be found on this object
我正在尝试计算命令输出的一些行数。本例中基本上所有以“Y”结尾的行。
拳头抓取命令结果:
PS> $ItsAgents = tacmd listSystems -n Primary:SomeHost:NT
PS> $ItsAgents
Managed System Name Product Code Version Status
Primary:SomeHost:NT NT 06.30.07.00 Y
SomeHost:Q7 Q7 06.30.01.00 N
现在统计在线人数:
PS> $AgentCount = ($ItsAgents | Select-String ' Y ').Count
PS> $AgentCount
1
现在一切如我所愿。所以我把它放在我的脚本中是这样的:
$ItsAgents = tacmd listSystems -n $agent
Write-Host $ItsAgents
$BeforeCount = ($ItsAgents | Select-String ' Y ').Count
当脚本运行时(在 Set-StrictMode
下)我得到:
The property 'Count' cannot be found on this object. Verify that the
property exists.
At Y:\Scripts\newMoveAgents.ps1:303 char:7
+ $BeforeCount = ($ItsAgents | Select-String ' Y ').Count
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], PropertyNotFoundException
+ FullyQualifiedErrorId : PropertyNotFoundStrict
Write-Host
确实输出了正确的结果,因此 $agent
设置正确并且 tacmd
命令 运行 OK
那么为什么它在脚本中失败,但在命令行上工作呢?
使用 @()
运算符强制输出始终为数组:
$BeforeCount = @($ItsAgents | Select-String ' Y ').Count
The array sub-expression operator creates an array, even if it
contains zero or one object.
(Microsoft Docs)
注意:据我所知,它在脚本和控制台中的工作方式应该相同。也许您的命令产生不同的输出,其中控制台版本 returns 2+ 结果但由于某种原因脚本版本只有 1 或 0 结果,这就是没有 Count
[=21= 的原因].
我正在尝试计算命令输出的一些行数。本例中基本上所有以“Y”结尾的行。
拳头抓取命令结果:
PS> $ItsAgents = tacmd listSystems -n Primary:SomeHost:NT
PS> $ItsAgents
Managed System Name Product Code Version Status
Primary:SomeHost:NT NT 06.30.07.00 Y
SomeHost:Q7 Q7 06.30.01.00 N
现在统计在线人数:
PS> $AgentCount = ($ItsAgents | Select-String ' Y ').Count
PS> $AgentCount
1
现在一切如我所愿。所以我把它放在我的脚本中是这样的:
$ItsAgents = tacmd listSystems -n $agent
Write-Host $ItsAgents
$BeforeCount = ($ItsAgents | Select-String ' Y ').Count
当脚本运行时(在 Set-StrictMode
下)我得到:
The property 'Count' cannot be found on this object. Verify that the
property exists.
At Y:\Scripts\newMoveAgents.ps1:303 char:7
+ $BeforeCount = ($ItsAgents | Select-String ' Y ').Count
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], PropertyNotFoundException
+ FullyQualifiedErrorId : PropertyNotFoundStrict
Write-Host
确实输出了正确的结果,因此 $agent
设置正确并且 tacmd
命令 运行 OK
那么为什么它在脚本中失败,但在命令行上工作呢?
使用 @()
运算符强制输出始终为数组:
$BeforeCount = @($ItsAgents | Select-String ' Y ').Count
The array sub-expression operator creates an array, even if it contains zero or one object. (Microsoft Docs)
注意:据我所知,它在脚本和控制台中的工作方式应该相同。也许您的命令产生不同的输出,其中控制台版本 returns 2+ 结果但由于某种原因脚本版本只有 1 或 0 结果,这就是没有 Count
[=21= 的原因].