web-dev-qa-db-ja.com

移動プロファイルのPowerShell生成に関する問題-「FileSystem」プロバイダーでInitializeDefaultDrives操作を実行しようとして失敗しました

これは本当に厄介なエラーです-「FileSystem」プロバイダーでInitializeDefaultDrives操作を実行しようとして失敗しました。、外部の会社のときにPowerShellを起動するたびに発生します通信網。

スクリーンショット

The bug

簡単な説明:

ドメインにノートブックがあります。私がそれを使用する2つの方法があります。まず、会社のネットワーク内にあり、すべてが正常に機能します。 2つ目の方法は、オフィスの外にいて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)私もここでそれを見つけました(しかしまだそれを実験していませんでした;私はOSを壊したくありません):

_    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"=""
_

今のところ、移動プロファイルに問題があると結論付けました。移動プロファイルが正しい情報で更新されない理由をまだ見つけなければなりません。

誰かがそのような問題を修正する方法のアイデア/経験を持っていますか?

4
tukan

最後に、理由を知り、いくつかのシナリオをテストしたいと思います。

まず、これはWindows NFS[〜#〜] bug [〜#〜]であることを述べさせてください。

私はそれを単なる人間としてマイクロソフトに報告する方法を知りません。こことブログで報告します。

このエラーが伝播するために満たす必要のある条件があります。

1)コンピューターはドメイン内にある必要があります

2)このコンピューターは、内部ネットワークと本格的なVPNの両方で使用する必要があり、両方を同じプロファイルで使用する必要があります。

3)MicrosoftのNFS実装(別名Client for NFS)をインストールする必要があります

4)コンピュータの起動時にサービスを自動的に開始する必要があります。サービスがmanual startにあり、ブートシーケンスが完了した後に開始された場合、バグは現れません。

5)何らかのNFS共有が必要です。ここでの問題は、NFS共有が通常の_Net Use_共有よりも優先順位をとることです。 NFS共有を切断し、_Net Use ... /persistent:yes_を使用してマップすると、この共有は再起動後に上書きされます。再起動後、NFS共有として再度識別され、エラーが発生します。

どのように対処しますか?

要するに:NFS Client for Windowsサービスmanual自動モードから。 マウント および アンマウント NFS共有用のPowerShellスクリプトと組み合わせてタスクスケジューラまたはgpeditを使用します。 一部の共有がマウントされているときに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".                                                                                  
_

広告A)解決策:NFS共有をマウントするためにこのスクリプトを使用します-開始時に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共有ネットワークドライブ(オフラインWindows機能の使用など)からクラウドへの移行

ネットワークドライブ(私の場合は_U:_ドライブ)を削除します

この問題は、オフラインファイル機能がオンになっていて、ファイルがネットワークドライブにバックアップされている場合に発生する可能性があります。会社がクラウドサービスへの移行を優先して変更した場合、一部のアプリケーションで以前のネットワークドライブが必要であるにもかかわらず、新しいクラウドプロバイダーに切り替える必要がある場合、プロファイルにデッドロック状態が発生する可能性があります。

Microsoftの_NFS Client for windows_を使用している場合、これは以前のネットワークドライブを取り除く方法です。

次の手順で_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.
_

ウィンドウが前のドライブを忘れて、揮発性環境を新しい構成に正しく設定するには、再起動する必要があります。

エラーメッセージを取り除く:「FileSystem」プロバイダーでInitializeDefaultDrives操作を実行しようとして失敗しました。

_Client for NFS_を停止すると、エラーメッセージは表示されませんnot。状態manualにして、スクリプトで開始するだけで十分です。

1
tukan