2015-04-16 2 views
1

Я изучаю способ, которым я могу использовать процессор и память с моих серверов, но я не получаю вывод из этого сценария. Есть ли что-то не так с тем, как Write-Host настроить здесь? Любые справкуPowershell: нет вывода со сценарием

Function Get-ADtop { 
[CmdletBinding()] 
param(
    [String]$ComputerName, 
    [String]$Sort = "none", 
    [String]$BaseDN = "OU=systems,DC=domain,DC=com", # Edit Default Base DN 
    [String]$SampleTime = 2 
) 
If ($ComputerName) { 
    $Computers = $ComputerName 
} else { 
    $Computers = Get-ADComputer -Filter * -Properties * -SearchBase $BaseDN -EA SilentlyContinue | % {$_.Name} 
} 
$DataSet = @() 
$Targets = @() 
ForEach ($Comp in $Computers) { 
    If (Test-Connection -ComputerName $Comp -Count 1 -Quiet -TimeToLive 1 -EA SilentlyContinue) { 
     If (!(Get-WmiObject -ComputerName $Comp win32_OperatingSystem -EA SilentlyContinue)) { break } 
     $Targets += $Comp 
    } 
} 
$CompCount = $Computers | Measure-Object | % {$_.Count} 
$DeadCount = $CompCount - ($Targets | Measure-Object | % {$_.Count}) 
If (!($DeadCount -eq 0)) { 
    Write-Host "`n$DeadCount unavailable computers removed" 
} 
Write-Host "`nGathering realtime CPU/MEM/DISK Usage data from $CompCount computers..." 
ForEach ($Comp in $Targets) { 
    $proc = (Get-WmiObject -ComputerName $Comp -class win32_processor -EA SilentlyContinue | Measure-Object -property LoadPercentage -Average | Select Average | % {$_.Average/100}).ToString("P") 
    $mem = Get-WmiObject -ComputerName $Comp win32_OperatingSystem -EA SilentlyContinue 
    $mem = (($mem.TotalVisibleMemorySize - $mem.FreePhysicalMemory)/$mem.TotalVisibleMemorySize).ToString("P") 
    $disk = Get-WmiObject -ComputerName $Comp -class Win32_LogicalDisk -filter "DriveType=3" -EA SilentlyContinue 
    $disk = (($disk.Size - $disk.FreeSpace)/$disk.Size).ToString("P") 
    $Info = [pscustomobject]@{ 
     'Computer' = $Comp 
     'CPU Usage' = $proc 
     'MEM Usage' = $mem 
     'Disk Usage' = $disk 
    } 
    $DataSet += Add-Member -InputObject $Info -TypeName Computers.CPU.Usage -PassThru  
} 
Switch ($Sort) { 
    "none" { $DataSet } 
    "CPU" { $DataSet | Sort-Object -Property "CPU Usage" -Descending } 
    "MEM" { $DataSet | Sort-Object -Property "MEM Usage" -Descending } 
    "DISK" { $DataSet | Sort-Object -Property "DISK Usage" -Descending } 
} 
} 

ответ

1

Ваш скрипт не работает, как в системе с более чем одним фиксированным диском. Чтобы исправить это, я изменил вашу строку 33 для повторения каждого диска. Эта ошибка была завершающей ошибкой, поэтому PowerShell раньше не выдавал вам результат.

Кажется, что сейчас нет проблем.

$disk = $disk | % {($($_.Size) - $($_.FreeSpace))/$($d_.Size).ToString("P")} 

>Gathering realtime CPU/MEM/DISK Usage data from 1 computers... 

Computer CPU Usage MEM Usage Disk Usage   
-------- --------- --------- ----------   
localhost 14.00 % 27.64 % {62.91 %, 34.90 %} 
+1

Могу ли я спросить, как вы выполняете сценарий? – EdTrud

+0

Скопировано и вложено в ISE. В моей системе, кстати, у меня есть два жестких диска. – FoxDeploy

+0

Вы все еще не получаете какой-либо результат после внесения изменений, которые я вам показал? Если это так, начните просто, запустив это против localhost, как я сделал «Get-ADtop -ComputerName localhost». – FoxDeploy

Смежные вопросы