Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 使用所需状态配置的Azure Scale集的驱动器映射_Powershell_Azure_Azure Powershell_Dsc - Fatal编程技术网

Powershell 使用所需状态配置的Azure Scale集的驱动器映射

Powershell 使用所需状态配置的Azure Scale集的驱动器映射,powershell,azure,azure-powershell,dsc,Powershell,Azure,Azure Powershell,Dsc,我遇到了一个有趣的问题。也许你们这些好人能帮我了解这里发生了什么。如果有更好的方法,我洗耳恭听 我正在Azure上运行DSC配置,希望映射驱动器。我已经读过这篇文章,这并不是DSC的目的,但我不知道除了使用Azure Scalesets的DSC之外还有什么其他方法可以做到这一点。以下是脚本中我遇到的问题部分: Script MappedDrive { SetScript = { $pass = "passwordhere" | Conve

我遇到了一个有趣的问题。也许你们这些好人能帮我了解这里发生了什么。如果有更好的方法,我洗耳恭听

我正在Azure上运行DSC配置,希望映射驱动器。我已经读过这篇文章,这并不是DSC的目的,但我不知道除了使用Azure Scalesets的DSC之外还有什么其他方法可以做到这一点。以下是脚本中我遇到的问题部分:

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部分尝试了以下代码:

(New-Object -ComObject WScript.Network).MapNetworkDrive('W:','\\azurestorage.file.core.windows.net\storage',$true,'username','passwordhere')
我还尝试了一个简单的net use命令来映射驱动器,而不是使用新奇的、新对象或新的PSDrive cmdlet。同样的行为

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

我所做的故障排除:

  • 我的环境中没有域。我只是尝试创建一个缩放集并运行DSC,以便使用在创建存储帐户时授予的存储帐户凭据来配置机器
  • 我正在使用存储帐户用户id和访问密钥(随机生成的密钥,通常以存储帐户的名称作为用户)提供给我的用户名和密码
  • Azure在运行DSC模块时不会抛出任何错误(事件日志中没有错误,仅提供信息-资源执行序列在DSC文件中正确列出了我的所有序列。)
  • 当我登录到机器并检查驱动器是否映射时,我遇到了一个断开连接的网络驱动器,驱动器号是我想要的(W:)
  • 如果打开Powershell,我会收到一个错误:“尝试在“文件系统”提供程序上执行InitializeDefaultDrive操作失败。”
  • 如果我运行“Get-PSDrive”,则不会显示W:drive
  • 如果我在Powershell控制台内手动运行SetScript代码,则映射的驱动器在不同的驱动器号下工作正常
  • 如果我尝试断开W:驱动器的连接,我会收到“此网络连接不存在”
  • 我想也许DSC在映射之前需要一些时间,并添加了一个睡眠计时器,但这不起作用。同样的行为

    • 我想象这里正在发生什么:
      DSC在
      NT AUTHORITY\SYSTEM
      帐户下运行,除非设置了凭据属性,否则从网络共享中提取文件时将使用
      计算机帐户。但是看看Azure文件是如何运行的,权限不应该是个问题,但是在
      NT AUTHORITY\SYSTEM
      下运行整个过程可能会有问题。我建议你试着检查一下你的虚拟机,看看是否有效


      另外,如果您确信share\ntfs权限正确,还可以尝试对具有网络共享的VM执行相同的操作。您可能需要启用它才能工作。

      我以前也遇到过类似的问题,虽然它不涉及DSC,但在服务器重新启动之前,装载Azure文件共享是可以的,然后它会显示为断开连接的驱动器。如果我将New Object/Net Use/New PSDrive与persist选项一起使用,就会发生这种情况

      这个问题的答案,我在

      保留虚拟机的存储帐户凭据

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

      cmdkey/add:.file.core.windows.net/user:/pass:
      

      当虚拟机启动时,Windows现在将重新连接到您的文件共享 重新启动。您可以通过运行来验证共享是否已重新连接 来自PowerShell窗口的net use命令

      请注意,凭据仅在 cmdkey运行。如果您正在开发一个作为 服务,您将需要在该上下文中作为 嗯

      使用持久化凭据装载文件共享

      一旦与虚拟机建立了远程连接,就可以运行 net use命令使用以下命令装载文件共享 语法。替换为存储的名称 帐户,并使用您的文件存储共享的名称

      net用法:\\.file.core.windows.net\
      例子:
      net use z:\\samples.file.core.windows.net\logs

      因为您在上一个版本中保留了存储帐户凭据 步骤中,您不需要向他们提供netuse命令。如果你 尚未保留您的凭据,请将其作为 参数传递给netuse命令,如下所示 例如

      编辑: 我没有免费的Azure虚拟机来测试它,但这在服务器2016 hyper-v虚拟机上运行良好

      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
          }
      

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

      这实际上会给我带来一个错误。[[Script]MappedDrive]在目标“使用用户提供的凭据执行SetScript”上执行操作“Set-TargetResource”。详细:[2016-12-09T14:51:06][ERROR]发生系统错误1312。详细:[2016-12-09T14:51:06][错误]指定的登录会话不存在。它可能已被终止。您是否使用了
      PsDscRunAsCredential
      cmdkey
      没有它将无法工作。“PsDscRunAsCredential”无效。如果我改用Credtial,cmdkey将永远不会获得我传递结果的用户。恐怕这是不可能的,因为请记住,这不是一个标准的份额。此共享是使用Azure共享文件存储构建的。共享是使用Azure门户和/或Powershell cmdlet创建的。你没有