我正在尝试访问 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 \dataload\files\my_blob_file? 我想在上面的 FTP 服务器中完成这个。
我正在尝试访问 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 自动化的混合 Runbook Worker 功能允许你在位于数据中心的计算机上运行 Runbook 以管理本地资源。
我使用默认的 21 端口,我也尝试使用我的公共 IP 地址
不建议将您的 FTP 服务器暴露给 Internet。我建议使用混合 Runbook Worker。
另外,如何将我的 blob 文件的内容放入 Powershell 变量中以在脚本中使用它?
据我所知,Get- Azure Storage Blob Content不支持在 RAM 中返回对象。您需要先下载内容,然后使用 Get-Content 获取文件内容。如果您使用混合 Runbook Worker,您将能够在本地存储文件。
================================================== ============================ 更新 2:
我试图了解如何调用任何外部 FTP 服务器(目前在我的机器上用于开发/测试目的,但可能驻留在生产中的任何其他外部服务器上),我必须从 Powershell 脚本中运行它Azure 自动化。所以你的回答是:你可能需要 Hybrid Runbook Worker 来实现你的目标......对我来说不起作用吧?
Hybrid Runbook Worker 适合您。它使事情变得更容易。因为如果您使用混合 Runbook Worker,则 Runbook 将在您的本地计算机上运行。
我可以将 blob 下载到我的本地计算机并将它们上传到公共 FTP 服务器,没有任何问题。
你是说目前没有办法从Azure Powershell Automation从外部FTP服务器上传和下载文件吗?
我没有成功地将 blob 上传到公共 FTP 服务器。当我尝试上传 blob 并且只有具有 blob 名称的空文件上传到 FTP 服务器时发生异常。这可能是权限问题,因为 PowerShell 脚本在沙箱中运行。这就是我说混合 Runbook Worker 使事情变得更容易的原因。
最后,请注意:FTP 以明文形式对用户进行身份验证和传输日期,这可能会导致安全问题。FTPS 和 SFTP 比 FTP 更安全。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句