Windows 使用packer powershell provisioner将Azure文件共享映射到服务帐户

Windows 使用packer powershell provisioner将Azure文件共享映射到服务帐户,windows,azure,powershell,scheduled-tasks,fileshare,Windows,Azure,Powershell,Scheduled Tasks,Fileshare,我正在尝试找出如何将文件共享映射到我使用Powershell脚本创建的特定用户,该脚本将作为服务帐户。最终结果是,我的服务帐户应该能够访问位于“\\storageaccount.file.core.windows.net\share”的UNC路径 下面是我如何通过Packer的powershell provisioner创建服务帐户 $password = ConvertTo-SecureString "ServiceAccountPassword" -AsPlainText -Force Ne

我正在尝试找出如何将文件共享映射到我使用Powershell脚本创建的特定用户,该脚本将作为服务帐户。最终结果是,我的服务帐户应该能够访问位于“\\storageaccount.file.core.windows.net\share”的UNC路径

下面是我如何通过Packer的powershell provisioner创建服务帐户

$password = ConvertTo-SecureString "ServiceAccountPassword" -AsPlainText -Force
New-LocalUser "ServiceAccount" -Password $password -FullName "ServiceAccount"
Add-LocalGroupMember -Group "Administrators" -Member "ServiceAccount"
因为Packer使用Packer生成的用户执行Powershell代码,所以我创建了一个计划任务,以便在系统帐户启动时运行批处理文件

"net use Z: \\storageaccount.file.core.windows.net\share azurestorageaccesskey /user:Azure\storageaccount /persistent:yes" | Out-File -FilePath "C:\MapAzureFileShare.bat" -Encoding "ASCII"
$action = New-ScheduledTaskAction -Execute "C:\MapAzureFileShare.bat"
$trigger = New-ScheduledTaskTrigger -AtStartup -RandomDelay 00:00:30
$settings = New-ScheduledTaskSettingsSet -Compatibility "Win8"
$principal = New-ScheduledTaskPrincipal -UserId "SYSTEM" -LogonType "ServiceAccount" -RunLevel "Highest"
$task = New-ScheduledTask -Action $action -Principal $principal -Trigger $trigger -Settings $settings -Description "Map Azure file share at startup"
Register-ScheduledTask -TaskName "MapAzureFileShare" -InputObject $task
下面的脚本导致为所有用户创建一个网络驱动器,不幸的是,该网络驱动器是一个断开连接的驱动器,当我以刚刚创建的服务帐户登录时无法访问。它会说“用户名或密码不正确。”

我还尝试创建计划任务以作为创建的用户运行

$action = New-ScheduledTaskAction -Execute "C:\MapAzureFileShare.bat"
$trigger = New-ScheduledTaskTrigger -AtStartup -RandomDelay 00:00:30
$settings = New-ScheduledTaskSettingsSet -Compatibility "Win8"
$task = New-ScheduledTask -Action $action -Trigger $trigger -Settings 
$settings -Description "Map Azure file share at startup"
Register-ScheduledTask -TaskName "MapAzureFileShare" -InputObject $task -User "ServiceAccount" -Password "ServiceAccountPassword"
如果手动运行此计划任务,则不会映射任何内容,也不会发生任何事情。但是,如果我将上述计划任务切换为仅在用户登录时运行,并手动执行任务,则会创建网络映射

如果我尝试以刚刚创建的用户的身份运行批处理文件,则文件共享映射得很好


还有什么我可以尝试的吗?

我能够想出如何通过脚本创建网络映射并将其持久化

因此,我没有以一种循环的方式,使用任务调度器作为身份运行,而是可以使用PsExec作为我想要使用的帐户运行

首先生成两个批处理文件,一个用于将Windows凭据保存到我要映射到的帐户,另一个用于实际执行映射

echo "cmdkey /add:storageaccount.file.core.windows.net /user:Azure\storageaccount /pass:serviceaccountpassword" | Out-File -Append -FilePath "C:\Credential.bat" -Encoding "ASCII"
echo "net use Z: \\storageaccount.file.core.windows.net\share /persistent:yes" | Out-File -Append -FilePath "C:\Map.bat" -Encoding "ASCII"
然后,我将批处理文件作为我希望通过PsExec将网络文件共享映射到的帐户执行。我不会详细介绍我是如何自动安装的

更多信息

现在,有一个棘手的问题花了我一段时间,多亏了一篇非常有用的文章。使用Windows 10的1809构建版本(2018年10月)。即使网络映射存在且凭据存在,网络映射也不会自动重新连接。我决定使用Windows101803作为我的基本映像,它允许在启动虚拟机时自动重新连接驱动器


更多信息

我能够想出如何通过脚本创建网络映射并使其保持

因此,我没有以一种循环的方式,使用任务调度器作为身份运行,而是可以使用PsExec作为我想要使用的帐户运行

首先生成两个批处理文件,一个用于将Windows凭据保存到我要映射到的帐户,另一个用于实际执行映射

echo "cmdkey /add:storageaccount.file.core.windows.net /user:Azure\storageaccount /pass:serviceaccountpassword" | Out-File -Append -FilePath "C:\Credential.bat" -Encoding "ASCII"
echo "net use Z: \\storageaccount.file.core.windows.net\share /persistent:yes" | Out-File -Append -FilePath "C:\Map.bat" -Encoding "ASCII"
然后,我将批处理文件作为我希望通过PsExec将网络文件共享映射到的帐户执行。我不会详细介绍我是如何自动安装的

更多信息

现在,有一个棘手的问题花了我一段时间,多亏了一篇非常有用的文章。使用Windows 10的1809构建版本(2018年10月)。即使网络映射存在且凭据存在,网络映射也不会自动重新连接。我决定使用Windows101803作为我的基本映像,它允许在启动虚拟机时自动重新连接驱动器


更多信息

我不确定解决方案是什么。我认为这个问题是由这个引起的。除非由提升的进程创建/激活,否则提升的进程无法使用网络共享。如果将共享创建为“bob”,则使用管理员权限运行的程序无法使用此共享。如果您以提升进程的形式运行与“net use”相同的重复共享映射,则此功能可用。谢谢,我尝试以最高权限运行计划任务,但也没有成功。我想最终的问题是Windows 10 1809出现了一个bug,阻止了我自动重新连接到网络地图。我在下面的帖子中解决了这个问题。我不确定解决方案是什么。我认为这个问题是由这个引起的。除非由提升的进程创建/激活,否则提升的进程无法使用网络共享。如果将共享创建为“bob”,则使用管理员权限运行的程序无法使用此共享。如果您以提升进程的形式运行与“net use”相同的重复共享映射,则此功能可用。谢谢,我尝试以最高权限运行计划任务,但也没有成功。我想最终的问题是Windows 10 1809出现了一个bug,阻止了我自动重新连接到网络地图。我在下面的帖子中解决了这个问题。