Проблема с созданием PowerShell для моего перемещаемого профиля. Попытка выполнить операцию InitializeDefaultDrives на провайдере FileSystem не удалась

770
tukan

Это действительно досадная ошибка - попытка выполнить операцию InitializeDefaultDrives на провайдере FileSystem не удалась. , который я получаю каждый раз, когда запускаю powershell вне сети компании.

Скриншот

The bug

Краткое описание:

У меня есть ноутбук в домене. Есть два способа, которыми я использую это. Сначала внутри сети компании и там все отлично работает. Второй способ, когда я нахожусь вне офиса, подключаясь через VPN. Выдает вышеупомянутую ошибку каждый раз, когда я запускаю powershell.

Скрипт для поиска диска:

Из моего повторного поиска ошибки причина, по-видимому, заключается в невозможности подключения диска или ресурса.

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

Я выполнил в обоих местах этот скрипт:

Write-Verbose -Message 'Get-PSDrive -PSProvider FileSystem' -verbose echo 'Get-PSDrive -PSProvider FileSystem' | Out-File -Append -Encoding "UTF8" -FilePath filesystem.log Get-PSDrive -PSProvider FileSystem | Out-File -Append -Encoding "UTF8" -FilePath filesystem.log  Write-Verbose -Message 'net use' -verbose  echo 'net use' | Out-File -Append -Encoding "UTF8" -FilePath filesystem.log net use | Out-File -Append -Encoding "UTF8" -FilePath filesystem.log  Write-Verbose -Message '[System.IO.DriveInfo]::GetDrives() | Format-Table' -verbose echo '[System.IO.DriveInfo]::GetDrives() | Format-Table' | Out-File -Append -Encoding "UTF8" -FilePath filesystem.log  [System.IO.DriveInfo]::GetDrives() | Format-Table | Out-File -Append -Encoding "UTF8" -FilePath filesystem.log  # does not work properly # Write-Verbose -Message 'Get-CimInstance -ClassName Win32_LogicalDisk -ComputerName $env:COMPUTERNAME' -verbose | Out-File -Append -Encoding "UTF8" -FilePath filesystem.log #Get-CimInstance -Class Win32_LogicalDisk | Out-File -Append -Encoding "UTF8" -FilePath filesystem.log  Write-Verbose -Message 'Get-CimInstance -Class Win32_NetworkConnection' -verbose  echo 'Get-CimInstance -Class Win32_NetworkConnection' | Out-File -Append -Encoding "UTF8" -FilePath filesystem.log Get-CimInstance -Class Win32_NetworkConnection | Out-File -Append -Encoding "UTF8" -FilePath filesystem.log 

Результаты:

Кажется, что U: \ скрывается от теней (не появляется в помещениях). Это сетевой диск, который был отключен и больше не должен использоваться. (есть некоторые унаследованные программы, использующие его, и их следует применять через правила GPO)

net use производит:

U: \\server_name\U_login_name$ NFS Network 

[System.IO.DriveInfo]::GetDrives() | Format-Table производит:

Name DriveType DriveFormat IsReady AvailableFre TotalFreeSpa TotalSize RootDirecto VolumeLabel eSpace ce ry  ---- --------- ----------- ------- ------------ ------------ --------- ----------- ----------- C:\ Fixed NTFS True 1779298304 1779298304 ...43488000 C:\ OSDisk  U:\ Network False U:\  

Get-CimInstance -Class Win32_NetworkConnection

LocalName RemoteName ConnectionState Status  --------- ---------- --------------- ------   U: \\server_name\U_login_name$ Disconnected Unavailable  

С другой стороны, когда непосредственно в сети компании нет U: \ что так всегда.

