首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >方法调用失败,因为X不包含名为“op_Subtraction”的方法

方法调用失败,因为X不包含名为“op_Subtraction”的方法
EN

Stack Overflow用户
提问于 2019-12-12 07:44:43
回答 2查看 1.9K关注 0票数 0

我制作了一个脚本来分析我每天都在做的广告。

在过去的几个月里,它一直运行良好,没有任何错误,但是今天早上出现了一个,我不知道为什么。

就在执行过程中:

代码语言:javascript
复制
$adm_disabled = ((Get-ADUser -LDAPFilter "(admincount=1)" | Where {$_.enabled -ne $true}).count) - 2
Write-Host "ADMIN ACCOUNTS DISABLED : "$adm_disabled

我得到了以下错误(这是我以前从未遇到过的法语错误):

代码语言:javascript
复制
Échec lors de l’appel de la méthode, car [Microsoft.ActiveDirectory.Management.ADPropertyValueCollection] ne contient pas de méthode nommée « op_Subtraction ».
Au caractère D:\Users\pmonties\OneDrive - Professional\Documents\Scripts_PS_Test\ANALYSE_AD.ps1:29 : 1
+ $adm_disabled = ((Get-ADUser -LDAPFilter "(admincount=1)" | Where {$_ ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation : (op_Subtraction:String) [], RuntimeException
    + FullyQualifiedErrorId : MethodNotFound

已翻译

代码语言:javascript
复制
Method invocation failed because [Microsoft.ActiveDirectory.Management.ADPropertyValueCollection] does not contain a method named 'op_Subtraction'.
At D:\Users\pmonties\OneDrive - Professional\Documents\Scripts_PS_Test\ANALYSE_AD.ps1:29 : 1
+ $adm_disabled = ((Get-ADUser -LDAPFilter "(admincount=1)" | Where {$_ ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation : (op_Subtraction:String) [], RuntimeException
    + FullyQualifiedErrorId : MethodNotFound

我不明白,为什么减法突然不起作用了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-12-12 10:07:45

错误说“从[Microsoft.ActiveDirectory.Management.ADPropertyValueCollection]类型的对象减去是不可能的”。

当您尝试对不支持算术的事物执行算术时,总是会发生这种错误:

代码语言:javascript
复制
# fails the same way:
@() - 2

在你的情况下,你需要

代码语言:javascript
复制
(($something).count) - 2

不管$something是什么,您的期望是.Count将是这些事物的计数,因此是一个数字。

但是,如果$something偶然拥有自己的名为Count的财产,会发生什么呢?然后PowerShell会给出这个属性,如果它不是一个数字,而是一个ADPropertyValueCollection,那么上面的错误就会发生。

代码语言:javascript
复制
$a = @{ some = "object" }
$b = @{ some = "object"; Count = 1,2,3 }

$a.Count - 2 # succeeds
$b.Count - 2 # fails with "[System.Object[]] does not contain a method named 'op_Subtraction'

为了防止这种情况,可以使用Measure-Object,它返回一个MeasureInfo,该MeasureInfo有一个数字Count

代码语言:javascript
复制
($something | Measure-Object).count - 2
票数 5
EN

Stack Overflow用户

发布于 2019-12-12 10:06:41

忘了我之前的回应吧。我想我找到了根本原因。

我限制了的结果,以便在Where过滤器之后,我只剩下一个用户。而且该用户没有count属性,因为它只是一个对象。

代码语言:javascript
复制
#limit Get-ADUser using array notation [0..1]
$adm_disabled = ((Get-ADUser -LDAPFilter "(admincount=1)")[0..1] | Where {$_.Enabled -ne $true}).Count - 2

只要简单地添加一个@-符号,表示我正在处理一个数组,它就会再次工作。

代码语言:javascript
复制
$adm_disabled = @(Get-ADUser -LDAPFilter "(admincount=1)" | Where {$_.Enabled -ne $true}).Count - 2
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59299851

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档