我试图通过powershell发送松弛的消息,但我陷入困境。这是我的剧本。看起来我不能将$ result用于-text。
我要做的是,如果任何可用磁盘空间低于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
}
有什么想法吗?
答案 0 :(得分:4)
您的代码存在的问题是$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
。
[ordered]
应该按照已定义的顺序保留属性。请注意,这需要PowerShell v3或更高版本。
根据您希望它的外观,您可能还希望在ForEach
之后以及在Slack消息中使用它之前对$ Result执行此操作:
$Result = '```' + ($Result | Format-Table | Out-String) + '```'
这应该使邮件格式化为固定宽度代码以表格格式。当然,您可能希望以不同方式修改输出,只是一个建议。