HDInsight クラスターを作成するために使用される次の作業コードがあります。
New-AzureHDInsightClusterConfig -ClusterSizeInNodes $ClusterNodes `
-VirtualNetworkId ($VNet.Id) `
-SubnetName $subnetName `
-ClusterType $ClusterType | `
Set-AzureHDInsightDefaultStorage -StorageAccountName "$StorageAccountName.blob.core.windows.net" `
-StorageAccountKey $StorageAccountKey `
-StorageContainerName $StorageContainerName | `
New-AzureHDInsightCluster -Credential $ClusterCreds `
-Location $Location `
-Name $ClusterName `
-Version $HDInsightVersion
パイプラインを使用していることに注意してください。ここで、このコードをテストするために( Pesterを使用して) 自動化されたテストを書きたいと思います。そのために、私はプロキシ関数と呼ばれるものでコマンドレット呼び出しをラップし、スプラッティングを使用してパラメーター値を渡します。これにより、テスト目的でそれらを簡単にモックできます。次に例を示します。
function Set-AzureHDInsightDefaultStorageProxy{
<#
.SYNOPSIS
Wrap Azure cmdlet Set-AzureHDInsightDefaultStorage thus enabling mocking
.DESCRIPTION
Wrap Azure cmdlet Set-AzureHDInsightDefaultStorage thus enabling mocking
#>
[CmdletBinding()]
Param(
$StorageAccountName,
$StorageAccountKey,
$StorageContainerName
)
Set-AzureHDInsightDefaultStorage @PSBoundParameters
}
New-AzureHDInsightClusterConfigProxy -ClusterSizeInNodes $ClusterNodes `
-VirtualNetworkId ($VNet.Id) `
-SubnetName $subnetName `
-ClusterType $ClusterType | `
Set-AzureHDInsightDefaultStorageProxy -StorageAccountName "$StorageAccountName.blob.core.windows.net" `
-StorageAccountKey $StorageAccountKey `
-StorageContainerName $StorageContainerName | `
New-AzureHDInsightClusterProxy -Credential $ClusterCreds `
-Location $Location `
-Name $ClusterName `
-Version $HDInsightVersion
このコードを実行しようとすると、エラーが発生します。
Set-AzureHDInsightDefaultStorageProxy -StorageAccountName ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~ [<<==>>] 例外:コマンドがパイプライン入力を使用しないか、入力とそのプロパティがパイプライン入力を使用するパラメーターのいずれとも一致しないため、入力オブジェクトをコマンドのパラメーターにバインドできません。
では、パイプライン入力を受け入れるように関数を変更する必要があります。Write PowerShell Functions That Accept Pipelined Input を読み、それに基づいてプロキシ関数を次のように書き直しました。
function Set-AzureHDInsightDefaultStorageProxy{
[CmdletBinding()]
Param(
$StorageAccountName,
$StorageAccountKey,
$StorageContainerName
)
Set-AzureHDInsightDefaultStorage -Config $input -StorageAccountName $StorageAccountName -StorageAccountKey $StorageAccountKey -StorageContainerName $StorageContainerName
}
しかし、それは同じエラーで失敗しました。
明らかに、Powershell のスキル/知識が不足しているため、ここで失望しているので、関数を書き直してパイプライン入力を正常に受け入れて使用する方法を誰かが教えてくれることを願っています。
プロキシ関数を記述しているコマンドレットの定義は次のとおりです: Set-AzureHDInsightDefaultStorage。-Config パラメーターがパイプライン入力を許可するように設定されていることに気付きました。
そのため、プロキシ関数で同じことを指定する必要があると思いますが、その方法がわかりません。