迭代:Powershell 输出 [英] Iteration: Powershell Output

查看:53
本文介绍了迭代:Powershell 输出的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我无法获得正确的 PowerShell 输出.

<块引用><块引用>

输出示例如下:

计算机名 |开车 |尺寸 |免费 |百分比免费
COMP-NAME H:249 11 4.5

<块引用>

计算机名 |开车 |尺寸 |免费 |百分比免费
COMP-NAME C:67 3.2 4.7

计算机名 |开车 |尺寸 |免费 |百分比免费
COMP-NAME H:249 11 4.5

计算机名 |开车 |尺寸 |免费 |百分比免费
COMP-NAME C:67 3.2 4.7

计算机名 |开车 |尺寸 |免费 |百分比免费
COMP-NAME H:249 11 4.5

计算机名 |开车 |尺寸 |免费 |百分比免费
COMP-NAME C:67 3.2 4.7

计算机名 |开车 |尺寸 |免费 |百分比免费
COMP-NAME H:249 11 4.5

计算机名 |开车 |尺寸 |免费 |百分比免费
COMP-NAME C:67 3.2 4.7

下面的脚本向主机查询低于特定阈值的低磁盘并将其发送到相应的电子邮件.脚本运行良好,但我不断收到重复的行.

有人可以帮忙吗?谢谢.

#THE SCRIPT# 设置全局参数$emailTO = "email@email.com"$emailFrom = "LowSpaceNotify@email.com"$smtpServer = "X.X.X.X"$computers = "COMP-NAME"$i = 0# 获取驱动数据$报告 = @(foreach($计算机中的$计算机){$drives = Get-WmiObject -ComputerName $computer Win32_LogicalDisk |Where-Object {$_.DriveType -eq 3}foreach($drive 中的 $drive){# 计算可用空间$obj = 新对象 psobject -Property @{计算机名称 = $计算机驱动器 = $drive.DeviceID大小 = $drive.size/1GB免费 = $drive.freespace/1GBPercentFree = $drive.freespace/$drive.size * 100}# 监控 10% 或更少的可用空间并相应报告如果($obj.PercentFree -lt 10){$obj |格式表 ComputerName,Drive,@{n='Size';e={'{0:N1}' -f $_.Size}},@{n='Free';e={'{0:N1}' -f $_.Free}},@{n='PercentFree';e={'{0:N1}' -f $_.PercentFree}} |外串$i++}}})# 如果脚本发现超过 0 个驱动器的可用空间少于 10%,则发送通知如果 ($i -gt 0){foreach($emailTo 中的 $user){echo "向 $user 发送电子邮件通知"$smtp = 新对象 Net.Mail.SmtpClient($smtpServer)$subject = "磁盘空间不足的服务器"foreach($report 中的 $line){$body += "$line "}Send-MailMessage -to $user -From $emailFrom -SmtpServer $smtpServer -Subject $Subject -Body $body}}

解决方案

[CmdletBinding()]参数 ($计算机名,$EmailTo = "email@email.com",$EmailFrom = "LowSpaceNotify@email.com",$EmailSubject = '低硬盘报告',$SmtpServer = "X.X.X.X")# 获取驱动数据$DATA = foreach($ComputerName 中的 $computer){Get-WmiObject -ComputerName $computer Win32_LogicalDisk |Where-Object { ( $_.DriveType ) -eq 3 -and ( ( $_.freespace/$_.size ) -lt .1 ) } |ForEach-Object -Process {[pscustomobject] @{计算机名称 = $计算机驱动器 = $_.DeviceID大小 = '{0:N1}' -f ( $_.Size/1GB )免费 = '{0:N1}' -f ( $_.freespace/1GB )PercentFree = '{0:N1}' -f ( $_.freespace/$_.size * 100 )}}}如果 ( $DATA ) {$HTMLBody = $Data |ConvertTo-Html -FragmentSend-MailMessage -To $EmailTo -From $EmailFrom -SmtpServer $SmtpServer -Subject $EmailSubject -Body ( $HTMLBody -Join '`n' ) -BodyAsHtml}

