我已经运行了本文中的Powershell脚本:How to detect applications using "hardcoded" DC name or IP。
text.setInputType(inputEditText.getInputType() | InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS); // forced capitalization
text.setInputType(inputEditText.getInputType() & ~ InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS); // negate the flag
我收到的错误是:
Get-WinEvent -ComputerName dc01.contoso.com -MaxEvents 1000 -FilterHashtable @{LogName="Directory Service" ; ID=1139 } | ForEach-Object `
{
$_info = @{
"Operation" = [string] $_.Properties.Value[0]
"User" = [string] $_.Properties.Value[2]
"IP:Port" = [string] $_.Properties.Value[3]
}
New-Object psobject -Property $_info
}
任何人都可以帮忙吗?
答案 0 :(得分:0)
<强> TL;博士强>:
Get-WinEvent -ComputerName dc01.contoso.com -MaxEvents 1000 -FilterHashtable @{
LogName="Directory Service" ; ID=1139 } |
ForEach-Object {
[pscustomobject] @{
"Operation" = try { [string] $_.Properties.Value[0] } catch {}
"User" = try { [string] $_.Properties.Value[2] } catch {}
"IP:Port" = try { [string] $_.Properties.Value[3] } catch {}
}
}
Cannot index into a null array
错误消息告诉您$_.Properties.Value
是$null
而不是数组,因此尝试访问此非数组的元素失败 [1] 这意味着至少有一些事件日志记录没有嵌入的数据值。
(New-Object : Cannot validate argument on parameter 'Property'
只是一个后续错误,抱怨-Property
参数为$null
,因为初始错误导致$_info
成为$null
{1}}。)
最简单的解决方案是使用一个嵌入try { ... } catch {}
引用的嵌入式$_.Properties.Value[<n>]
处理程序,当$_.Properties.Value
为$null
时会悄悄地忽略这种情况并导致整体子表达式返回$null
。
另请注意如何将哈希表文字(@{ ... }
)直接转换为类型加速器[pscustomobject]
,以便将其转换为自定义对象。
[1]请注意,自PSv3以来,尝试索引非$null
但不是数组的值不会失败,但悄然返回$null
;例如:$v=20; $v[1] # -> $null
。
索引到字符串值是一种特殊情况,但是:它返回指定位置的字符:$v='hi'; $v[1] # -> 'i'