我正在尝试修改当前的 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
首先使用
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
,脚本将上传本地文件。如果文件确实存在,脚本将打印一条消息并跳过上传。如果您不关心文件被重写,请随意删除这部分。