我想使用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文件中。
答案 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
由于