首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >用于AzCopy的Powershell脚本和设置文件

用于AzCopy的Powershell脚本和设置文件
EN

Stack Overflow用户
提问于 2018-06-09 08:22:16
回答 1查看 3.7K关注 0票数 0

我想使用AzCopy自动从Azure VM下载到我的本地计算机。手动操作,我没有得到任何问题。我甚至成功地编写了一个自动脚本来实现这一点。然而,现在我的脚本不工作了,以前是工作的……也许我错过了什么或者我走运了。

这就是我所拥有的: settings.txt,它包含3个设置,比如输出文件夹、源(azure存储url)和来自Azure存储的源密钥。从settings.txt获取内容并启动AzCopy的myscript.ps1

我的问题是来自Azure的源密钥,如果密钥不是直接在myscript.ps1中,它就不能工作,我会得到一个错误。

我的脚本:

代码语言:javascript
复制
    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一起使用:

代码语言:javascript
复制
[SETTINGS]
Output="C:\Output\DATA\"
Source="https://blablabla.file.core.windows.net/blabla/"
Key="BLABLABLAMYWEIRDKEY"

所以我试着这么做:

代码语言:javascript
复制
    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

但是我得到了这个错误:

代码语言:javascript
复制
.\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文件中。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-09 09:23:39

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

代码语言:javascript
复制
   $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

谢谢

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50769848

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档