Скрипт для отключения сопоставленного сетевого расположения

4435
Kruug

У меня есть пользователь, которому нужно сопоставить определенное сетевое местоположение, чтобы двигаться O:. Каждый так часто, этот диск теряет это карта для O:, но будет отображаться под разными буквами, например H:, K:и L:. Нормальная процедура для него - позвонить в службу поддержки (мне), чтобы он спустился и распаковал / переназначил диск на нужную букву.

Во время процесса переназначения я проверяю флажок, Remap on loginно эта настройка, кажется, не вступает в силу.

Есть ли способ написать эту задачу? Обычно я бы использовал net use /delete \\server\shareили net use x: /delete(где x: буква диска), но первая не работает, так как букве назначен путь, а вторая не работает, так как буква, в которую она переназначается, не является всегда один и тот же.

Система - Windows NT (мы используем специализированное программное обеспечение, которое давно не обновлялось).

1
Напишите сценарий («пакетный файл»), чтобы выполнить `net use`, и направьте его через` find` или `findstr`, чтобы определить букву диска, на которую в данный момент назначен общий ресурс. Scott 10 лет назад 1
@ Scott Можете ли вы расширить этот сценарий? У меня очень мало знаний скриптинга в Windows. Kruug 10 лет назад 0

2 ответа на вопрос

2
edwardbackstrom

Пока нет других общих ресурсов, которые вы пытаетесь сохранить, вы можете использовать следующее в пакетном или входном скрипте:

 NET USE * /delete NET USE O: \\server\share 

Это удалит все назначенные ( *) общие ресурсы и установит его на нужный вам диск / путь.

Да, есть другие акции. У вас есть тот, который работает с `find` или` findstr`, который Скотт упоминал выше? Kruug 10 лет назад 0
Это можно сделать, но нелегко с помощью пакетных сценариев DOS. Найти долю легко, но действовать по ней гораздо сложнее и означает более сложный и раздутый сценарий. Это касается только одного пользователя? Можете ли вы добавить дополнительные акции после кода, указанного выше? edwardbackstrom 10 лет назад 0
На самом деле, нет никакой реальной причины «перегружать» эту проблему. Если имя общего ресурса указано правильно, вы можете просто использовать `NET USE \\ server \ share / delete` вместо` NET USE * / delete`. Затем продолжите и назначьте правильную букву диска. edwardbackstrom 10 лет назад 1
Да, я склонен иметь эту проблему (перенапряжение), когда смотрю на проблему. Kruug 10 лет назад 0
1
Scott

To identify the drive letter that the share is currently mapped to and unmap it:

@echo off for /f "tokens=2" %%D in ('net use ^| find ":" ^| find "\\server\share") do net use %%D /delete 

Comments:

  • ^ is like \ in Unix –– it turns the following character from special to non-special, or vice-versa.  We use ^| so that the interpretation of the | characters is deferred until the command inside the parentheses is parsed.
  • %%D is a FOR loop index variable.  You can use any letter you want, but, unlike normal Windows Command Prompt variables,
    • it can be only a single letter, so don’t try to use %%DRV, and
    • it is case-sensitive.
  • I included the find ":" because, when I was testing this, I got a  net use  output that looked like
OK H: \\WONDERLAND\HUMPTYDUMPTY OK Q: \\WONDERLAND\QUEENOFHEARTS OK \\WONDERLAND\CHESHIRECAT 

So you need to do something to filter out the lines that don’t include a drive letter.

  • As you may know (because I hinted at it, above), FOR is a loop construct.  Your statement(s) get executed once for each line that comes out of the net use ... | find pipeline, with %%D set to the second string (token) on the line.  If you want to do more than one command, and/or be more selective, you can do this:
for /f "tokens=2" %%D in ('net use ^| find ":" ^| find "\\server\share") do ( ... if %%D==Z: ( ... ) else ( ... ) ... ) 

Want more?  Change "tokens=2" to "tokens=2,3", and %%E will be set to the third token; i.e., the UNC that the drive letter is mapped to.