gpt4 book ai didi

powershell - 使用Powershell发送松弛消息和结果

转载 作者:行者123 更新时间:2023-12-03 00:35:00 25 4
gpt4 key购买 nike

我试图通过Powershell发送松弛消息,但被卡住了。这是我的剧本。看来我不能对文本使用$ result。

我要执行的操作是,如果有可用磁盘空间低于15%或10%的警报,则将警报发送到备用信道。

我正在使用Powershell Gallery中的PSSlack。

$ErrorActionPreference = "Continue"; 
$percentCritcal = 15;

$computers = Get-Content "D:\Disk_Usage\ServerList.txt"
$result = foreach($computer in $computers)
{
$disks = Get-WmiObject -ComputerName $computer -Class Win32_LogicalDisk -Filter "DriveType = 3"
$computer = $computer.ToUpper()
foreach($disk in $disks)
{
$Size = $disk.Size
$Freespace = $disk.FreeSpace
$sizeGB = [Math]::Round($Size / 1073741824, 2)
$freeSpaceGB = [Math]::Round($Freespace / 1073741824, 2)
$percentFree = [Math]::Round(($freespace / $size) * 100, 2);

$ResultHash = [ordered]@{
Computer = $computer
Drive = $disk.DeviceID
SizeGB = $sizeGB
UsedGB = $sizeGB - $freeSpaceGB
FreeGB = $freeSpaceGB
PercFree = $percentFree
}

New-Object -TypeName PSObject -Property $ResultHash
}
}

$Result = $Result | Where-Object {$_.PercFree -lt 10}

if ($Result)
{
$token = 'xxxxxxxxxxx'
$Result = $Result | Format-Table | Out-String

New-SlackMessageAttachment -Color $_PSSlackColorMap.red `
-Title 'Disk Free Space Alert' `
-Text $result `
-Fallback 'Bad boy' |

New-SlackMessage -Channel '#it-test' `
-IconEmoji :bomo: `
-AsUser `
-Username 'BOT' |

Send-SlackMessage -Token $token
}

结果是这样的,它将相同的驱动器重复几次 enter image description here

任何的想法?

最佳答案

您的代码的问题在于$Result永远不会填充任何东西。最简单的解决方法是在ForEach循环中创建一个对象,然后该对象将填充$ Result。

例如:

$result = foreach($computer in $computers) 
{
$disks = Get-WmiObject -ComputerName $computer -Class Win32_LogicalDisk -Filter "DriveType = 3"
$computer = $computer.ToUpper()
foreach($disk in $disks)
{
$Size = $disk.Size
$Freespace = $disk.FreeSpace
$sizeGB = [Math]::Round($Size / 1073741824, 2)
$freeSpaceGB = [Math]::Round($Freespace / 1073741824, 2)

$ResultHash = [ordered]@{
Computer = $computer
deviceID = $disk.DeviceID
volName = $disk.VolumeName
percentFree = [Math]::Round(($Freespace / $Size) * 100, 2)
sizeGB = $sizeGB
freeSpaceGB = $freeSpaceGB
usedSpaceGB = $sizeGB - $freeSpaceGB
}

New-Object -TypeName PSObject -Property $ResultHash
}
}

说明:

上面的代码采用了您现有的变量,并将它们变成了哈希表 @{ }的属性。然后,此哈希表用于使用 New-Object创建对象的属性。

因为New-Object本身就在一行上,所以其结果进入管道,该管道最终输出到$ Result,因为这是您发送 ForEach的结果的地方。

Hashtable前面的 [ordered]应该按定义的顺序保留属性。请注意,这需要PowerShell v3或更高版本。

根据您想要的外观,您可能还希望在 ForEach之后和在Slack消息中使用它之前对$ Result进行此操作:
$Result = '```' + ($Result | Format-Table | Out-String) + '```'

这应该使消息以表格格式格式化为固定宽度代码。当然,您可能希望对输出进行不同的修改,这只是一个建议。

关于powershell - 使用Powershell发送松弛消息和结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43900559/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com