Рабочая книга Powershell [Invoke-ASCmd], исключение FileNotFoundException для файла xmla - PullRequest
2 голосов
/ 13 июня 2019

Я пытаюсь создать сценарий, который создает автоматические разделы для SSAS через Powershell Runbook, но всякий раз, когда я пытаюсь прочитать в файле xmla, я получаю следующую ошибку: enter image description here

enter image description here

Мой код, который вызывает это, выглядит следующим образом:

$StorageAccount = Get-AzureRmStorageAccount -ResourceGroupName $ResourceGroupName -Name $StorageAccountName

$blob = Get-AzureStorageBlob -Context $StorageAccount.Context -Container "Database name" -Blob "CreateNewPartition.xmla"

$file = $blob.ICloudBlob.DownloadText()
Invoke-ASCmd `
    -Database $AnalysisServiceDatabase `
    -InputFile $file `
    -server $AnalysisServiceServer 

При использовании следующего кода:

$memStream = New-Object System.IO.MemoryStream
$blob.ICloudBlob.DownloadToStream($memStream)
$readStream = New-Object System.IO.StreamReader($memStream, [System.Text.Encoding]::Unicode)
$memStream.Position = 0
$file = ($readStream.ReadToEnd() -replace "`0",'' | ConvertFrom-Json)

Я получаю эту ошибку: enter image description here

А при попытке этого кода:

$byteArray = New-Object Byte[] $blob.Length
$file = $blob.ICloudBlob.DownloadToByteArray($byteArray, 0)

Я получаю эту ошибку: enter image description here

1 Ответ

2 голосов
/ 13 июня 2019

Легко исправить.

В первом примере вы правильно читаете содержимое файла из BLOB-объекта. Но -InputFile ожидает путь к файлу (например, C:\arst.xmla) и не может обрабатывать необработанное содержимое файла .xmla.

Вместо этого используйте параметр -Query, чтобы передать содержимое файла в Invoke-ASCmd например ::

...

$query = $blob.ICloudBlob.DownloadText()
Invoke-ASCmd `
    -Database $AnalysisServiceDatabase `
    -Query $query `
    -server $AnalysisServiceServer 
...