Windows 指令碼與操作方法

複製本節中的指令碼來建立 input.propertiesskip_update.ps1

  1. 複製以下指令碼來建立 input.properties
    username=exampleAdmin
    password=examplePassword.epw
    url=exampleURL
    updatemonths=02,05,08,11
    
  2. 指定參數值來更新 input.properties

    Table 3-11 input.properties 參數

    參數 描述
    username 服務管理員。的使用者名稱
    password 服務管理員的密碼,或加密密碼檔案所在的名稱和位置。
    url 要設定非每月更新節奏之環境的 URL。
    updatemonths Oracle Enterprise Performance Management Cloud 更新必須套用至 url 參數所識別的環境時使用的月份逗號分隔清單。例如,updatemonths=02,05,08,11

    月份必須指定為兩位數:01 表示 1 月,12 表示 12 月。請務必在 1 月至 9 月包含前面的 0。這個指令碼嘗試針對 updatemonths 參數值中未包含的月份執行skipUpdate 命令。例如,如果您指定 updatemonths=02,05,08,11,指令碼會嘗試為 1 月、3 月、4 月、6 月、7 月、9 月、10 月和 12 月設定略過更新標誌,只針對 2 月、5 月、8 月和 11 月進行更新。

  3. 複製下列指令碼來建立 skip_updates.ps1
    # Skip Update PowerShell script
    
    $inputproperties = ConvertFrom-StringData(Get-Content ./input.properties -raw)
    $username="$($inputproperties.username)"
    $password="$($inputproperties.password)"
    $url="$($inputproperties.url)"
    $updatemonths="$($inputproperties.updatemonths)"
    
    $monthsarr = ("01","02","03","04","05","06","07","08","09","10","11","12")
    $global:monthsarrfromcurrent = @()
    $global:yearsarrfromcurrent = @()
    $updatemonthsarr = $updatemonths.Split(",")
    $currentyear=Get-Date -Format yy
    $currentmonth=Get-Date -Format MM
    $nextyear=[int]$currentyear+1
    
    function populateFromCurrentArrays() {
        $startposition = 0
    
        for ($i = 0; $i -le ($monthsarr.length - 1); $i++) {
            if (${currentmonth} -eq $monthsarr[$i]) {
                $startposition=$i
                break
            }
        }
    
        for ($i = 0; $i -le ($monthsarr.length - 1); $i++) {
            if (${i} -ge ${startposition}) {
                $global:monthsarrfromcurrent += $monthsarr[$i]
                $global:yearsarrfromcurrent += $currentyear
            }
        }
    
        for ($i = 0; $i -le ($monthsarr.length - 1); $i++) {
            if (${i} -lt ${startposition}) {
                $global:monthsarrfromcurrent += $monthsarr[$i]
                $global:yearsarrfromcurrent += $nextyear
            }
        }
    }
    
    function skipUpdateAdd($yearnumber, $monthnumber) {
        echo "Running: epmautomate.bat skipUpdate add version=${yearnumber}.${monthnumber} comment=`"adding skipUpdate`""
        epmautomate skipUpdate add version=${yearnumber}.${monthnumber} comment="adding skipUpdate"
    }
    
    function processSkipUpdates() {
        $addcount = 0
    
        echo "Running: epmautomate.bat login ${username} ${password} ${url}"
        epmautomate login ${username} ${password} ${url}
        echo "Running: epmautomate.bat skipUpdate remove"
        epmautomate skipUpdate remove
    
        for ($i = 0; $i -le ($global:monthsarrfromcurrent.length - 1); $i++) {
            $match = 1
    
            if (${addcount} -eq 2) {
                echo "Two skip update add calls have been made. No more will be attempted."
                break
            }
    
            for ($j = 0; $j -le ($updatemonthsarr.length - 1); $j++) {
                if ($global:monthsarrfromcurrent[$i] -eq $updatemonthsarr[$j]) {
                    $match = 0
                    break
                }
            }
    
            if (${match} -eq 1) {
                skipUpdateAdd $global:yearsarrfromcurrent[$i] $global:monthsarrfromcurrent[$i]
                $addcount += 1
            }
        }
    
        echo "Running: epmautomate.bat skipUpdate list"
        epmautomate skipUpdate list
        echo "Running: epmautomate.bat logout"
        epmautomate logout
    }
    
    function compareUpdateMonths($thismonth, $nextmonth) {
        $nextmonthorig=${nextmonth}
    
        if (${nextmonth} -lt ${thismonth}) {
            $nextmonth+=12
        }
    
        $monthdiff = $nextmonth - $thismonth
    
        if (${monthdiff} -gt 3) {
            echo "There are more than 2 months skipped from month ${thismonth} to month ${nextmonthorig}. Please correct updatemonths in input.properties so that there are not more than two months skipped between each update month. Exiting."
            exit 1
        }
    }
    
    function validateUpdateMonths() {
        for ($i = 0; $i -le ($updatemonthsarr.length - 1); $i++) {
            $nextint = $i + 1
            $thisupdatemonth = $updatemonthsarr[$i]
            $thisupdatemonthint=[int]$thisupdatemonth
            $nextupdatemonth=$updatemonthsarr[$nextint]
            $nextupdatemonthint=[int]$nextupdatemonth
    
            if (${nextupdatemonth} -eq "") {
                $nextupdatemonth=$updatemonthsarr[0]
                $nextupdatemonthint=[int]$nextupdatemonth
            }
    
            compareUpdateMonths $thisupdatemonthint $nextupdatemonthint
        }
    }
    
    validateUpdateMonths
    populateFromCurrentArrays
    processSkipUpdates