Скрипт Powershell для AzCopy с файлом настроек - PullRequest
0 голосов
/ 09 июня 2018

Я хочу автоматизировать загрузку с виртуальной машины Azure на мою локальную машину с помощью AzCopy.Вручную я не получил никаких проблем вообще.Мне даже удалось сделать автоматический скрипт для этого.Тем не менее, теперь мой сценарий не работает и раньше работал ... Может быть, я что-то пропустил или, может быть, мне повезло.

Итак, вот что у меня есть: settings.txt, который содержит 3 параметра, таких как папка вывода, источник (URL-адрес хранилища Azure) и ключ источника из хранилища Azure.myscript.ps1, который в основном получает содержимое из settings.txt и запускает AzCopy

Моя проблема связана с исходным ключом из Azure, если ключ не находится непосредственно в myscript.ps1, он не работает, и я получаюошибка.

Мой скрипт, который работает:

    Get-Content "C:\ProgramData\NAME\SOFTWARE\Azure\settings\settings.txt" | foreach-object -begin {$h=@{}} -process { $k = [regex]::split($_,'='); if(($k[0].CompareTo("") -ne 0) -and ($k[0].StartsWith("[") -ne $True)) { $h.Add($k[0], $k[1]) } }

$filename="LOG_" + (Get-Date -Format "yyyy-MM-dd-HH-mm-ss") + ".log"
$log_path="C:\ProgramData\NAME\SOFTWARE\Azure\logs"
$Source=$h.Source
$Key="BLABLABLAMYWEIRDKEY"
$output_path = $h.Output

cd "C:\Program Files (x86)\Microsoft SDKs\Azure\AzCopy"

.\AzCopy.exe /Source:$Source /Dest:$output_path /SourceKey:$Key /Y /S /V /XO /XN >$log_path\$filename

Этот скрипт работает с этим settings.txt:

[SETTINGS]
Output="C:\Output\DATA\"
Source="https://blablabla.file.core.windows.net/blabla/"
Key="BLABLABLAMYWEIRDKEY"

Итак, я попытался сделать это:

    Get-Content "C:\ProgramData\NAME\SOFTWARE\Azure\settings\settings.txt" | foreach-object -begin {$h=@{}} -process { $k = [regex]::split($_,'='); if(($k[0].CompareTo("") -ne 0) -and ($k[0].StartsWith("[") -ne $True)) { $h.Add($k[0], $k[1]) } }

$filename="LOG_" + (Get-Date -Format "yyyy-MM-dd-HH-mm-ss") + ".log"
$log_path="C:\ProgramData\NAME\SOFTWARE\Azure\logs"
$Source=$h.Source
$Key=$h.Key
$output_path = $h.Output

cd "C:\Program Files (x86)\Microsoft SDKs\Azure\AzCopy"

.\AzCopy.exe /Source:$Source /Dest:$output_path /SourceKey:$Key /Y /S /V /XO /XN >$log_path\$filename

но я получил эту ошибку:

.\AzCopy.exe : [2018/06/08 17:10:09][ERROR] The syntax of the command is incorrect. The supplied storage key (SourceKey) is not a valid Base64 string.
At F:\Desktop\Azure_DL.ps1:29 char:1
+ .\AzCopy.exe /Source:$Source /Dest:$output_path /SourceKey:$Key /Y /S ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: ([2018/06/08 17:... Base64 string.:String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError

Есть идеи?Мне действительно нужно иметь ключевое хранилище информации в текстовом файле.

1 Ответ

0 голосов
/ 09 июня 2018

С помощью глубокого поиска я изменил способ вызова файла настроек:

   $configFile = "c:\Path2Config"
    if(Test-Path $configFile) {
        Try {
            #Load config appsettings
            $global:appSettings = @{}
            $config = [xml](get-content $configFile)
            foreach ($addNode in $config.configuration.appsettings.add) {
                if ($addNode.Value.Contains(‘,’)) {
                    # Array case
                    $value = $addNode.Value.Split(‘,’)
                        for ($i = 0; $i -lt $value.length; $i++) { 
                            $value[$i] = $value[$i].Trim() 
                        }
                }
                else {
                    # Scalar case
                    $value = $addNode.Value
                }
            $global:appSettings[$addNode.Key] = $value
            }
        }
        Catch [system.exception]{
        }
    }

https://stackoverflow.com/a/13698982/7470828

Спасибо

...