Что я пытался исправить ситуацию

  • ручное отключение

    1) обычным способом (щелкнув правой кнопкой мыши по разъединению) выдается ошибка этого сетевого подключения не существует

    2) при использовании NFS umount u::

    Disconnecting U: \\server_name\U_login$ There are open files and/or incomplete directory searches pending on the connection.  Do you want to continue this operation? (Y/N) [N]:y  Network Error - 2250 Not Connected 

    3) Пробное принудительное отключение всех монтирований NFS (U: диск сообщается как общий ресурс NFS) umount -f -a:

    Network Error - 2250 Not Connected 
  • предложения найдены в интернете:

    1) Изменить GPO

    Чтобы решить эту проблему, примените следующий параметр через групповую политику:

    User Configuration/Administrative Templates/System/Scripts/Run logon scripts synchronously = Enabled

(примечание: компьютер запускается очень, очень медленно при использовании перемещаемого профиля. Пришлось отключить этот параметр)

2) подключенный диск не исчезнет

Я очень надеялся на эту ссылку. Подключенный диск не исчезнет - при повторном входе в систему я продолжаю подключаться. У меня такое же чувство, как в посте, - цитата:

> I have indeed checked scripts and GPOs and this is nowhere to be found there. This looks more like a manual mapping that had the > "Reconnect on logon" checkbox checked and is now so persistent that > there was no "normal" way to undo it. 

К сожалению, каждое предложение не получилось.

  • реестр

    1) Я искал строку в реестре и нашел ее здесь:

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2], Я пытался удалить диск U :, но он продолжает возвращаться.

2) Я также нашел это здесь (но еще не экспериментировал с этим; я не хочу ломать ОС):

 Windows Registry Editor Version 5.00  [HKEY_USERS\S-1-5-21-119559289-1840127793-336618761-855951\Volatile Environment] "HOMEDRIVE"="U:" "LOGONSERVER"="\\\\logon_server" "USERDNSDOMAIN"="dns_domain" "USERDOMAIN"="user_domain" "USERNAME"="login" "USERPROFILE"="C:\\Users\\login" "HOMEPATH"="\\" "HOMESHARE"="\\\\server_name\\U_login$" "APPDATA"="C:\\Users\\login\\AppData\\Roaming" "LOCALAPPDATA"="C:\\Users\\login\\AppData\\Local" "USERDOMAIN_ROAMINGPROFILE"="user_domain"  [HKEY_USERS\S-1-5-21-119559289-1840127793-336618761-855951\Volatile Environment\1] "SESSIONNAME"="Console" "CLIENTNAME"="" 

На данный момент я пришел к выводу, что что-то не так с моим профилем роуминга. Мне еще предстоит найти причину, по которой профиль в роуминге не обновляется с правильной информацией.

У кого-нибудь есть идея / опыт как решить такую ​​проблему?

3

1 ответ на вопрос

0
tukan

Наконец, я надеюсь узнать причину и протестировать некоторые сценарии.

Во-первых, позвольте мне заявить, что это ошибка Windows NFS .

Я не знаю, как сообщить об этом в Microsoft как о смертном. Я буду сообщать об этом здесь и в моем блоге.

Есть условия, которые должны быть выполнены для распространения этой ошибки:

1) компьютер должен быть в домене

2) Вы должны использовать этот компьютер как во внутренней сети, так и в полноценном VPN, и вы должны оба в одном профиле.

3) У вас должна быть установлена ​​реализация Microsoft NFS (псевдоним Client для NFS)

4) Служба должна запускаться автоматически при запуске компьютера. Если служба manualзапущена и запущена после завершения последовательности загрузки, ошибка не проявится.

5) У вас должен быть какой-то общий ресурс NFS . Проблема здесь в том, что доля NFS имеет приоритет над обычной net use. Если вы отключите общий ресурс NFS, а затем отобразите его, используя net use ... /persistent:yes, то этот ресурс будет перезаписан после перезагрузки. После перезагрузки он будет идентифицирован как общий ресурс NFS, который выдает ошибку.

Как с этим бороться?

Короче говоря: Установка клиента NFS для службы Windows, в инструкции от автоматического режима. Используйте планировщик задач или gpedit в сочетании с моими сценариями powershell для монтирования и размонтирования общих ресурсов NFS. НЕ останавливайте службу NFS Client for Windows при подключении некоторых общих ресурсов!

