共有フォルダをネットワークドライブとして割り当てるバッチをグループポリシーのログオンスクリプトにて設定していたのだが、ある時から実行されている形跡がなくなっていた
というよりネットワークドライブが表示されていない・・・
◆対象環境
サーバー:Windows 2012 R2
クライアント:Windows10 1909、2002
◆ネットワークドライブ割り当てのバッチ
rem 共有フォルダへのマッピング Zドライブ
net use Z: \\192.168.50.10\共有フォルダ
ログイン後に手動でnet useを実行すると普通に作成されます
あと、管理者権限でログインするとネットワークドライブが作成されないですが、ユーザー権限でログインすれば正常にネットワークドライブが作成されます
わけがわからないよ・・・/人◕◡◡◕人\
調べていくとWindows 8 以降はUACが働き、グループポリシーというか共有からのnet use がどうも実行されていないみたい・・・
文献さがしていくとUACを停止するとか物騒な解決方法しかなかったので、Microsoftから出ている対処方法を記録として残しておこうと思う
◆解決方法
net useを実行するバッチを直接ログオンスクリプトに設定するのではなく、スクリプトを介して実行するようにすれば、UACを停止しなくてもネットワークドライブが作成されました
Launchapp.wsfというファイルをスクリプトに設定し、ネットワークドライブを作成するバッチをスクリプトのパラメーターに設定します
ちなみにスクリプトのパラメーターは共有への絶対パス( \\〇〇〇\××\drive.bat )で記載します
正常にネットワークドライブが作成されたと思います
Launchapp.wsfのコードを下に記載しておきます
メモ帳などに張り付けて、名前を付けて保存「〇〇.wsf」にすれば完成です
◆参考文献
Deploying Group Policy Using Windows Vista
◆Launchapp.wsfの中身
<job>
<script language="VBScript">
'---------------------------------------------------------
' This sample launches the application as interactive user.
'---------------------------------------------------------
' A constant that specifies a registration trigger.
const TriggerTypeRegistration = 7
' A constant that specifies an executable action.
const ActionTypeExecutable = 0
' A constant that specifies the flag in RegisterTaskDefinition.
const FlagTaskCreate = 2
' A constant that specifies an executable action.
const LogonTypeInteractive = 3
If WScript.Arguments.Length <> 1 Then
'WScript.Echo "Usage: cscript launchapp.wsf <AppPath>"
WScript.Quit
End If
strAppPath = WScript.Arguments(0)
'********************************************************
' Create the TaskService object.
'********************************************************
Set service = CreateObject("Schedule.Service")
call service.Connect()
strTaskName = "Launch App As Interactive User"
'********************************************************
' Get a folder to create a task definition in.
'********************************************************
Dim rootFolder
Set rootFolder = service.GetFolder("\")
'Delete the task if already present
On Error Resume Next
call rootFolder.DeleteTask(strTaskName, 0)
Err.Clear
'********************************************************
' Create the new task
'********************************************************
Dim taskDefinition
Set taskDefinition = service.NewTask(0)
'********************************************************
' Create a registration trigger.
'********************************************************
Dim triggers
Set triggers = taskDefinition.Triggers
Dim trigger
Set trigger = triggers.Create(TriggerTypeRegistration)
'***********************************************************
' Create the action for the task to execute.
'***********************************************************
' Add an action to the task. The action executes the app.
Dim Action
Set Action = taskDefinition.Actions.Create( ActionTypeExecutable )
Action.Path = strAppPath
'WScript.Echo "Task definition created. About to submit the task..."
'***********************************************************
' Register (create) the task.
'***********************************************************
call rootFolder.RegisterTaskDefinition(strTaskName, taskDefinition, FlagTaskCreate,,, LogonTypeInteractive)
'WScript.Echo "Task submitted."
</script>
</job>
コメント