Возможность замены диска в масштабе всей машины

#windows #powershell #ansible #subst

#Windows #powershell #ansible #подстановка

Вопрос:

Я настроил Ansible для подключения к Windows Server 2019 с использованием метода сертификата WinRM. Мне нужно сопоставить общий диск с простым зеркальным отображением C. С SUBST я могу сделать SUBST D: C: , но…

  • Когда я запускаю команду с помощью Ansible с помощью win_shell удаленного рабочего стола, диск не отображается.
  • Верно и обратное: когда я запускаю команду с помощью удаленного рабочего стола, оболочка Ansible не видит новый общий диск.
  • Я попытался использовать приемы реестра, чтобы сохранить сопоставление, и после перезагрузки я вижу диск в проводнике файлов с помощью удаленного рабочего стола, но ни PowerShell, ни Ansible win_shell его не видят.

Как я могу сопоставить C с D на машинном уровне, используя Ansible playbook?

Комментарии:

1. Когда вы определяли ссылку на диск «D:» в «HKLM SYSTEM CurrentControlSet Control Session Manager DOS Devices», вы предназначались для устройства тома «?? C:» или корневого каталога «?? C: «? Это должно быть устройство тома для максимальной совместимости; subst.exe я не могу этого сделать. Для дополнительной меры я бы также сделал его явно глобальным путем к устройству, например » GLOBAL?? C:».

2. Однако имейте в виду, что это не канонический диск, зарегистрированный в диспетчере точек монтирования, поэтому такие функции API, как GetFinalPathNameByHandleW , по-прежнему будут разрешаться на диске «C:».

3. @ErykSun Мне не хватало `??` префикс. Спасибо за полезные комментарии.

Ответ №1:

Я не знаю, почему вы хотите это сделать, но вы можете попробовать использовать службу workstation :

 Net use d: \localhostc$
  

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

Комментарии:

1. Спасибо. Это не совсем подходит для устаревшей системы, с которой я работаю, но вполне может быть полезно для тех, кто посещает эту страницу.

Ответ №2:

В значении реестра для диска отсутствовал ?? префикс. Все работает правильно с правильным значением реестра. Для записи, это задача ansible, с которой я столкнулся:

     - name: Map D drive to C.
      ansible.windows.win_regedit:
        path: HKLM:SYSTEMCurrentControlSetControlSession ManagerDOS Devices
        name: "D:"
        state: present
        type: string
        data: '??C:'
  

Комментарии:

1. Для достижения наилучшего результата используйте «?? C:» или » Global?? C:», а не корневой каталог «?? C: «. Некоторые функции API дают ошибки, если диск на самом деле является каталогом, а не устройством — например GetVolumePathNameW , плохо себя ведет для subst.exe диски, поскольку они нацелены на каталог.