練習 - 參數

已完成

讓指令碼有彈性的其中一種方式是使用參數,讓使用者可以在指令碼執行時提供輸入。 在此練習中,您將建立備份指令碼,並將參數新增至其中。

注意

此練習為選擇性項目。 如果您想要完成此練習,您必須先建立 Azure 訂用帳戶,才能開始。 如果您沒有 Azure 帳戶,或目前不想建立帳戶,您可以閱讀指示,以便瞭解所呈現的資訊。

注意

在本單元中,您會使用 Azure Cloud Shell 作為終端機。 您可以透過 Azure 入口網站Cloud Shell 登入來存取 Cloud Shell。 您無需在 PC 或筆記本電腦上安裝任何東西即可使用它。

建立備份指令碼

常見的工作是建立「備份」。 備份通常是壓縮檔案,可儲存所有屬於像是應用程式的檔案。 當您安裝 PowerShell 時,您會取得 Cmdlet Compress-Archive,其可協助您完成這項工作。

  1. 開啟 Azure Cloud Shell 並執行下列 bash 命令:

    mkdir app
    cd app
    touch index.html app.js
    cd ..
    

    您現在應該有一個名為「應用程式」的目錄。 您已經準備好使用 PowerShell。

  2. 在相同的終端機中,請透過執行 pwsh 啟動 PowerShell shell (如果尚未啟動):

    pwsh
    
  3. 在目前目錄中建立名為 Backup.ps1 的腳本檔案,並在程式代碼編輯器中開啟它。

    touch Backup.ps1
    code Backup.ps1
    
  4. 將此內容新增至檔案並儲存。 您可以在 Windows 和 Linux 上使用 CTRL-S ,或在 Mac 上使用 CMD+S 來儲存。

    $date = Get-Date -format "yyyy-MM-dd"
    Compress-Archive -Path './app' -CompressionLevel 'Fastest' -DestinationPath "./backup-$date"
    Write-Host "Created backup at $('./backup-' + $date + '.zip')"
    

    指令碼會叫用 Compress-Archive 並使用三個參數:

    • -Path 是您想要壓縮檔案的目錄。
    • -CompressionLevel 指定要壓縮檔案的大小。
    • -DestinationPath 這是所產生壓縮檔案的路徑。
  5. 執行指令碼:

    ./Backup.ps1 
    

    您應該會看見下列輸出:

    Created backup at ./backup-<current date as YYYY-MM-DD>.zip
    

將參數新增至您的指令碼

如果您將參數新增至指令碼,使用者就可以在其執行時提供值。 您會將參數新增至您的備份指令碼,以啟用來源檔案的位置設定和產生的 ZIP 檔案。

  1. 將下列程式碼新增至「Backup.ps1」檔案頂端。

    注意

    如果未開啟編輯器,請使用 code Backup.ps1 命令來開啟檔案。

    Param(
      [string]$Path = './app',
      [string]$DestinationPath = './'
    )
    

    您已在指令碼中新增兩個參數:$Path$DestinationPath。 您也已提供預設值,因此使用者不需要提供這些值。 使用者可以在需要時覆寫預設值。 您需要調整指令碼來使用這些參數。 您接下來會繼續這麼做。

  2. 將檔案中的程式碼變更來使用參數,然後儲存。 「Backup.ps1」現在看起來應該像這樣:

    Param(
      [string]$Path = './app',
      [string]$DestinationPath = './'
    )
    $date = Get-Date -format "yyyy-MM-dd"
    Compress-Archive -Path $Path -CompressionLevel 'Fastest' -DestinationPath "$($DestinationPath + 'backup-' + $date)"
    Write-Host "Created backup at $($DestinationPath + 'backup-' + $date + '.zip')"
    
  3. 藉由執行下列命令將您的「應用程式」目錄重新命名為「webapp」

    mv app webapp
    

    重新命名「應用程式」目錄會模擬不需要備份的所有目錄都稱為「應用程式」的事實。

    您無法再依賴 $Path 的預設值。 當您執行指令碼時,您必須透過主控台提供值。

  4. 移除備份檔案,並將 <current date as YYYY-MM-DD> 取代為目前的日期:

    rm backup-<current date as YYYY-MM-DD>.zip
    

    您要移除此檔案,以確定您收到的訊息指出您的 $Path 值不存在。 否則,您會收到有關 ZIP 檔案已存在的訊息,而我們要修正的問題則會隱藏起來。

  5. 在不提供參數的情況下執行您的指令碼。 (指令碼會使用參數的預設值。)

    ./Backup.ps1
    

    您將會看到與此項目類似的錯誤訊息:

    Line |
       8 |  Compress-Archive -Path $Path -CompressionLevel 'Fastest' -Destination …
         |  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         | The path './app' either does not exist or is not a valid file system path.
    Created backup at ./backup-<current date as YYYY-MM-DD>.zip
    

    指令碼會通知您找不到目錄「 /app」。 現在是時候提供值給 $Path 參數,並查看將參數新增至指令碼的優點。

  6. 執行指令碼以測試您的指令碼:

    ./Backup.ps1 -Path './webapp'
    

    您會看到類似稍早收到的訊息:

    Created backup at ./backup-<current date as YYYY-MM-DD>.zip
    

    如果您想要備份的目錄不叫「 /app」,則您現在可以使用參數,或如果您想要將壓縮的檔案放在目前的目錄以外的地方。

恭喜! 您所建立的備份指令碼,可以在您想要建立應用程式目錄或任何其他重要目錄的備份時使用。 接著,您可以識別出可能需要經常變更並以參數值取代靜態值的部分指令碼。 如此一來,當您的需求變更時 (例如,如果應用程式的名稱變更,或您需要變更目的地路徑),您很可能不需要變更指令碼本身。