我有一个脚本,它build立一个基于DOS命令输出的属性的PSCustomObject。 数组的构build正确,我可以通过将其转储到屏幕输出来检查它。 但是,当我尝试通过属性名称获取元素列表时,它会给出零输出。 示例如下:
$computers = @("computer1","computer2","computer3") ForEach ($computer in $computers) { quser /server:$computer | Select-Object -Skip 1 | ForEach-Object { $CurrentLine = $_.Trim() -Replace '\s+',' ' -Split '\s' $HashProps = @{ UserName = $CurrentLine[0] ComputerName = $computer timestamp = $timestamp } $tempUserList = @(New-Object -TypeName PSCustomObject -Property $HashProps | Select-Object -Property UserName,Id,State,IdleTime,LogonTime,ComputerName | % { $_ -replace '","', ','} | % { $_ -replace "^`"",''} | % { $_ -replace "`"$",''}) $userList += $tempUserList } $serverCount = $userList | % { $_.UserName | where ($_.ComputerName -eq $computer) } Write-Host "Server $computer has" $serverCount.Count "Users Logged On."
}
这个代码的输出是:
Server computer1 has 0 Users Logged On. Server computer2 has 0 Users Logged On. Server computer3 has 0 Users Logged On.
如果我在循环完成后向脚本添加一个$ userList,我得到以下输出:
@{UserName=user1; Id=2; State=Active; IdleTime=0; LogonTime=7/28/2016 7:43 AM; ComputerName=computer1} @{UserName=user2; Id=3; State=Active; IdleTime=1:13; LogonTime=7/28/2016 11:31 AM; ComputerName=computer2} @{UserName=user3; Id=4; State=Active; IdleTime=24692+13:29; LogonTime=7/28/2016 11:15 AM; ComputerName=computer3}
我怎样才能让脚本识别ComputerName属性并给出正确的login次数?
我会这样做更多(假设我已经正确地读你的逻辑):
foreach ($computer in $computers) { $list = @() $quser = quser /server:$computer | Select-Object -Skip 1 foreach ($q in $quser) { $item = New-Object -TypeName PSObject $item | Add-Member -MemberType NoteProperty -Name ComputerName -Value $computer $item | Add-Member -MemberType NoteProperty -Name UserName -Value $q.Trim().Replace('\s+',' ').Split(' ')[0] $item | Add-Member -MemberType NoteProperty -Name TimeStamp -Value (Get-Date) $list += $item } $count = ($list | Where-Object -FilterScript { $_.ComputerName -eq $computer }).Count Write-Output "Server $computer has $count users logged on" }