web-dev-qa-db-ja.com

Windows 2003でUNCパスをローカルフォルダーにマップする方法はありますか?

UNCパスをローカルドライブ文字にマップできることを知っています。ただし、UNCパスをローカルフォルダーにマップする方法があるかどうか疑問に思っています。プログラムにハードコードされた特定のフォルダーを持つプログラムがあり、UNCパスにマップされている同じ名前のフォルダーを作成して、ネットワーク共有からデータにアクセスできるようにします。これは実行可能ですか?具体的には、これはWindows 2003サーバー上にあります。

25
Davin Studer

これは、OPが要求したものと完全に一致します-ネットワーク共有にマップするWindows 2003のシンボリックリンク。他の人を何時間も見てテストした後、これはネットワーク共有で機能する唯一のコンポーネントです。

Windows XP用のシンボリックリンクドライバー

このユーティリティは、XPおよび2003でネットワーク共有へのマッピングとシンボリックリンクの作成の両方で機能します。 http://schinagl.priv.at/nt/ln/ln.html# symboliclinksforwindowsxp

これをパスに配置したディレクトリに配置すると、senable.exesymlink.sysを使用)とln.exeを使用してシンボリックリンクを作成できます(上記のサイトから必要になります) Visual C++ランタイムDLLへの依存関係も含めて)。

追加ボーナス:MkLinkを偽造

これらの追加の2つのファイルをsenable.exeがある同じディレクトリに配置し、これがすべてパス上にあることを確認します。

mklink.cmd:

@echo off

SET DIR=%~dp0%
@powershell -NoProfile -ExecutionPolicy unrestricted -Command "& '%DIR%Symlink.ps1' %*"

pushd "%DIR%"
"%DIR%senable.exe" start
popd

Symlink.ps1:

param (
 [string]$symlinktype,
 [string]$link,
 [string]$target
)

$scriptpath = $MyInvocation.MyCommand.Path
$ScriptDir = Split-Path $scriptpath

$senable = Join-Path "$ScriptDir" senable.exe
$ln = Join-Path "$ScriptDir" ln.exe

pushd "$ScriptDir"
& cmd /c "$senable" install
popd
& cmd /c "$ln" -s "$target" "$link"

注意:

Windows 2003に次のアイテムをインストールする必要があります(R2以外、R2に必要なものがまだ完全にはわかりません)。

  • Microsoft .NET Framework 2.0 Service Pack 1
  • Windowsイメージングコンポーネント
  • Windows Server 2003 Service Pack 2
  • Windows Management Framework Core(PowerShell 2をもたらします)

チョコレートパッケージ

これをすべて行うチョコレートのパッケージを作成しました: http://chocolatey.org/packages/win2003-mklink

重要な注意点

通常のシンボリックリンクとは異なり、シンボリックリンクフォルダーを削除するためにフォルダーを単に削除することはできません。それを行うと、それが指している実際のフォルダが削除されます。したがって、細心の注意を払って使用してください。

15
ferventcoder

はい、UNCパスをローカルフォルダーにマップする方法があります。

C:\>mklink /D Develop \\obsidian\Develop
symbolic link created for Develop <<===>> \\obsidian\Develop

これは、buildサーバーが自分のPCのDevelopフォルダーをDevelopフォルダーとして使用するためです。

10/20/2012  11:01 AM    <SYMLINKD>     Develop [\\obsidian\Develop]

そして、あなたはそれを持っています。


MKLINK [[/D] | [/H] | [/J]] Link Target

        /D      Creates a directory symbolic link.  Default is a file
                symbolic link.
        /H      Creates a hard link instead of a symbolic link.
        /J      Creates a Directory Junction.
        Link    specifies the new symbolic link name.
        Target  specifies the path (relative or absolute) that the new link
                refers to.

:実際の状況では、別のレベルのリダイレクトが必要でした。使用しているプログラムは、Developシンボリックリンクであり、リモートマシン、および準拠を拒否しました。 localリソースを指すジャンクションを与えることで、プログラムをシャットダウンし、指示どおりに実行するように指示しました。

10/20/2012  11:06 AM    <JUNCTION>     Develop [C:\Develop2\]
10/20/2012  11:01 AM    <SYMLINKD>     Develop2 [\\obsidian\Develop]
20
Ian Boyd

直接行うことはできませんが、シンボリックリンクを作成すると、マップされたドライブ文字を指すことができるはずです。

Net Use e:\\ shares\folder#これを永続的に設定すると、次回の再起動で壊れてしまいます。

Cmdを使用して、リンクが必要な場所を参照します

cd c:\ folder

mklink/d name e:\

これで、c:\ folder\name \にアクセスするものはすべて\\ shares\folder \にアクセスします。

4
Wulfhart

Microsoftによると、リモートマシン(サーバー)上の共有フォルダーをローカルフォルダーにマップすることはできません。例えば:

  • サーバー上の共有フォルダー:\\ Server\share1
  • ローカルマシン上のマップされた共有:c:\ MyProgram\Some_Useluf_Files_Here

これは動作しません!!!!マイクロソフトが述べたように、少なくともJunctionまたはHard-links以外のリモートマシンではmklinkはできません。基本的にショートカットであるSymbolicリンクとしてのみ実行できます。そのため、特定のプログラムがサーバーと同じローカルフォルダーにアクセスする必要がある場合は、残念ながら運がありません!! WindowsはLinuxではありませんが、忘れないでください:-(

2
dorbar

直接マッピングすることはできません。ファイルシステムの一部として登録されているシェルネームスペース拡張機能を実装して、必要な場所でルート化してから、内部的にUNCパスにアクセスできるようにすることができます。実装するのは簡単なことではありませんが、探している最終結果が得られるはずです。

1
Remy Lebeau

\\ moo\cowをC:\ cow_filesにマッピングし、mooというサーバーがまだない場合(フォルダーを直接共有できる場合は、フォルダーを直接共有できるため、存在しないと想定)、次のようにできます。

  1. Hostsファイル(または可能であれば実際のDNS)を編集して、mooをC:\ cow_filesのあるマシンにマップします。 (または、マッピングが必要なクライアントに対してディレクトリがローカルである場合はlocalhostに。)

  2. そのマシンでC:\ cow_filesを牛として共有します。

その後、\\ moo\cowにマップして必要なファイルを取得できるはずです(何か見逃している場合を除きます:可能です)。

0
Leo Davidson

何度も試した後、私は最終的に、あなたが私が望んだ方法でそれを行うことができないことを理解しました。 Server 2008でmklink機能を使用してシンボリックリンクを試しましたが、.NET System.IO APIがシンボリックリンクを認識しないことがわかりました。そのため、シンボリックにリンクされているフォルダーでDirectory.GetFiles()を実行すると、エラーがスローされます。

0
Davin Studer