【问题标题】:Using packer powershell provisioner to map an Azure file share to a service account使用 packer powershell provisioner 将 Azure 文件共享映射到服务帐户
【发布时间】:2020-01-10 02:57:08
【问题描述】:

我试图弄清楚如何将文件共享映射到我使用 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 代码,所以我创建了一个计划任务以在 SYSTEM 帐户上启动时运行批处理文件。

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

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

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

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

【问题讨论】:

  • 我不确定解决方案是什么。我认为这个问题是由这个引起的。除非由提升的进程创建/激活,否则网络共享对提升的进程不可用。如果您将共享创建为“bob”,则此共享不可用于以管理员权限运行的程序。如果您运行相当于“网络使用”的功能,将共享映射作为提升的进程重复执行。
  • 谢谢,我尝试以最高权限运行计划任务,但也没有用。我认为最终的问题是 Windows 10 1809 存在一个错误,导致我无法自动重新连接到网络地图。我能够在下面的帖子中解决这个问题。

标签: windows azure powershell scheduled-tasks fileshare


【解决方案1】:

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

因此,我没有使用任务计划程序作为身份运行,而是使用 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(2018 年 10 月)的 1809 构建版本。即使网络地图存在且凭据存在,网络地图也不会自动重新连接。我决定使用 Windows 10 1803 作为我的基本映像,它允许在启动 VM 时自动重新连接驱动器。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-22
    • 2022-11-11
    • 2022-12-09
    • 2019-12-12
    • 2020-08-21
    • 2017-04-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多