Questão Como tornar o mapeamento SUBST persistente entre as reinicializações?


O Windows (XP ou posterior) tem uma maneira integrada de criar mapeamentos de unidade persistentes, como os criados por SUBST? Eu encontrei uma ferramenta de terceiros psubst. Existe uma maneira de fazer isso sem ferramentas de terceiros?


155


origem


Provavelmente não mais o programa não seria necessário ... - Ivo Flipse♦
É possível, porque psubst é apenas um arquivo .bat que mucks com o registro. Veja a resposta do @ davr abaixo para detalhes. - Scott Stafford
Advertência do artigo da Wikipedia na resposta aceita: "A partir do Windows Vista, os arquivos excluídos são imediatamente excluídos permanentemente e não são movidos para a "Lixeira". Antes do Windows Vista (no Windows XP, por exemplo), os arquivos de "discos" substituídos eram movidos para a Lixeira quando excluídos." - JMD
@ IvoFlipse, essa é uma boa suposição em geral, mas neste caso é errado. A 'ferramenta de terceiros' é um arquivo em lote de 150 linhas que fornece um bom cli para modificar uma entrada de registro e limpeza para atender substregras de barra simples, mas é apenas um bonito wrapper. Você pode fazer isso sem um programa e o README para psubst explica como. Ou veja davr's answer abaixo onde ele cita o README psubst. - alexanderbird


Respostas:


Bem Citações da Wikipédia:

C:\>SUBST /?
Associates a path with a drive letter.

SUBST [drive1: [drive2:]path]
SUBST drive1: /D

  drive1:        Specifies a virtual drive to which you want to assign a path.
  [drive2:]path  Specifies a physical drive and path you want to assign to
                 a virtual drive.
  /D             Deletes a substituted (virtual) drive.

Type SUBST with no parameters to display a list of current virtual drives.

Então você pode associar caminhos com letras de unidade usando subst. o Comando SUBST Persistente (psubst) O software parece ser muito útil, e eles fornecem uma solução para executá-lo a partir da inicialização:

https://code.google.com/p/psubst/#Inconstancy

Inconstância

No entanto, o reinício de um sistema destrói um disco virtual. O que fazer? UMA   disco pode ser criado após a inicialização. Mas o que fazer, quando um disco é   necessário nos primeiros passos de uma inicialização? Por exemplo, para executar serviços?   Existe recurso do sistema para iniciar um disco virtual a partir do sistema   registro:

REGEDIT4 

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\DOS Devices] 
"Z:"="\\??\\C:\\Documents and Settings\\All Users\\Shared Documents"

Basta criar um arquivo de texto com a extensão .REG e corra   isto. Quando o próximo arranque de um sistema, o disco virtual será   existe no logon. Precisa definir um nome de disco e caminho. Observe que   cada barra invertida no caminho é duplicada.

No Windows, você pode executar o editor de registro da seguinte maneira:

  1. Comece a correr... (ou acertar Ganhar+R)
  2. Tipo: regedit
  3. No Windows Vista e acima, o UAC irá aparecer, clique "Sim".

132



É bom saber, mesmo que eu não use subst não mais. Mas nos tempos em que eu costumava, eu costumava ter um arquivo de lote sentado na minha pasta de inicialização que fez essas coisas. - Joey
Isso é incrível. (Isso requer uma reinicialização, FYI.) Nossa árvore de origem tem que começar a partir de uma letra de unidade específica para que todos os nossos PDBs sempre se alinhem em computadores diferentes. Esta configuração do registro resolve um aborrecimento que eu tive durante anos com um disco subst não estar lá com runas que é um grande aborrecimento se você precisa (raramente) executar o Visual Studio em uma conta de administrador. - Brian Reiter
Joey: Essa solução parece não funcionar no Windows 7. Ao executar um aplicativo com privilégios administrativos, a unidade substituída não fica visível para o aplicativo. - Dave Jarvis
Obrigado pela solução. FYI, se você digitar a variável no RegEdit interativamente, não duplique as barras invertidas. Ou seja, crie uma nova variável de string chamada "Z:" (sem as aspas) e defina o valor para a string mostrada acima, exceto com barras invertidas simples. - Crispy
@Advogado do diabo, \?? é um diretório virtual no namespace do gerenciador de objetos NT. Primeiro, verifica a sessão de logon DOS 'dispositivos' (na verdade, os dispositivos DOS são links simbólicos para dispositivos NT, geralmente localizados em \Device) e depois \Global?? Dispositivos DOS. No WinObj, você encontrará os dispositivos da sessão de logon \Sessions\0\DosDevices\[logon ID]. Observe que todos os dispositivos de sessão de logon são rastreados na sessão 0 (serviços) para cada ID de logon da LSA. Eles não estão correlacionados com sessões de área de trabalho. É por isso que, se você mapear uma unidade como um administrador limitado, ela não existe quando elevada; é um logon diferente. - eryksun


