我制作了一个脚本来分析我每天都在做的广告。
在过去的几个月里,它一直运行良好,没有任何错误,但是今天早上出现了一个,我不知道为什么。
就在执行过程中:
$adm_disabled = ((Get-ADUser -LDAPFilter "(admincount=1)" | Where {$_.enabled -ne $true}).count) - 2
Write-Host "ADMIN ACCOUNTS DISABLED : "$adm_disabled我得到了以下错误(这是我以前从未遇到过的法语错误):
É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已翻译
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我不明白,为什么减法突然不起作用了?
发布于 2019-12-12 10:07:45
错误说“从[Microsoft.ActiveDirectory.Management.ADPropertyValueCollection]类型的对象减去是不可能的”。
当您尝试对不支持算术的事物执行算术时,总是会发生这种错误:
# fails the same way:
@() - 2在你的情况下,你需要
(($something).count) - 2不管$something是什么,您的期望是.Count将是这些事物的计数,因此是一个数字。
但是,如果$something偶然拥有自己的名为Count的财产,会发生什么呢?然后PowerShell会给出这个属性,如果它不是一个数字,而是一个ADPropertyValueCollection,那么上面的错误就会发生。
$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
($something | Measure-Object).count - 2发布于 2019-12-12 10:06:41
忘了我之前的回应吧。我想我找到了根本原因。
我限制了的结果,以便在Where过滤器之后,我只剩下一个用户。而且该用户没有count属性,因为它只是一个对象。
#limit Get-ADUser using array notation [0..1]
$adm_disabled = ((Get-ADUser -LDAPFilter "(admincount=1)")[0..1] | Where {$_.Enabled -ne $true}).Count - 2只要简单地添加一个@-符号,表示我正在处理一个数组,它就会再次工作。
$adm_disabled = @(Get-ADUser -LDAPFilter "(admincount=1)" | Where {$_.Enabled -ne $true}).Count - 2https://stackoverflow.com/questions/59299851
复制相似问题