Сервис Fabri c монтирует сетевой диск на узлах - PullRequest
0 голосов
/ 20 марта 2020

Я пытался подключить сетевой диск во время запуска службы. Я следовал этим учебникам, но не могу найти правильное решение.

Создан файловый ресурс: Быстрый старт: создание и управление 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
...