如何使用 Powershell 表达 Azure 文件共享位置

问题描述 投票:0回答:1

我正在尝试修改当前的 Powershell 以指向 Azure 文件共享。

目前,底层 Powershell 用于本地驱动器,但我想更改为指向 Azure 文件共享。

param ( [String] $Filename  = '*.csv',
        [String] $SourceDir = 'C:\Test\',
        [String] $TargetDir = 'C:\Test\convert\'
)

ForEach ($csvFile in Get-ChildItem -Path $SourceDir -Filter $Filename){
    (Import-Csv $csvFile | 
     ConvertTo-Csv -NoTypeInformation -Delimiter '|') -replace '[,"]' -replace '\|',',' |
         Set-Content (Join-Path $TargetDir $csvFile.Name)                  
}

我使用了指向 Azure 文件共享的底部 Python 文件,如下所示(对于其他项目)。

因此,目标是使用类似于下面的 Python 代码的内容修改顶部 Powershell:

如何在现有的Powershell中表达URL、账户密钥?

from azure.storage.fileshare import ShareServiceClient, ShareClient, 
ShareDirectoryClient, ShareFileClient
import pandas as pd
import io

account_url = "https://example.file.core.windows.net"
account_key = "xxxx=="

service_client = ShareServiceClient(account_url=account_url, credential=account_key)
share_name = "testname"
share_client = service_client.get_share_client(share_name)

# Get a ShareDirectoryClient object to connect to the directory
directory_path = "Parent/Child"
directory_client = share_client.get_directory_client(directory_path)

更新:

我想做的是将 $ctx 连接到参数 (ForEach(...) ):

底部只是我从 this YouTube 找到的应用“Remove-AzDtalakeGen2Item”的示例:

$ctx = New-AzStorageContext -StorageAccountName = 'sample' -StorageAccountKey "xxxxxxxxx"
Remove-AzDatalakeGen2Item -Context $ctx -FileSystem "sample" -Path "/Test/" -force
Remove-AzDatalakeGen2Item -Context $ctx -FileSystem "Sample" -Path "/Test/Convert" -force
powershell azure-file-share
1个回答
0
投票

首先使用

Az.Storage
 安装 
Install-Module -Name Az.Storage -Force -AllowClobber

这是您正在寻找的脚本:

param ( [String] $Filename  = '*.csv',
        [String] $SourceDir = 'C:\Test\',
        [String] $TargetDir = 'C:\Test\convert\'
)

$storageAccountName = "your-storage-account-name"
$storageAccountKey = "your-storage-account-key"
$shareName = "your-share-name"

$ctx = New-AzStorageContext -StorageAccountName $storageAccountName -StorageAccountKey $storageAccountKey
$share = Get-AzStorageFile -Context $ctx -ShareName $shareName

ForEach ($csvFile in Get-ChildItem -Path $SourceDir -Filter $Filename){
    $fileExists = Get-AzStorageFile -Context $ctx -ShareName $shareName -Path $csvFile.Name -ErrorAction SilentlyContinue

    if ($null -eq $fileExists) {
        (Import-Csv $csvFile | 
         ConvertTo-Csv -NoTypeInformation -Delimiter '|') -replace '[,"]' -replace '\|',',' |
             Set-AzStorageFileContent -Share $share -Source $csvFile.FullName
    } else {
        Write-Host "File $($csvFile.Name) already exists in the Azure File Share."
    }                  
}

Get-AzStorageFile
用于检查 Azure 文件共享中是否已存在同名文件。如果文件不存在,
Get-AzStorageFile
将返回
$null
,脚本将上传本地文件。如果文件确实存在,脚本将打印一条消息并跳过上传。如果您不关心文件被重写,请随意删除这部分。

© www.soinside.com 2019 - 2024. All rights reserved.