我遇到了一个有趣的问题。也许你们可以帮我了解这里发生了什么。如果有更好的方法,我会全神贯注的。
我正在运行一个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命令来映射驱动器,而不是花哨的或。同样的行为。
如果我手动运行这些命令(New-Object/Net Use/New),机器将映射驱动器,如果我使用单独的驱动器号运行它。不知何故,驱动器正在试图被映射,但不是映射。
我已经完成了故障排除:
发布于 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上运行得很好
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
}在我的简短测试中,只有在重新启动服务器之后,驱动器才会出现。
发布于 2016-12-08 20:36:59
我想象在这里发生的事情:
DSC在NT AUTHORITY\SYSTEM帐户下运行,除非设置了凭据属性,否则在从网络共享中提取文件时使用Computer account。但是看看Azure文件是如何运行的,权限不应该是一个问题,但是在NT AUTHORITY\SYSTEM下运行整个过程可以。我建议您尝试使用VM的以用户身份运行DSC,看看它是否有效。
ps。您还可以尝试对具有网络共享的VM执行相同的操作,如果您确信共享\ntfs权限是正确的。您可能需要启用匿名用户访问您的共享才能使其工作。
https://stackoverflow.com/questions/41047581
复制相似问题