Я пытался подключить сетевой диск во время запуска службы. Я следовал этим учебникам, но не могу найти правильное решение.
Создан файловый ресурс: Быстрый старт: создание и управление Azure Общий доступ к файлам с Windows виртуальными машинами
Добавлен SetupEntryPoint
к ServiceManifest
Запускать скрипт при запуске службы
Я добавил ведение журнала, чтобы тоже найти ошибки (ConsoleRedirection
часть):
<SetupEntryPoint>
<ExeHost>
<Program>InitNetworkDrives.bat</Program>
<WorkingFolder>CodePackage</WorkingFolder>
<ConsoleRedirection FileRetentionCount="10"/>
</ExeHost>
</SetupEntryPoint>
InitNetworkDrives.bat работает правильно
PowerShell -NoProfile -ExecutionPolicy Bypass -Command %cd%\MountNetworkDrive.ps1
он вызывает скрипт PowerShell
, который отвечает за монтирование нового сетевого диска:
$password = ConvertTo-SecureString "PASSSSWOOOOOOOOOOOORD" -AsPlainText -Force
$Cred = New-Object System.Management.Automation.PSCredential ("Azure\fileshare", $password)
New-PSDrive -Name W -PSProvider FileSystem -Root \\fileshare\something-Credential $Cred -Persist -Scope Global
В случае, если я вызываю .bat или .ps1 скрипт локально, диск монтируется правильно. Однако при развертывании ServiceFabric
возникают проблемы с правами пользователя, и я никак не могу создать подключенный диск. Я уверен, что проблема вызвана правами пользователя. По умолчанию ServiceFabric
использует пользователя NetworkService
, но я попытался сделать это с помощью LocalSystem
, LocalService
, LocalUser
... Запуск службы в качестве учетной записи локального пользователя или учетной записи локальной системы Я начинаю думать, что лучше всего использовать репо Git на виртуальной машине вместо подключенного сетевого диска.
ОБНОВЛЕНИЕ
Я пробовал исправления @ Compo, но привода там нет в любом случае. Я также добавил проверку диска перед вызовом New-PSDrive, и у меня есть немного более подробный журнал.
$Networkpath = "B:"
$pathExists = Test-Path -Path $Networkpath
echo "Mount started"
If (-not ($pathExists)) {
$password = ConvertTo-SecureString "PAWWWWSRORD" -AsPlainText -Force
echo "password : $password"
$Cred = New-Object System.Management.Automation.PSCredential ("Azure\fileshare", $password)
echo "Cred : $Cred"
New-PSDrive -Name B -PSProvider FileSystem -Root \\fileshare\algorithmconfigs -Credential $Cred -Persist -Scope Global
echo "New-PSDrive done"
}
else {
echo "Path already existed"
Return #end the function if path was already there
}
Скрипт работает без проблем, и журнал говорит мне, что все прошло нормально, но диск нет в проводнике.
Mount started
password : System.Security.SecureString
Cred : System.Management.Automation.PSCredential
Name Used (GB) Free (GB) Provider Root CurrentLocation
---- --------- --------- -------- ---- ---------------
B 0.00 1.00 FileSystem \\stalgorithmconfigs.file.core.w...
New-PSDrive done