带有设置文件的AzCopy的Powershell脚本

时间:2018-06-09 00:22:16

标签: powershell azure scripting

我想使用AzCopy自动从Azure VM下载到本地计算机。手动,我没有得到任何问题。我甚至成功地做了一个自动脚本来做到这一点。但是,现在我的剧本不起作用并且习惯了工作...也许我错过了一些东西或者我很幸运。

所以这就是我所拥有的: settings.txt包含3个设置,例如输出文件夹,源(azure存储URL)和Azure存储中的源密钥。 myscript.ps1基本上从settings.txt获取内容并启动AzCopy

我的问题是来自Azure的sourcekey,如果密钥不是直接在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

有什么想法吗?我真的需要将密钥信息存储在txt文件中。

1 个答案:

答案 0 :(得分:-1)

通过深入搜索,我改变了调用设置文件的方式:

   $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

由于