3

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

Скриншот

Баг

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

У меня есть ноутбук в домене. Есть два способа, которыми я использую это. Сначала внутри сети компании и там все отлично работает. Второй способ, когда я нахожусь вне офиса, подключаясь через 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"=""

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

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

1 ответ1

0

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

Во-первых, позвольте мне заявить, что это ошибка 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 Client for 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 при запуске или
Вы можете запустить через планировщик задач (он пытается запустить службу "Клиент для 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 windows от 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 и запустить его через скрипт

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .