ログオンしクリプトをネットワークドライブをドライブレターマウントしている方は意外と多いと思います。
ログオンスクリプトでネットワークドライブをマウントするには
- batファイルで「net use」を実行する
- vbsファイルで「MapNetworkDrive」を実行する
等ありますが、今回は後者を実行したらエラーにはならないがドライブレターマウントできない事象が起きました。
レジュメ
環境・前提条件
Windows Server 2016 AD(Active Directory) 環境において
- Windows Server 2016
にログインした時。
テストはしていませんが、Windows 7以降のWindows10でログインしても同様のネットワークドライブをマウント出来ない事象が起きると思います。
不思議なことに、ログオンスクリプトではなくログオン後にvbscriptを手動実行するとネットワークドライブの割り当ては出来るんですけど、、、、
結論、UACの設定が原因でした。UAC無効に変更
こういった不思議な現象の原因はたいていこの設定なのかもしれませんが、
ログオンスクリプトを実行するパソコン・サーバーのUAC設定を無効にすると、ログオンスクリプトでネットワークドライブ割り当てを正常に出来るようになりました。
Windows Server 2016 ADでUACを無効にするグループポリシー設定方法
Windows Server 2016のADでも、Windows Sever 2012 ADと同様に、UAC無効の設定はグループポリシーで設定できます。
GPO(グループポリシーオブジェクト)の設定個所は
- コンピュータの構成 – ポリシー –Windowsの設定 - セキュリティの設定 – ローカルポリシー – セキュリティオプション
の「ユーザーアカウント制御:管理者承認モードですべての管理者を実行する」を無効にします。
このGPOにOUを割り当て、コンピュータオブジェクトを入れると、
そのコンピュータに対し、UACが無効になります(要再起動)
ネットワークドライブ割り当てするvbsログオンスクリプト
ログオンスクリプトは以下のネットワークドライブ割り当てスクリプト(vbscript)です。
Option Explicit
Dim objNetwork 'ネットワークオブジェクト
'// 共有フォルダ名設定
strDrive = “\\fileserver\share”'// 共有フォルダのドライブ割り当て
Set objNetwork = CreateObject("Wscript.Network")
If Err.Number <> 0 Then
WScript.Echo "Set objNetwork エラー"
WScript.Quit
End IfobjNetwork.MapNetworkDrive "Z:", strDrive
If Err.Number <> 0 Then
WScript.Echo "MapNetworkDrive エラー"
WScript.Quit
End If'// オブジェクト破棄
Set objNetwork = Nothing'// 終了
WScript.Quit
上記がサンプルスクリプトです。
UACが有効な時には
- ログオンスクリプト実行時にはErr.Numberでエラーをキャッチできずにネットワークドライブマウントも出来ない現象が起きました。
- しかしログオン後に手動で実行するとネットワークドライブ割り当てが出来ました
という挙動でした。