演習 - パラメーター
スクリプトを柔軟にするには、たとえばパラメーターを使用します。そうすれば、ユーザーはスクリプトの実行時に入力を行えます。 この演習では、バックアップ スクリプトを作成し、そこにパラメーターを追加します。
注
この演習は省略してもかまいません。 この演習を完了する場合は、開始する前に Azure サブスクリプションを作成する必要があります。 Azure アカウントを持っていない場合、または現時点で作成したくない場合は、指示を読んで、提示されている情報を理解することができます。
注
このユニットでは、ターミナルとして Azure Cloud Shell を使用します。 Cloud Shell には 、Azure portal または Cloud Shell サインインを使用してアクセスできます。 お使いの PC やラップトップに何もインストールしなくても使用できます。
バックアップ スクリプトを作成する
一般的なタスクは、バックアップを作成 することです。 バックアップとは、通常、アプリなどに属するすべてのファイルを格納した圧縮ファイルになります。 PowerShell をインストールしたときに、このタスクを完了するのに役立つコマンドレット Compress-Archive を取得しています。
Azure Cloud Shell を開き、次の bash コマンドを実行します。
mkdir app cd app touch index.html app.js cd ..これで、 app という名前のディレクトリが作成されます。 PowerShell を使用する準備ができました。
同じターミナルで、
pwshを実行して、PowerShell シェルを開始します (まだ開始されていない場合)。pwsh現在のディレクトリ にBackup.ps1 という名前のスクリプト ファイルを作成し、コード エディターで開きます。
touch Backup.ps1 code Backup.ps1次のコンテンツをファイルに追加し、そのファイルを保存します。 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を呼び出し、次の 3 つのパラメーターを使用します。-
-Pathは、圧縮するファイルのディレクトリです。 -
-CompressionLevelは、ファイルを圧縮する程度を指定します。 -
-DestinationPathは、結果として生成される圧縮ファイルへのパスです。
-
次のスクリプトを実行します。
./Backup.ps1次のように出力されます。
Created backup at ./backup-<current date as YYYY-MM-DD>.zip
スクリプトにパラメーターを追加する
スクリプトにパラメーターを追加すると、ユーザーは実行時に値を指定できます。 バックアップ スクリプトにパラメーターを追加して、ソース ファイルと結果として生成される ZIP ファイルの場所の構成を有効にします。
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')"次のコマンドを実行して、 アプリ ディレクトリの名前を webapp に変更します。
mv app webappアプリ ディレクトリの名前を変更すると、バックアップする必要があるすべてのディレクトリがアプリと呼ばれるわけではないという事実がシミュレートされます。
$Pathの既定値を利用することはできなくなりました。 スクリプトを実行するときに、コンソールから値を指定することが必要になります。バックアップ ファイルを削除し、
<current date as YYYY-MM-DD>を現在の日付に置き換えます。rm backup-<current date as YYYY-MM-DD>.zipこのファイルを削除して、
$Path値が存在しないことを示すメッセージが表示されるかを確認します。 そうならない場合は、既に存在している ZIP ファイルに関するメッセージが表示され、修正しようとしている問題は表示されません。パラメーターを指定せずにスクリプトを実行します。 (スクリプトでは、パラメーターに既定値が使用されます)。
./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パラメーターに値を指定し、スクリプトにパラメーターを追加する利点を見てみましょう。スクリプトを実行してテストします。
./Backup.ps1 -Path './webapp'前に表示されたものと同様のメッセージが表示されます。
Created backup at ./backup-<current date as YYYY-MM-DD>.zipバックアップするディレクトリが ./app と呼ばれない場合や、圧縮ファイルを現在のディレクトリ以外の場所に配置する場合は、パラメーターを使用できるようになりました。
おめでとうございます。 アプリ ディレクトリまたはその他の重要なディレクトリのバックアップを作成するときにいつでも使用できるバックアップ スクリプトを作成しました。 続いて、頻繁に変更する必要があると思われるスクリプトの部分を特定し、静的な値をパラメーター値に置き換えました。 このようにして、要件が変わったときにスクリプト自体を変更する必要はほとんどなくなります (たとえば、アプリの名前が変わる場合や、対象パスを変更する必要がある場合)。