#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 диски, поскольку они нацелены на каталог.