繁体   English   中英

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

[英]Using packer powershell provisioner to map an Azure file share to a service account

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

下面是我如何通过 Packer 的 powershell 配置器创建服务帐户。

$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"

没有任何映射,如果我手动运行此计划任务,似乎不会发生任何事情。 但是,如果我将上述计划任务切换为仅在用户登录时运行并手动执行该任务,则会创建网络地图。

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

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

我能够弄清楚如何通过脚本创建网络映射并使其持久化。

因此,不是以一种迂回的方式进行,而是使用 Task Scheduler 作为身份运行,我能够仅使用 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 将网络文件共享映射到的帐户执行。 我不会详细介绍我如何自动安装它。

更多信息https://docs.microsoft.com/en-us/sysinternals/downloads/psexec

.\PsExec.exe -u "ServiceAccount" -p "ServiceAccountPassword" -h "C:\Credential.bat" /accepteula
.\PsExec.exe -u "ServiceAccount" -p "ServiceAccountPassword" -h "C:\Map.bat" /accepteula

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

更多信息http://woshub.com/could-not-reconnect-mapped-network-drives/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM