2017-04-04 63 views
0

我試圖訪問PowerShell中的Blob文件,並希望將其直接保存到FTP服務器。如何才能做到這一點?這可以通過blob文件URL完成嗎?或者我可以以某種方式在Powershell內存中創建文件,然後使用$ webclient.UploadFile將其保存到FTP文件夾中?如何從Azure存儲下載blob文件並使用Powershell將其保存到FTP服務器?

與此相同的下載另一個問題是,有沒有辦法把剛纔複製的文件,而不是讓複製以及子目錄?例如,我有一個blob文件,如:dataload/files/my_blob_file。當我使用命令Get-AzureStorageBlobContent -Destination $ destination_path可將其保存在相同的子文件夾結構的文件,但我可以代替有一個自定義路徑或刪除子文件夾並將其保存爲C:\ MyFolder文件\ my_blob_file而不是C:\ MyFolder文件\數據加載\文件\ my_blob_file?我想在上面的FTP服務器上完成這個任務。

回答

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 Automation中的Runbook無法訪問本地數據中心中的資源,因爲它們在Azure雲中運行。 Azure Automation的混合Runbook Worker特性允許您在位於數據中心的計算機上運行Runbook以管理本地資源。

我使用的是默認的21端口,並使用我的公網IP地址

暴露你的FTP服務器,互聯網也試過不推薦。我會建議使用Hybrid Runbook Worker。

此外,如何將我的blob文件的內容放入Powershell變量中以便在腳本中使用它?

據我所知,Get-​Azure​Storage​Blob​Content不支持在RAM中返回對象。您需要先下載內容,然後使用Get-Content獲取文件內容。如果您使用Hybrid Runbook Worker,則可以在本地存儲文件。

============================================== ================================ 更新2:

我想了解如何調用任何外部FTP服務器(目前在我的機器上用於開發/測試目的,但可能駐留在生產中的任何其他外部服務器上),並且必須從Azure自動化中的Powershell腳本運行它。所以你的回覆:你可能需要Hybrid Runbook Worker來實現你的目標...對我來說不適合?

的混合運行手冊工人爲你工作。它使事情變得更容易。因爲如果您使用Hybrid Runbook Worker,Runbook將在本地計算機上運行。

我能夠在斑點下載到我的本地機器,並將其上傳到公共FTP服務器沒有任何問題。

您是否說現在無法從Azure Powershell Automation的外部FTP服務器上載和下載文件?

我沒有成功將blob上傳到公共FTP服務器。當我嘗試上傳blob時發生異常,只有帶有blob名稱的空文件纔會上傳到FTP服務器。自從PowerShell腳本在沙箱中運行以來,這可能是一個權限問題。這就是爲什麼我說Hybrid Runbook Worker讓事情變得更簡單的原因。

最後請注意:FTP認證用戶並以明文傳輸日期,這可能會導致安全問題。 FTPS和SFTP比FTP更安全。

+0

謝謝你的回覆史蒂文。此腳本將作爲Azure自動化的一部分從Azure運行。但是當我嘗試調用FTP服務器(當前是本地計算機)時,出現「無法連接到遠程服務器」錯誤。我已經爲所有用戶匿名訪問設置了服務器,甚至試圖關閉我的防火牆,我使用默認的21端口,並且我也嘗試使用我的公共IP地址,並且還在「通過Windows允許應用程序」中添加了FTP服務器防火牆「設置,但我不知道還需要什麼。 – Payal

+0

另外,如何將我的blob文件的內容放入Powershell變量以在腳本中使用它?例如,我有一個csv blob文件,我想與Powershell中的另一個csv文件合併,如何訪問此文件內容? – Payal

+0

僅供參考,我可以從本地機器運行腳本並連接到FTP。我也向所有用戶公開分享了我的FTP文件夾。我運行了Windows Defender,並將其關閉,但Azure仍然出現同樣的錯誤。 – Payal

相關問題