我正在尝试访问PowerShell中的blob文件,并希望将其直接保存到FTP服务器。如何才能做到这一点?这可以通过blob文件URL完成吗?或者我可以以某种方式在Powershell内存中创建文件,然后使用$ webclient.UploadFile将其保存到FTP文件夹中?
与此相同下载有关的另一个问题是,有没有办法只复制文件而不是复制子目录?例如,我有一个blob文件,如:dataload / files / my_blob_file。当我使用命令Get-AzureStorageBlobContent -Destination $ destination_path时,它将文件保存在相同的子文件夹结构中,但是我可以改为使用自定义路径或删除子文件夹并将其保存为c:\ myfolder \ my_blob_file而不是c:\ myfolder \数据加载\文件\ my_blob_file?我想在上面的FTP服务器中完成这个。
答案 0 :(得分:2)
我正在尝试访问PowerShell中的blob文件,并希望将其直接保存到FTP服务器。
如果您的FTP服务器是基于Windows的,那么您只需在FTP服务器上运行脚本并将blob下载到此FTP服务器的本地路径中。
可以通过blob文件URL完成吗?
命令“Get-AzureStorageBlobContent”不接受URL作为参数。这意味着您需要编写代码或脚本来实现这一目标。这是我写的一个简单的演示:
$url = "https://accountname.blob.core.windows.net/testcontainer/Test01.txt"
$separator = "://"
$option = [System.StringSplitOptions]::RemoveEmptyEntries
$temp = $url.Split($separator,4,$option)
$Protocol = $temp[0]
$HostName = $temp[1]
$Container = $temp[2]
$BlobName = $temp[3]
或者我可以以某种方式在Powershell内存中创建文件,然后使用$ webclient.UploadFile将其保存到FTP文件夹中?
即使我们能够实现这一目标,将文件存储到RAM中也不是一个好的理想选择。如上所述,如果您的FTP服务器是基于Windows的,请直接在FTP服务器上运行脚本。
如果由于任何原因无法在服务器上运行脚本,请尝试共享FTP服务使用的文件夹,并将其作为网络驱动程序映射到将运行该脚本的计算机上。这样您就可以将文件存储到此网络驱动程序中。
但是我可以改为使用自定义路径或删除子文件夹并将其保存为c:\ myfolder \ my_blob_file而不是c:\ myfolder \ dataload \ files \ my_blob_file吗?
当然,只需将路径和文件名指定为Destination参数:
注意:实际上,Azure存储上没有“文件夹”的概念。该路径是blob名称的一部分。下载blob时,可以通过在目标路径中指定文件名来重命名blob。这样就不会在本地文件夹上创建附加文件夹。
=============================================== ==========================
更新
此脚本将作为Azure自动化的一部分从Azure运行。但是当我尝试调用FTP服务器(当前是我的本地机器)时,我收到“无法连接到远程服务器”错误。
您可能需要Hybrid Runbook Worker才能实现目标。
Azure自动化中的Runbook无法访问本地数据中心中的资源,因为它们在Azure云中运行。 Azure自动化的Hybrid Runbook Worker功能允许您在位于数据中心的计算机上运行Runbook来管理本地资源。
我正在使用默认的21端口,我也尝试使用我的公共IP地址
建议不要将FTP服务器暴露在Internet上。我建议使用Hybrid Runbook Worker。
另外,如何将我的blob文件的内容转换为Powershell变量以在脚本中使用它?
据我所知,Get-AzureStorageBlobContent不支持在RAM中返回一个对象。您需要先下载内容,然后使用Get-Content获取文件内容。如果您使用Hybrid Runbook Worker,您将能够在本地存储该文件。
=============================================== =============================== 更新2:
我试图了解如何调用任何外部FTP服务器(当前在我的机器上用于开发/测试目的,但可能驻留在生产中的任何其他外部服务器上),我必须从Azure自动化中的Powershell脚本。所以你的回复:你可能需要Hybrid Runbook Worker来实现你的目标......对我不起作用吗?
Hybrid Runbook Worker为您服务。它使事情变得更容易。因为如果您使用Hybrid Runbook Worker,Runbook将在您的本地计算机上运行。
我可以将blob下载到我的本地计算机上,并将它们上传到公共FTP服务器,没有任何问题。
您是说当前无法从Azure Powershell Automation上传和下载外部FTP服务器的文件?
我没有成功将blob上传到公共FTP服务器。当我尝试上载blob并且只将具有blob名称的空文件上载到FTP服务器时发生异常。由于PowerShell脚本在沙箱中运行,因此可能是权限问题。这就是为什么我说Hybrid Runbook Worker让事情变得更容易的原因。
最后请注意:FTP验证用户并以明文传输日期,这可能会导致安全问题。 FTPS和SFTP比FTP更安全。