我有一些脚本写在PowerShell上,我有一些问题。 当我运行这个脚本时,输出中有一些错误:
您无法在空值expression式上调用方法。
在C:\ scripts \ exchange_rep_work_cp.ps1:133 char:82
+ $ mbx | add-member -membertype noteproperty -value $ stats.TotalItemSize.Value.ToMB <<<<()-name TotalSize
+ CategoryInfo:InvalidOperation:(ToMB:String)[],RuntimeException
+ FullyQualifiedErrorId:InvokeMethodOnNull您无法在空值expression式上调用方法。
这个错误重复几次。 这是代码行(133):
130 $ tmp =“”
131 $邮箱| foreach {
132#姓名_公司有一个不同的域和域控制器
133($ Company -eq“Name_of_company”){
134 $ stats = get-mailboxstatistics -DomainController zzzz.xxx.yyyyyy.local -id $ _ | where> 135 {$ .ObjectClass -eq“Mailbox”}}
136其他{
137 $ stats = get-mailboxstatistics -id $ | 其中{$ .ObjectClass -eq“Mailbox”}}
138 $ MBx =新对象system.object
139 $ tmp = $ .EmailAddresses | foreach {if($ _ -notmatch“yyyyyy.local”){$ .AddressString}}
140:$ Country = $ .Customattribute1
141:$ Types = $ _。Customattribute2
142:$ mbx | add-member -membertype noteproperty -value $ stats.Displayname -name DisplayName
143:$ mbx | add-member -membertype noteproperty -value $ stats.TotalItemSize.Value.ToMB()-name TotalSize
请给我一些build议什么是错的
问候
它说你正试图调用一个名为$stats.TotalItemSize.Value的string的ToMB方法。 这是一个[string] ,它没有这个方法。
您是否在安装了Exchange命令行pipe理程序的计算机上运行脚本? 这还包括Exchange用来表示大小的一些数据types,没有这些错误是很常见的。 有效的testing是检查在Exchange服务器上运行时是否存在错误。
此外,您连接到Exchange远程实例的代码将很有趣。
编辑:你的代码缺less一些下划线在这里和那里,所以统计对象将在某些情况下永远不会被填充。 这里有一个简短的解释:
$a = "" | select Name, Value $a.Name = "Trond" $a.value = "Yes" $array = @() $array += $a #error $array | where {$.Name -eq "Trond"} #success $array | where {$_.Name -eq "Trond"}
所以,总之:这一行:
$stats = get-mailboxstatistics -id $ | where {$.ObjectClass –eq “Mailbox”}}
永远不会产生“$ stats”对象,我怀疑是为什么你的代码失败。 如果您使用的是PowerShell 3.0 ISE,则可以看到ISE不“理解”您的过滤,并显示不会将美元符号着色为红色。