У меня есть следующий рабочий код, который используется для создания кластера 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 ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [‹* == >>] Исключение: Объект ввода не может быть привязан к каким-либо параметрам команды либо потому, что команда не принимает ввод конвейерной линии, либо ввод и его свойства не соответствуют ни одному из параметров, принимающих ввод конвейера.
Хорошо, поэтому мне нужно изменить мою функцию, чтобы она принимала ввод конвейера. Я прочитал Написать функции PowerShell, которые принимают конвейерный ввод, и на основе этого я переписал свою функцию прокси на:
function Set-AzureHDInsightDefaultStorageProxy{
[CmdletBinding()]
Param(
$StorageAccountName,
$StorageAccountKey,
$StorageContainerName
)
Set-AzureHDInsightDefaultStorage -Config $input -StorageAccountName $StorageAccountName -StorageAccountKey $StorageAccountKey -StorageContainerName $StorageContainerName
}
но это не удалось с той же ошибкой.
Ясно, что отсутствие навыков / знаний Powershell подводит меня к этому, поэтому я надеюсь, что кто-то там скажет мне, как переписать мою функцию, чтобы успешно принимать и использовать ввод конвейера.
Вот определение командлета, для которого я пишу функцию прокси: Set-AzureHDInsightDefaultStorage. Я заметил, что параметр -Config настроен так, чтобы разрешить ввод в конвейер: , так что, думаю, мне нужно укажите то же самое в моей функции прокси, но я не знаю, как это сделать.