UACがデフォルトレベルに設定されている場合、Windows 7では、管理コマンドプロンプトまたはその他の昇格されたプロセスからマップされたネットワークフォルダーにアクセスすることはできません。
これにより、不要なエラーが発生します。ネットワーク共有にある* .regファイルをインポートしようとしたとき。ダブルクリックすると、UACプロンプトを受け入れた後、次のようなやや紛らわしいエラーメッセージが表示されます。
M:\ sharename\settings.regをインポートできません:ファイルを開くときにエラーが発生しました。ディスクまたはファイルシステムにエラーがある可能性があります。
昇格で実行しているときに、すでにマップされているネットワーク共有も利用できるようにすることは可能ですか?または、その動作の回避策はありますか?
更新:管理コマンドプロンプトを開き、Net Use
を使用してドライブをマウントすることができます。これにより、すべての昇格されたプロセスで共有を利用できるようになります。ただし、これは永続的なものではなく、ログオンするたびに繰り返す必要があります。
要するに、いいえ。マップ/認証されたネットワークリソースの現在のセットを、昇格されていないコンテキストから昇格されたコンテキストにコピーするためのサポートされている方法はありません。すべての意図と目的のために、それらはあなたがたまたま同じコンソールから対話することができる別々のログインです。昇格されたプロセスと昇格されていないプロセスの間で通信できると、それらを分離しておくというセキュリティ目的全体が壊れてしまいます。
ただし、これらのネットワークドライブが(個別のログイン/パスワードではなく)ユーザーアカウントの資格情報を使用してマウントされている場合は、実際のドライブマッピングではなく、UNCパスを使用してアクセスしてみてください。
サポートされていませんが、レジストリでEnableLinkedConnectionsを設定してこれを実現できます。 http://support.Microsoft.com/kb/937624 を参照してください
Microsoftは、これにより「システムが安全でなくなる可能性がある」と述べていますが、詳細については、こちらでお待ちしています: http://social.technet.Microsoft.com/Forums/en/w7itprosecurity/thread/25cb7824-2a8d -4dbd-b802-1c64bed3a5e0?prof = required
昇格された管理者セッション用に、現在のセッションで再度マップされるドライブをマップする単純なVBScriptをまとめました。スクリプトの実行後、マップされたドライブはすべての昇格されたプロセスで使用できます。これは、現在のユーザーがすでにローカル管理者である場合に機能します。
Option Explicit
Dim objNetwork, objShell
Dim strDriveLetter, strNetworkPath
Dim colDrives, intDrive, strDrives
If WScript.Arguments.length =0 Then
Set objNetwork = CreateObject("WScript.Network")
Set colDrives = objNetwork.EnumNetworkDrives
For intDrive = 0 To (colDrives.Count -1) Step 2
WScript.Echo colDrives.Item(intDrive) & " is mapped to: " & colDrives.Item(intDrive + 1)
If Len(strDrives) > 0 Then strDrives = strDrives & " "
strDrives = strDrives & " " & Chr(34) & colDrives.Item(intDrive) & Chr(34) & " " & Chr(34) & colDrives.Item(intDrive + 1) & Chr(34)
Next
If Len(strDrives) > 0 Then
' re-call script with elevation
Set objShell = CreateObject("Shell.Application")
objShell.ShellExecute "cscript.exe", Chr(34) & WScript.ScriptFullName & Chr(34) & strDrives, "", "runas", 1
Else
WScript.Echo "No drives Mapped."
End If
Else
' elevated part
Set objNetwork = CreateObject("WScript.Network")
For intDrive = 0 To (WScript.Arguments.Count - 1) Step 2
WScript.Echo WScript.Arguments(intDrive) & " is mapped to: " & WScript.Arguments(intDrive + 1)
On Error Resume Next ' ignore already mapped drives
objNetwork.MapNetworkDrive WScript.Arguments(intDrive), WScript.Arguments(intDrive + 1)
On Error GoTo 0
Next
End If
'' EnableLinkedConnections ''レジストリ設定は、Windows 7(企業のPC)では機能しませんでした。役に立たないまで、複数の方法でそれを試しました。
試しましたxA3のスクリプトで、問題なく動作します。それをありがとう。
自動的に実行するには、スクリプトをファイル(remount-admin.vbsなど)に記述し、そのファイルをC:\ ProgramData\Microsoft\Windows\Start Menu\Programs\Startupに保存します。