Я пытаюсь настроить сценарий powershell, который собирает данные о диске C сервера, прежде чем он будет изменен и после. Оттуда отправьте эту информацию мне по электронной почте. Это мой первый сценарий powershell, и он выходит за рамки того, что я могу понять. Он работает до адреса электронной почты. Я все еще получаю электронное письмо, но в нем нет данных. Я думаю, что это как-то связано с передачей хэш-таблиц $BeforeScript
и $AfterScript
. Ниже приведены кодовые функции, которые у меня уже есть.Hashtable empty при передаче функции в powershell
# Retrieve current disk size, free space, and percent free.
Function Disk_Info{
$DiskDrive = Get-WmiObject Win32_LogicalDisk -Filter "DeviceID='C:'" | Select-Object Size,FreeSpace
[hashtable]$Return = @{}
$Return.DiskSize = ([math]::truncate($DiskDrive.size/10000000)/100)
if ($DiskDrive.size -gt 0) {
$Return.DiskFreeSpace = ([math]::truncate($DiskDrive.freespace/10000000)/100)
$Return.DiskPercentFree = [Math]::round(($Return.DiskFreeSpace/$Return.DiskSize) * 100)
}
else {
$Return.DiskFreeSpace = 0
$Return.DiskPercentFree = 0
}
Return $Return
}
# Send an message to the NOC Oncall email about the server having > 5% free space
Function Send_Email ($BS, $AS){
$Message = @{
From = "[email protected]"
To = "[email protected]"
Subject = "$($Server," C: is at ",$AS.DiskPercentFree,"% Free Space.")"
Body = "$("The Clean C: Drive Script was unable to raise ",$Server," C: drive above 5%.<br><br>"
"C: Size: ", $BS.DiskSize, "GBs<br>"
"Before Script: ", $BS.DiskFreeSpace, "GB (",$BS.DiskPercentFree,"%) free space.<br>"
"After Script: ", $AS.DiskFreeSpace, "GB (",$AS.DiskPercentFree,"%) free space.<br><br>"
"If this is during work hours, contact this severs owner: ",$Owner, ".<br>"
"If this is after hours please contact the ST6 Oncall about this issue.<br><br>"
"<a href = http://teams/sites/ta/NOC/TriForce%20Wiki/Low%20Disk%20Space%20Issues.aspx>Wiki C: Free Space details</a>.<br>"
"<a href = http://teams/sites/ta/NOC/TriForce%20Wiki/Server%20Specific%20Actions.aspx>Wiki Server Specific details</a>.<br>"
)"
SMTPServer = "Something.something.com"
}
# How to add extra items to message
# If($cc){$Message.Add("CC",$cc)}
# If($Attachment){$Message.Add("Attachment",$Attachment)}
#Try to get the server owner from the registry
try{
$Reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine',$env:COMPUTERNAME)
$RegKey= $Reg.OpenSubKey("SOFTWARE\\QL")
$Owner = $RegKey.GetValue("Managed by")
}
catch{
$Owner = "Server owner not specified"
}
$Server = $env:COMPUTERNAME
Send-MailMessage @Message -BodyAsHtml -Priority High
}
$BeforeScript = Disk_Info #Get disk info pre script
#Sweep_C_Drive #Delete unnecessary files from C Drive
$AfterScript = Disk_Info #Get disk info post script
If ($AfterScript.DiskPercentFree -lt 6){
Send_Email ($BeforeScript, $AfterScript)
}
Это электронная почта я получаю после скрипта работает:
The Clean C: Drive Script was unable to raise C: drive above 5%.
C: Size: System.Object[] GBs
Before Script: System.Object[] GB (System.Object[] %) free space.
After Script: GB (%) free space.
If this is during work hours, contact this severs owner: .
If this is after hours please contact the ST6 Oncall about this issue.
Wiki C: Free Space details.
Wiki Server Specific details.
электронной почты должен указать размер свободного пространства (% свободного пространства) до и затем после того, как C Drive был очищен , Но это не так. Любая помощь будет оценена по достоинству.