Есть ли способ сопоставить UNC-путь с локальной папкой в ​​Windows 2003? - PullRequest
25 голосов
/ 02 декабря 2010

Я знаю, что могу сопоставить путь UNC с буквой локального диска.Тем не менее, мне интересно, если есть способ сопоставить путь UNC к локальной папке.У меня есть программа, в которой есть жестко запрограммированная папка, и я хочу попробовать создать папку с тем же именем, которая сопоставлена ​​с путем UNC, чтобы к данным можно было получить доступ из общего сетевого ресурса.Это выполнимо?В частности, это на сервере Windows 2003.

Ответы [ 7 ]

19 голосов
/ 29 октября 2012

Да, есть способ сопоставить UNC-путь с локальной папкой:

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

Это потому, что я хочу, чтобы сервер build использовал папку 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 была символической ссылкой , указывающей на удаленный компьютер и отказался подчиниться. я сказал программе, чтобы она закрылась и делала то, что ей было сказано, дав ей соединение, которое указывает на локальный ресурс.

10/20/2012  11:06 AM    <JUNCTION>     Develop [C:\Develop2\]
10/20/2012  11:01 AM    <SYMLINKD>     Develop2 [\\obsidian\Develop]
15 голосов
/ 03 сентября 2013

Это соответствует в точности тому, о чем просил OP - символическая ссылка для Windows 2003, которая отображается на общий сетевой ресурс. После многих часов просмотра и тестирования других компонентов это единственный найденный компонент, который будет работать с общими сетевыми ресурсами.

Символическая ссылка Драйвер для Windows XP

Эта утилита будет работать как для XP, так и для 2003, отображая общий сетевой ресурс и создавая символическую ссылку: http://schinagl.priv.at/nt/ln/ln.html#symboliclinksforwindowsxp

Теперь поместите это в каталог, который вы указали в пути, и у вас есть возможность создавать символические ссылки, используя senable.exesymlink.sys) и ln.exe (вам понадобится это также на вышеуказанном сайте вместе с его зависимость от библиотек времени выполнения Visual C ++).

Добавлен бонус: Fake out MkLink

Поместите эти два дополнительных файла в тот же каталог, где у вас есть 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 с пакетом обновления 1
  • Компонент Windows Imaging
  • Windows Server 2003 с пакетом обновления 2
  • Ядро Windows Management Framework (это приносит PowerShell 2)

Шоколадный пакет

Я создал шоколадную упаковку, которая сделает все это за вас: http://chocolatey.org/packages/win2003-mklink

Важное примечание

В отличие от обычных символических ссылок, вы не можете просто удалить папку, чтобы удалить папку с символическими ссылками. Если вы сделаете это, он удалит реальную папку, на которую указывает. Так что используйте с особой осторожностью.

4 голосов
/ 03 декабря 2010

Вы не можете сделать это напрямую, но если вы создадите символическую ссылку, вы сможете указать ее на букве подключенного диска.

net use e: \\ shares \ folder # Вы захотите установить постоянную настройку, иначе следующая перезагрузка сломает.

Просмотрите с помощью cmd ваше местоположение, вы хотите ссылку

cd c: \ folder

mklink / d имя e: \

Теперь все, что обращается к c: \ folder \ name \, будет иметь доступ к \\ shares \ folder \

2 голосов
/ 22 июня 2013

Согласно Microsoft, ВЫ НЕ МОЖЕТЕ сопоставить общую папку на удаленном компьютере (сервере) с локальной папкой.Например:

  • общая папка на сервере: \\ Server \ share1
  • сопоставленный общий ресурс на локальном компьютере: c: \ MyProgram \ Some_Useluf_Files_Here

Это не сработает !!!!Как заявили в Microsoft, вы НЕ МОЖЕТЕ сделать mklink на удаленной машине, по крайней мере, не для Junction или Hard-links .Вы можете сделать это ТОЛЬКО как символическая ссылка, которая по сути является ярлыком.Так что, если определенной программе нужен доступ к локальной папке, такой же, как на сервере ... извините, не повезло !!Windows не Linux, давайте не будем забывать, что :-(

1 голос
/ 02 декабря 2010

Вы не можете отобразить это напрямую, нет. Вы можете попробовать реализовать расширение пространства имен оболочки, которое зарегистрировано как часть файловой системы, чтобы вы могли получить root права там, где вам нужно, и затем получить внутренний доступ к пути UNC. Это не тривиальная вещь для реализации, но она должна дать вам конечный результат, который вы ищете.

0 голосов
/ 15 декабря 2010

После долгих попыток я наконец понял, что вы не можете сделать это так, как я хотел.Я пробовал символическую ссылку, используя функциональность mklink в Server 2008, но оказалось, что .NET System.IO API не распознает символические ссылки.Таким образом, если вы выполните Directory.GetFiles () для папки, которая символически связана, это выдаст ошибку.

0 голосов
/ 03 декабря 2010

Предполагая, что вы хотите сопоставить \\ moo \ cow с C: \ cow_files, и что еще не существует сервера с именем moo (если бы он был, вы могли бы просто поделиться папкой напрямую, поэтому я предполагаю, что нет),Вы можете:

  1. Отредактировать файл hosts (или ваш фактический DNS, если можете), чтобы сопоставить moo с машиной с C: \ cow_files на нем.(Или localhost, если каталог является локальным для клиента, которому требуется сопоставление.)

  2. Поделиться C: \ cow_files как корова на этом компьютере.

После этого вы сможете подключиться к \\ moo \ cow и получить нужные файлы, если я что-то не пропустил (что возможно:)).

...