Instalando-o em HKEY_CURRENT_USER tem o benefício de ter diferentes configurações para cada usuário. Eu prefiro manter a configuração do espaço do usuário desde que uma dose de serviço do sistema não dependa do dispositivo.

REGEDIT4
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run]
"F Drive"="subst F: D:\\mount\\db"
"G Drive"="subst G: D:\\mount\\log"

Fonte: http://networkadminkb.com/KB/a446/how-to-use-drive-letters-mount-points-the-same-disk-drive.aspx


71



+1 Para mostrar como fazer vários mapeamentos em um arquivo reg. :-) - megaflop
1 para a facilidade disso e também explicar por que HKEY_CURRENT_USER. :) - CAD bloke
+1 para mostrar uma maneira muito elegante de fazer isso automaticamente sem um lote na pasta de inicialização - dkellner
Também pode fazer isso a partir da linha de comando (desde o servidor XP / Windows 2000): reg add HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v "F Drive" /d "subst F: D:\x\db"  NB \ só precisa escapar aqui se for o último caractere do comando subst, por exemplo quando o alvo é o diretório raiz: "subst F: D:\\"; um único \ lá seria interpretado como escapar do "seguindo-o". - stevek_mcc


Você já leu a página que você vinculou? Você não precisa da ferramenta de terceiros, você pode fazê-lo com uma entrada de registro simples, conforme detalhado nessa página.

Crie um arquivo de texto chamado 'mapdrive.reg' com estes conteúdos:

REGEDIT4 

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\DOS Devices] 
"Z:"="\\??\\C:\\Documents and Settings\\All Users\\Shared Documents" 

Em seguida, basta clicar duas vezes nele para configurar, sem necessidade de ferramentas de terceiros.


40



a vantagem da chave reg em relação ao arquivo em lote é que ele define a unidade subst antes de qualquer outro comando de inicialização ser executado, no caso de alguns deles precisarem que a unidade de subestágio funcione - davr
@Ivo: Eu diria que é um medo saudável do desconhecido;) - Isxek
Se estiver fazendo isso no regedit, certifique-se de usar barras invertidas simples. por exemplo. \ ?? \ C: \ Some \ Directory - Droj


Eu encontrei isso porque eu estava procurando uma melhoria sobre os meus scripts de inicialização subst - eles funcionaram bem, mas às vezes executados depois que as pastas quebraram na inicialização porque a minha unidade ainda não estava mapeada.

Primeiro, editei o registro, mas não consegui fazê-lo funcionar. No entanto, eu me deparei com essa alternativa, que, embora não use subst responde a mim, a pergunta, "Como fazer o mapeamento SUBST persistente através de reinicializações?" Não use subst ... (insira apropriado 'computerName' e 'pathName'):

net use u: "\\ nome_do_computador \ c $ \ nome_do_caminho" / persistente: sim

Eu adaptei isso da sugestão de Hank Arnold em esta discussão de mapeamento de unidades locais. Eu tinha imaginado que \\ myComputerName \ c poderia funcionar, mas eu não sabia aplicar o $.

Antes de tentar o comando "net use", tente navegar para

\\ nome_do_computador \ c $
 para se certificar de que você tem 'computerName' correto.


20



Excelente solução, embora com dois problemas: 1) não é visível para o sistema de arquivos local, 2) permissões ... - ashes999
se você usar \\localhost\c$\path\to\thing Ele é portátil entre máquinas (ou atualizações que alteram o nome do computador). Uma desvantagem de usar uma unidade mapeada no Win7 + é que diferentes políticas de segurança se aplicam a unidades de rede do que locais, e alguns programas simplesmente se recusam a executar uma unidade mapeada. - matt wilkie
Ele é visível para o sistema de arquivos e é visível para o sistema de arquivos local - ele é marcado como uma unidade de rede, assim como algumas unidades são marcadas como unidades removíveis. Isso não faz com que essas unidades não façam parte ou não sejam visíveis para o sistema de arquivos local - isso as torna unidades de rede / removíveis no sistema de arquivos local. - user165568
Em testes que fiz para um problema de desempenho (alguns anos atrás agora) usando a unidade de rede (localmente) montada também é mais lento do que usar o sistema de arquivos (ou subst etc.) diretamente. Esta não é uma tremenda diferença para arquivos pequenos ou uso ocasional - não como passar pela rede real para outro 'servidor' - mas é significativo. - HerbM


Solte um arquivo em lotes na sua pasta de inicialização que faz todos os SUBSTs que você deseja fazer.


7





Como o PSubst original tem algumas limitações e parece estar concluído pelo autor, tive que codificar uma nova versão para as minhas necessidades, corrigindo alguns problemas e adicionando funcionalidade e flexibilidade.

Verifique aqui o arquivo em lote da versão 3 do PSubst

https://github.com/cyberponk/psubst

Compatível com o Windows 7, Windows 8, Windows 10, Windows Server 2012

Nota: Este trabalho não tem intenção de desmerecer o autor original e só passou a existir por necessidade real, como segue:

  • Como administrador do newtork, eu tenho a necessidade constante de SUBST unidades de rede e de mexer com diferentes usuários da rede.

  • Como nem todo mundo é um especialista em Windows, imaginei que a elevação automática de administração com tratamento de erros ajudaria, com base nos comentários que eu li na Web.

  • Como algumas pessoas lutavam com a ordem dos argumentos, achei que seria melhor que o script trabalhasse com argumentos em qualquer ordem.

Não consigo me lembrar de todas as funcionalidades adicionadas, mas todas as inclusões foram feitas apenas por necessidade. Estou compartilhando o código para que os outros não encontrem os problemas que eu tive. Por isso não há intenção além de compartilhar e ajudar.


5



Por favor, dizendo "A", diga "B". Você já disse que o psubst original tem muitos problemas - por favor, aponte-os se estiverem. Por outro lado, psubst não é abandonado. Acabou de atingir o limite de seu desenvolvimento. A ferramenta original segue uma filosofia muito simples: faça algo e faça bem. Não é sobrecarregado com funcionalidade extra como lidar com o UAC e criar código vbs adicional para fazer algo mais. Uma coisa pode ser feita sobre o código original - algumas mudanças estéticas para simplificar o código e melhorar a legibilidade. - jsxt
Editado, por favor, revise. UAC e vbs são para elevação automática de administração. Eu discordo do comentário "limite de desenvolvimento", já que todas as mudanças que fiz foram para tornar o uso ainda mais simples e fácil depois que eu encontrei vários problemas usando o PSUBST. Não pretendo criticar o autor original, por isso não listarei problemas, mas ao invés disso criei soluções. Na verdade, eu propus adicionar minhas edições na ramificação original do github, mas fui recusado, então tive que criar minha própria ramificação. - cyberponk
Obrigado pelo seu feedback rápido e detalhado. Muito provavelmente eu preciso dar uma olhada para o seu desenvolvimento mais próximo. - jsxt
Meu chapéu está com você; Passei meu tempo nas trincheiras de script em lote e sei o quanto é doloroso. Esse código parece muito bom. - SilverbackNet


Na verdade, a ferramenta PSUBST une duas formas diferentes de criação de unidades substituídas no Windows. Se você quiser ter unidades persistentes entre as startups, poderá executar essa ferramenta uma vez para cada unidade necessária. Outra maneira é usar o método sugerido por "davr". a ferramenta PSUBST apenas faz o mesmo, mas permite torná-lo da maneira mais fácil.


2