I am having trouble getting the right PowerShell output.

An example of the Output is as follows:

ComputerName | Drive | Size | Free | PercentFree
COMP-NAME H: 249 11 4.5

ComputerName | Drive | Size | Free | PercentFree
COMP-NAME C: 67 3.2 4.7

ComputerName | Drive | Size | Free | PercentFree
COMP-NAME H: 249 11 4.5

ComputerName | Drive | Size | Free | PercentFree
COMP-NAME C: 67 3.2 4.7

ComputerName | Drive | Size | Free | PercentFree
COMP-NAME H: 249 11 4.5

ComputerName | Drive | Size | Free | PercentFree
COMP-NAME C: 67 3.2 4.7

ComputerName | Drive | Size | Free | PercentFree
COMP-NAME H: 249 11 4.5

ComputerName | Drive | Size | Free | PercentFree
COMP-NAME C: 67 3.2 4.7

The Script below queries the host for low disk below certain threshold and send it to the appropriate email. The Script runs fine, but I keep getting repeated lines.

Can someone please help? Thank you.

#THE SCRIPT

# Set Global Parameters
$emailTO = "email@email.com"
$emailFrom = "LowSpaceNotify@email.com"
$smtpServer = "X.X.X.X"

$computers = "COMP-NAME"
$i = 0

# Get Drive Data
$report = @(
foreach($computer in $computers)
{
$drives = Get-WmiObject -ComputerName $computer Win32_LogicalDisk | Where-Object {$_.DriveType -eq 3}
     foreach($drive in $drives)
     {
          # Calculate Free Space
          $obj = new-object psobject -Property @{
               ComputerName = $computer
               Drive = $drive.DeviceID
               Size = $drive.size / 1GB
               Free = $drive.freespace / 1GB
               PercentFree = $drive.freespace / $drive.size * 100
               }
          # Monitor for 10% or less in free space and report accordingly
          if ($obj.PercentFree -lt 10) {
               $obj | Format-Table ComputerName,Drive,@{n='Size';e={'{0:N1}' -f $_.Size}},@{n='Free';e={'{0:N1}' -f $_.Free}},@{n='PercentFree';e={'{0:N1}' -f $_.PercentFree}} | Out-String
               $i++
               }
     }

}
)

# Send notification if script finds more than 0 drives with less than 10% free space
if ($i -gt 0)
   {
       foreach ($user in $emailTo)
                {
        echo "Sending Email Notification to $user"
        $smtp = New-Object Net.Mail.SmtpClient($smtpServer)
        $subject = "Server with Low Disk Space"
        foreach ($line in $report)
            {
                $body += "$line "
                }
        Send-MailMessage -to $user -From $emailFrom -SmtpServer $smtpServer -Subject $Subject -Body $body
                }
   } 

解决方案

[CmdletBinding()]
Param (
    $ComputerName,
    $EmailTo = "email@email.com",
    $EmailFrom = "LowSpaceNotify@email.com",
    $EmailSubject = 'Low Hard Disk Report',
    $SmtpServer = "X.X.X.X"
)

# Get Drive Data
$DATA = foreach ( $computer in $ComputerName ) {
    Get-WmiObject -ComputerName $computer Win32_LogicalDisk | Where-Object { ( $_.DriveType ) -eq 3 -and ( ( $_.freespace / $_.size ) -lt .1  ) } | ForEach-Object -Process {
        [pscustomobject] @{
            ComputerName = $computer
            Drive        = $_.DeviceID
            Size         = '{0:N1}' -f ( $_.Size / 1GB )
            Free         = '{0:N1}' -f ( $_.freespace / 1GB )
            PercentFree  = '{0:N1}' -f ( $_.freespace / $_.size * 100 )
        }
     }
}

if ( $DATA ) {
    $HTMLBody = $Data | ConvertTo-Html -Fragment
    Send-MailMessage -To $EmailTo -From $EmailFrom -SmtpServer $SmtpServer -Subject $EmailSubject -Body ( $HTMLBody -Join '`n' ) -BodyAsHtml
}

这篇关于迭代:Powershell 输出的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