Более длинный ответ:

При использовании моих сценариев, пожалуйста, прочитайте ниже информацию:

Примечания && лучшие практики (важно прочитать!):

A) NFS mount, at least the Microsoft's implementation, is NOT persistent over boots. To overcome  this you have these options:  I) Schedule this script in Task scheduler under "ordinary" user e.g. DOMAIN\user and have the  check-box "Run with highest privileges" (in order to start the NFS Client service if stopped) II) Run it in the "Local Group Policy Editor" (gpedit.msc) under "Windows Settings\Scripts"  (Startup -> mount and Shutdown -> unmount) in the sections "Computer Configuration" (for all  users) or under "User configuration" (for one specific user)   B) Do !!!NOT!!! mount NFS drive on system-wide account as "nt authority\system". At the first  glance this seems to be a good idea. Don't be fooled, it is not! When you mount NFS share  under "SYSTEM" account it will appear as fixed drive for all other users! On "SYSTEM" account  it still will show as network share. If you stop the NFS Client for Windows service, NOT  recommended when any NFS share active, and then start it again, then even under "SYSTEM"  account it will appear as "fixed" drive. It will leave user no option other than restart for  unmount.   C) It is NOT a good idea to stop Client for NFS Service when you have NFS mounted. It can lead  to unexpected states like the NFS share actually becoming a hard-drive for windows till reboot.  D) If the Client for NFS Service is started already then it is better not to stop it manually as  it can, under certain circumstances, refuse to start. It is better to have a log-off script  take care of the unmount && stopping the service  

Ошибки или замечания по конфигурации сервера:

A) You are getting a powershell error:  "Attempting to perform the InitializeDefaultDrives operation on the 'FileSystem' provider  failed."  This error can be caused the NFS Client for Windows when service is starting with start of the  Windows. It takes precedence over "ordinary" `net use` and it causes powershell to check  "FileSystem".  

Ad A) Решение: используйте этот скрипт для монтирования NFS Share - установите его с помощью политик gpedit при запуске или
вы можете запустить его через планировщик задач (он пытается запустить службу Client for NFS) - у скрипта должны быть права на это. Не забудьте настроить службу «Клиент для NFS» («NfsClnt»)
на ручной запуск, чтобы она не запускалась при запуске Windows.

B) If you are getting this error message (at your NFS server):  "(rpc.mountd[7243]: refused mount request from 192.168.XX.XX for <mount>: illegal port 24784"  you are most probably trying to connect on port over 1024. To connect to NFS share you need to have 'insecure' option at your /etc/exports (if missing fix it and run `exportfs -r`)  

СОВЕТ: Для запуска сценария монтирования требуется UAC, если служба еще не запущена. Вы можете:

1) run it manually - you will see UAC window  2) create a new Task in Task Scheduler and check the check box "Run it with highest privileges"  3) create a startup powershell script in the local policies 

Миграция с сетевого диска NFS OR на общий ресурс (например, с использованием автономных функций Windows) в облако

Удаление сетевого диска (в моем случае U:диск)

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

Если вы используете NFS Client for windowsMicrosoft от Microsoft, вот как вы избавляетесь от предыдущего сетевого диска:

Как избавился от U:накопителя (пока нет сообщения) со следующими шагами:

1) Перейти к -> Start Menu\Programs\Administrative Tools\Services for Network File System (NFS)

2) Остановитесь, client for NFSщелкнув правой кнопкой мыши на элементе и выбравstop service

3) Простое ручное удаление работает !!!!

net use u: /delete --> U: was deleted successfully. 

Чтобы Windows забыла предыдущий диск и правильно установила в Volatile Environment новую конфигурацию, вам необходимо перезагрузить компьютер .

Избавление от сообщения об ошибке: Попытка выполнить операцию InitializeDefaultDrives на поставщике FileSystem не удалась.

Сообщение об ошибке не появляется с Client for NFSостановленным. Достаточно иметь его в состоянии manualи запустить его через скрипт