簡體   English   中英

在Powershell中傳遞給函數時,哈希表為空

[英]Hashtable empty when passing to function in powershell

我試圖設置一個Powershell腳本,該腳本在修改之前和之后收集有關服務器C驅動器的數據。 從那里通過電子郵件將這些信息發送給我。 這是我的第一個powershell腳本,它超出了我的理解范圍。 直到電子郵件結束為止。 我仍然收到電子郵件,但其中沒有數據。 我認為這與傳遞哈希表$BeforeScript$AfterScript 下面是代碼-我已經使用的功能。

# 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 =       "DriveSpaceAlert@MyPlace.com"
        To =         "Keith@MyPlace.com"
        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驅動器之前和之后的可用空間大小(可用空間的百分比)。 但事實並非如此。 任何幫助,將不勝感激。

丟失方括號(和逗號)-這不是調用PowerShell功能的方式。 即不打電話

Send_Email ( $BeforeScript, $AfterScript)

反而

Send_Email $BeforeScript $AfterScript

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM