web-dev-qa-db-fra.com

Existe-t-il un moyen de mapper un chemin UNC vers un dossier local sous Windows 2003?

Je sais que je peux mapper un chemin UNC à une lettre de lecteur local. Cependant, je me demande s’il existe un moyen de mapper un chemin UNC à un dossier local. J'ai un programme qui a un dossier spécifique codé en dur dans le programme et je souhaite essayer de créer un dossier du même nom mappé sur un chemin UNC afin que les données puissent être accessibles à partir d'un partage réseau. Est-ce faisable? Plus précisément, il s’agit d’un serveur Windows 2003.

25
Davin Studer

Cela correspond exactement à ce que l'OP demandait: un lien symbolique pour Windows 2003 mappé sur un partage réseau. Après de nombreuses heures passées à regarder les autres et à les tester, c’est le seul composant qui fonctionne avec les partages réseau.

Pilote de liaison symbolique pour Windows XP

Cet utilitaire fonctionnera pour les mappages XP et 2003 sur un partage réseau et la création d'un lien symbolique: http://schinagl.priv.at/nt/ln/ln.html#symboliclinksforwindowsxp

Maintenant, placez cela dans un répertoire que vous avez mis sur le chemin et vous aurez la possibilité de créer des liens symboliques en utilisant senable.exe (avec symlink.sys) et ln.exe (vous en aurez besoin à partir du site ci-dessus, ainsi que de sa dépendance aux DLL d'exécution Visual C++). .

Bonus supplémentaire: Faux sur MkLink

Placez ces deux fichiers supplémentaires dans le même répertoire où vous avez senable.exe et assurez-vous que tout se trouve sur le chemin.

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"

Remarque:

Vous avez besoin des autres éléments suivants installés sur Windows 2003 (non-R2, je ne suis pas encore certain de ce dont vous avez besoin pour R2):

  • Microsoft .NET Framework 2.0 Service Pack 1 
  • Composant d'imagerie Windows
  • Windows Server 2003 Service Pack 2
  • Windows Management Framework Core (cela apporte PowerShell 2)

Forfait Chocolat

J'ai créé un paquet chocolaté qui fera tout cela pour vous: http://chocolatey.org/packages/win2003-mklink

Note importante

Contrairement aux liens symboliques classiques, vous ne pouvez pas simplement supprimer le dossier pour supprimer le dossier des liens symboliques. Si vous faites cela, il supprimera le vrai dossier sur lequel il pointe. Alors utilisez avec un soin extrême.

15
ferventcoder

Oui, il existe un moyen de mapper un chemin UNC vers un dossier local:

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

En effet, je veux qu'un serveur build utilise le dossier Develop de mon propre ordinateur en tant que dossier Develop:

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

Et voila.


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.

Note: Dans ma situation actuelle, j'avais besoin d'un autre niveau de redirection, car le programme que j'utilisais s'est rendu compte que Develop était un lien symbolique, pointant vers un ordinateur distant, et refusant de se conformer. . J'ai dit au programme de se taire et de faire ce qui est dit en lui donnant une jonction qui pointe vers une ressource locale

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

Vous ne pouvez pas le faire directement, mais si vous créez un lien symbolique, vous devriez pouvoir le pointer vers la lettre de lecteur mappé.

Net Use e: \\ shares\folder # Vous voulez configurer ceci de manière persistante ou le prochain redémarrage l’annulera.

Parcourir en utilisant cmd à votre emplacement vous voulez le lien

cd c:\dossier

mklink/d nom e: \

Maintenant, tout ce qui accède à c:\folder\name\sera accédant à \\ shares\folder \.

4
Wulfhart

Selon Microsoft, VOUS NE POUVEZ PAS mapper un dossier partagé sur un ordinateur distant (serveur) vers un dossier local. Par exemple:

  • dossier partagé sur le serveur: \\ serveur\partage1
  • partage mappé sur une machine locale: c:\MyProgram\Some_Useluf_Files_Here

Cela ne fonctionnera pas !!!! Comme Microsoft l’a déclaré, vous NE POUVEZ PAS mklink sur une machine distante, du moins pas pour Junction ou Liens durs . Vous pouvez le faire UNIQUEMENT en tant que Symbolic link, ce qui est essentiellement un raccourci. Donc, si un programme a besoin d'accéder à un dossier local identique à celui du serveur ... désolé, pas de chance !! Windows n'est pas Linux n'oublions pas que :-( 

2
dorbar

Vous ne pouvez pas le mapper directement, non. Vous pouvez essayer d'implémenter une extension d'espace de noms Shell enregistrée en tant que partie du système de fichiers afin de pouvoir la rooter où vous avez besoin, puis de lui faire accéder le chemin UNC en interne. Ce n'est pas une mince affaire à mettre en œuvre, mais cela devrait vous donner le résultat final que vous recherchez.

1
Remy Lebeau

En supposant que vous vouliez mapper \\ moo\cow vers C:\cow_files, et qu’il n’existe pas déjà de serveur appelé moo (s’il existait une possibilité de partager le dossier directement, donc je suppose qu’il n’en existe pas):

  1. Editez le fichier hosts (ou votre DNS actuel si vous le pouvez) pour mapper moo à la machine contenant C:\cow_files. (Ou à localhost si le répertoire est local pour le client qui a besoin du mappage.)

  2. Partagez C:\cow_files en tant que vache sur cette machine.

Vous devriez alors pouvoir mapper sur \\ moo\cow et obtenir les fichiers dont vous avez besoin, à moins que quelque chose ne me manque (ce qui est possible :)).

0
Leo Davidson

Après beaucoup d’essais, j’ai enfin compris que vous ne pouviez pas le faire comme je le voulais. J'ai essayé un lien symbolique à l'aide de la fonctionnalité mklink de Server 2008, mais il s'avère que l'API System.IO .NET ne reconnaît pas les liens symboliques. Donc, si vous faites un Directory.GetFiles () sur un dossier qui est symboliquement lié, une erreur sera générée.

0
Davin Studer