首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用所需状态配置的Azure刻度集驱动映射

使用所需状态配置的Azure刻度集驱动映射
EN

Stack Overflow用户
提问于 2016-12-08 19:44:30
回答 2查看 2.6K关注 0票数 1

我遇到了一个有趣的问题。也许你们可以帮我了解这里发生了什么。如果有更好的方法,我会全神贯注的。

我正在运行一个Azure上的DSC配置,并希望映射一个驱动器。我读过这真的不是DSC的目的,但我不知道用Azure Scalesets在DSC之外做这件事的其他方法。下面是脚本中遇到问题的部分:

代码语言:javascript
复制
Script MappedDrive
    {
        SetScript = 
        {
        $pass = "passwordhere" | ConvertTo-SecureString -AsPlainText -force
        $user = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList "username",$pass
        New-PSDrive -Name W -PSProvider FileSystem -root \\azurestorage.file.core.windows.net\storage -Credential $user -Persist
        }
        TestScript = 
        {
            Test-Path -path "W:"
        }
        GetScript = 
        {
        $hashresults = @{}
        $hashresults['Exists'] = test-path W:
        }
    }

我还在SetScript部分尝试了这段代码:

代码语言:javascript
复制
(New-Object -ComObject WScript.Network).MapNetworkDrive('W:','\\azurestorage.file.core.windows.net\storage',$true,'username','passwordhere')

我还尝试了一个简单的net use命令来映射驱动器,而不是花哨的或。同样的行为。

如果我手动运行这些命令(New-Object/Net Use/New),机器将映射驱动器,如果我使用单独的驱动器号运行它。不知何故,驱动器正在试图被映射,但不是映射。

我已经完成了故障排除:

  • 在我的环境中没有域。我只是尝试创建一个比例集并运行DSC,以便使用在创建存储帐户时授予的存储帐户凭据来配置计算机。
  • 我正在使用由存储帐户用户id和访问密钥(随机生成的密钥,通常存储帐户的名称作为用户)提供给我的用户名和密码。
  • Azure在运行DSC模块时不会抛出任何错误(事件日志中没有错误,只提供信息-资源执行序列正确地列出了DSC文件中的所有序列)。
  • 当我登录到机器并检查驱动器是否被映射时,我在我想要的驱动器号(W:)上遇到一个断开连接的网络驱动器。
  • 如果打开Powershell,将收到一个错误:“尝试在‘InitializeDefaultDrives’提供程序上执行FileSystem操作失败。”
  • 如果我运行“”,W:驱动器就不会出现。
  • 如果我在Powershell控制台内手动运行SetScript代码,则映射的驱动器在另一个驱动器字母下工作良好。
  • 如果我试图断开W:驱动器,我会收到“此网络连接不存在”。
  • 我认为DSC可能需要一段时间才能映射,并添加了睡眠计时器,但这是行不通的。同样的行为。
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-08 21:26:52

我以前也有类似的问题,虽然它不涉及DSC,安装Azure文件共享将是可以的,直到服务器重新启动,然后它将显示为一个断开连接的驱动器。如果我在持久化选项中使用了New-Object/Net Use/,就会发生这种情况。

我在更新的文档上找到了这个问题的答案

保存虚拟机的存储帐户凭据。 在挂载到文件共享之前,首先在虚拟机上保存您的存储帐户凭据。此步骤允许Windows在虚拟机重新启动时自动重新连接到文件共享。若要持久化您的帐户凭据,请从虚拟机上的PowerShell窗口运行cmdkey命令。用存储帐户的名称和存储帐户密钥替换。

cmdkey /add:<storage-account-name>.file.core.windows.net /user:<storage-account-name> /pass:<storage-account-key>

当虚拟机重新启动时,Windows将重新连接到您的文件共享。您可以通过从PowerShell窗口运行net命令来验证共享是否已重新连接。 请注意,凭据仅在运行cmdkey的上下文中持久化。如果您正在开发作为服务运行的应用程序,则还需要在该上下文中持久化您的凭据。 使用持久化凭据挂载文件共享 一旦您有了到虚拟机的远程连接,就可以使用以下语法运行net命令来挂载文件共享。用存储帐户的名称和文件存储共享的名称替换。

net use <drive-letter>: \\<storage-account-name>.file.core.windows.net\<share-name> example : net use z: \\samples.file.core.windows.net\logs

由于您在上一步中持久化了您的存储帐户凭据,所以不需要为它们提供net命令。如果您还没有持久化您的凭据,那么将它们作为传递给net命令的参数来包含,如下面的示例所示。

编辑:我没有免费的Azure VM来测试它,但这在服务器2016超级vm上运行得很好

代码语言:javascript
复制
Script MapAzureShare
    {
        GetScript = 
        {

        }
        TestScript = 
        {
            Test-Path W:
        }
        SetScript = 
        {
            Invoke-Expression -Command "cmdkey /add:somestorage.file.core.windows.net /user:somestorage /pass:somekey"
            Invoke-Expression -Command "net use W: \\somestorage.file.core.windows.net\someshare"
        }
        PsDscRunAsCredential = $credential
    }

在我的简短测试中,只有在重新启动服务器之后,驱动器才会出现。

票数 2
EN

Stack Overflow用户

发布于 2016-12-08 20:36:59

我想象在这里发生的事情:

DSC在NT AUTHORITY\SYSTEM帐户下运行,除非设置了凭据属性,否则在从网络共享中提取文件时使用Computer account。但是看看Azure文件是如何运行的,权限不应该是一个问题,但是在NT AUTHORITY\SYSTEM下运行整个过程可以。我建议您尝试使用VM的以用户身份运行DSC,看看它是否有效。

ps。您还可以尝试对具有网络共享的VM执行相同的操作,如果您确信共享\ntfs权限是正确的。您可能需要启用匿名用户访问您的共享才能使其工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41047581

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档