2017-09-15 13 views
-1

Salut Quelqu'un peut-il m'aider à obtenir la sortie désirée.Script Powershell pour obtenir l'utilisation du processeur, espace disque, MemoryUsage et les utilisateurs

GC D:\ServerList.txt | % { 

$xl = New-Object -ComObject "Excel.Application" 
$xl.Visible = $true 
$xl.DisplayAlerts = $false #for debugging, no prompts to save, etc. 
$ConvertToGB = (1024 * 1024 * 1024) 

$wkbk = $xl.Workbooks.Add() 
$sheet = $wkbk.WorkSheets.Item(1) 
$sheet.Name = "Transposed" 
$Comp = $_ 
If (Test-Connection $Comp -Quiet) { 
    $Luser = (Get-WmiObject -class win32_process -Filter "Name='Explorer.exe'" -ComputerName $Comp | 
      % {$_.GetOwner().User} | Sort-Object -Unique) -join "," 
    $Mem = GWMI -Class win32_operatingsystem -computername $COMP 
    New-Object PSObject -Property @{ 
     Server   = $Comp 
     "CPU_Usage" = "$((GWMI -ComputerName $COMP win32_processor | Measure-Object -property LoadPercentage -Average).Average)" 
     "Memory_Usage" = "$("{0:N2}" -f ((($Mem.TotalVisibleMemorySize - $Mem.FreePhysicalMemory)*100)/ $Mem.TotalVisibleMemorySize)) %" 
     "DiskSpace" = "$("{0:N2}" -f (Get-WmiObject -Class win32_logicaldisk -ComputerName $COMP -Filter "DriveType = 3"| Select-Object "Size","FreeSpace"))" 
     #$Comp = ($disk.Size/$ConvertToGB),($disk.FreeSpace/$ConvertToGB) 
     "logged_Users" = $Luser 
    } 
} 
Else { 

} 
$results = Get-Service -Name *bits*| Select Server #,"CPU usage","Memory usage","DiskFreeSpace","logged Users" 

$column = 1 
$row = 1 
foreach ($psRow in $results) { 
    foreach ($item in $psRow.PSObject.Properties) { 
     $sheet.Cells.Item($row, $column) = $item.Name 
     $column++ 
     #$sheet.Cells.Item($row, $column) = $item."CPU","Memory_Usage","DiskSpace","logged_Users" 
     $row++ 
     $column-- 
    } 

} 

}

sortie que je suis en train de:

Memory_Usage : 68.76 % 
CPU_Usage : 12 
Server  : DIN35002781 
logged_Users : aanshuma 
DiskSpace : @{Size=250051817472; FreeSpace=164924461056}** 

Mais la sortie désirée que je veux est:

DiskSpace,127696629760,46401740800 
Server,LIN35006176 
Memory_Usage,51.22 
logged_Users,Boss 
CPU_Usage,14 

Répondre

0

Je commencerais par enregistrer le PSObject dans une variable et n'utilisez pas de chaîne sur DiskSpace.

$obj =New-Object PSObject -Property @{ 
    Server   = $Comp 
    "CPU_Usage" = "$((GWMI -ComputerName $COMP win32_processor | Measure-Object -property LoadPercentage -Average).Average)" 
    "Memory_Usage" = "$("{0:N2}" -f ((($Mem.TotalVisibleMemorySize - $Mem.FreePhysicalMemory)*100)/ $Mem.TotalVisibleMemorySize)) %" 
    "DiskSpace" = Get-WmiObject -Class win32_logicaldisk -ComputerName $COMP -Filter "DriveType = 3"| Select-Object "Size","FreeSpace" 
    #$Comp = ($disk.Size/$ConvertToGB),($disk.FreeSpace/$ConvertToGB) 
    "logged_Users" = $Luser 
} 

Pour obtenir votre sortie désirée vous pouvez utiliser:

Write-Output "DiskSpace, $($obj.DiskSpace.Size), $($obj.DiskSpace.FreeSpace)" 
Write-Output "Server, $($obj.Server)" 
Write-Output "Memory_Usage, $($obj.Memory_Usage)" 
Write-Output "logged_Users, $($obj.logged_Users)" 
Write-Output "CPU_Usage, $($obj.CPU_Usage)" 

Si vous voulez un fichier CSV, vous pouvez utiliser:

$obj | ConvertTo-Csv 

Mais alors je séparer FreeSpace et taille en deux propriétés du PSObject.

+0

Merci Olaf Cela fonctionne très bien et j'obtiens la sortie désirée. Merci beaucoup –