DSC文件资源:无法使用凭据对象连接到Azure文件存储

时间:2015-07-29 09:40:35

标签: azure dsc azure-files

我一直试图让DSC脚本使用DSC文件资源将文件从Azure文件存储复制到本地,如下所示

 File FabrikamFibreSourceFiles
    {
        Ensure = "Present"  # You can also set Ensure to "Absent"
        Type = "Directory“ # Default is “File”
        Recurse = $true
        Credential = $storageCredential
        SourcePath = "\\sriksstore.file.core.windows.net\fabrikamfibreshare" # This is a path that has web files
        DestinationPath = "C:\inetpub\dev\fabrikamfibre\" # The path where we want to ensure the web files are present
    }

$ storageCredential在调用时传递,如下所示。

$storageContext = New-AzureStorageContext -StorageAccountName $storageAccountName  -StorageAccountKey $storageKey
$secpasswd = ConvertTo-SecureString $storageKey -AsPlainText -Force
$storagecreds = New-Object System.Management.Automation.PSCredential ($storageAccountName, $secpasswd)

Get-AzureVM -ServiceName fabrikamfibre -Name fabrikamfibre| `
Set-AzureVMDscExtension -StorageContext $storageContext `
-ConfigurationName "FabrikamFibre" -ConfigurationArgument @{ storageCredential= ($storagecreds) }`
-ConfigurationArchive "fabrikamfibredsc.ps1.zip" | Update-AzureVM

无法复制包含以下错误的内容

发生错误 使用指定的凭据访问网络共享时。请确保凭证正确并且网络正确 分享是可访问的。请注意,不应使用本地路径指定Credential。 相关的 文件/目录是:\ sriksstore.file.core.windows.net \ fabrikamfibreshare。 指定的登录会话不存在。它可能已经被终止了。一个错误 访问具有指定凭据的网络共享时发生。请确保凭证正确无误 网络共享是可访问的。请注意,不应使用本地路径指定Credential。相关的文件/目录是: \ sriksstore.file.core.windows.net \ fabrikamfibreshare。

当我尝试使用各种示例中提到的Get-Credential调用时也失败,如果有人尝试将DSC文件资源与Azure文件存储一起使用,请帮忙。 我已经仔细检查了它们是正确的凭据,当我使用write-verbose打印$ storageCredential.Username时它们总是输出空白。我在这里肯定遗漏了一些东西。

2 个答案:

答案 0 :(得分:0)

您可以仔细检查配置中$ storageCredential的声明并确保其类型为PSCredential吗?

configuration MyConfiguration([PSCredential] $storageCredential...) {
   ...
} 

如果这是正确的,您可以检查VM收到的storageCredential的值吗?它将位于名为

的文件中的JSON对象中
  

C:\包\插件\ Microsoft.powershell.dsc \ X.X.X.X \ runtimesettings \ settings.x

答案 1 :(得分:0)

这是一个很老的问题,但是不幸的是,当使用文件资源从Azure文件共享复制文件时,问题仍然存在。我试图以与问题作者通过DSC扩展所做的方式完全相同的方式使用它,并收到相同的错误。我确认设置文件中的所有凭据均正确。实际上,使用文件浏览器从VM连接到文件共享没有问题。

我最终放弃了使用文件资源,而是使用脚本资源,而是使用Powershell手动挂载到文件共享,将文件复制到本地文件系统,并断开了挂载。我向脚本传递了一些变量,例如文件共享凭据,驱动器要挂载的字母以及用于删除文件的本地文件路径。在TestScript部分中,您可以运行对自己有用的任何验证,例如,使用Test-Path来确保文件已被复制。希望这对遇到这个问题的人有所帮助...

    Script CopyFilesFromAzureFileshare
    {
        SetScript =
        {
             New-PSDrive -Name $using:localMountDrive -PSProvider FileSystem -Root $using:fileshareSrcPath -Credential $using:fileshareCredential -Persist

             $src = $using:localMountDrive + ":\*";

             if (-Not (Test-Path $using:localSrcPath))
             {
                  md -path $using:localSrcPath
             }

             Copy-Item $src -Destination $using:localSrcPath -Recurse -Force

             Remove-PSDrive -Name $using:localMountDrive -PSProvider FileSystem 
        }
        TestScript = 
        {
            Test-Path "$using:localSrcPath\$using:fileshareInstallArchive" -PathType Leaf

        }
        GetScript = { @{ Result = '' } }
    }