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.
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.
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++). .
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.
@echo off
SET DIR=%~dp0%
@powershell -NoProfile -ExecutionPolicy unrestricted -Command "& '%DIR%Symlink.ps1' %*"
pushd "%DIR%"
"%DIR%senable.exe" start
popd
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"
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):
J'ai créé un paquet chocolaté qui fera tout cela pour vous: http://chocolatey.org/packages/win2003-mklink
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.
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]
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 \.
Selon Microsoft, VOUS NE POUVEZ PAS mapper un dossier partagé sur un ordinateur distant (serveur) vers un dossier local. Par exemple:
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 :-(
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.
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):
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.)
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 :)).
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.