2015-05-09 27 views
0

我試圖設置一個powershell腳本,它在服務器被修改之前和之後收集有關服務器C盤的數據。從那裏通過電子郵件將信息發送給我。這是我的第一個PowerShell腳本,它超出了我所能想象的範圍。它一直運行到電子郵件的地步。我仍然收到一封電子郵件,但沒有數據。我認爲這與通過散列表$BeforeScript$AfterScript有關。下面是代碼 - 我已經工作的功能。散列表在傳遞到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盤進行清洗前後。但事實並非如此。任何幫助,將不勝感激。

回答

0

丟失括號(和逗號) - 這不是你如何調用PowerShell函數。即不叫

Send_Email ($BeforeScript, $AfterScript) 

而是

Send_Email $BeforeScript $AfterScript