Skript zum Trennen des zugeordneten Netzwerkstandorts

4526
Kruug

Ich habe einen Benutzer, der einen bestimmten Netzwerkstandort zuordnen muss O:. Jeder so oft, verliert dieses Laufwerk es ist Karte O:, aber unter verschiedenen Buchstaben zeigen, wie H:, K:und L:. Normalerweise ruft er Helpdesk (mich) an, um herunterzufahren und das Laufwerk dem richtigen Buchstaben zuzuordnen.

Während des Remap-Vorgangs stelle ich sicher, dass das Kontrollkästchen aktiviert ist, Remap on loginaber diese Einstellung scheint sich nicht durchzusetzen .

Gibt es eine Möglichkeit, diese Aufgabe zu schreiben? Normalerweise würde ich verwenden net use /delete \\server\shareoder net use x: /delete(wobei x: der Laufwerksbuchstabe ist), aber der erste funktioniert nicht, da dem Pfad ein Buchstabe zugewiesen ist, und der zweite nicht, da der Buchstabe, auf den er sich bezieht, nicht funktioniert immer das gleiche

System ist Windows NT (wir verwenden spezielle Software, die seit einiger Zeit nicht mehr aktualisiert wurde).

1
Schreiben Sie ein Skript ("Batch-Datei") für "net use" und leiten Sie es durch "find" oder "findstr", um den Laufwerksbuchstaben zu identifizieren, dem die Freigabe derzeit zugeordnet ist. Scott vor 11 Jahren 1
@ Scott Kannst du das Skript erweitern? Ich habe sehr wenig Scripting-Kenntnisse in Windows. Kruug vor 11 Jahren 0

2 Antworten auf die Frage

2
edwardbackstrom

Solange keine anderen Freigaben vorhanden sind, die Sie speichern möchten, können Sie Folgendes in einem Stapel- oder Anmeldeskript verwenden:

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

Dadurch werden alle zugewiesenen ( *) Freigaben entfernt und auf das gewünschte Laufwerk / Pfad gesetzt.

Ja, es gibt noch andere Aktien. Hast du eine, die mit dem `find` oder` findstr` arbeitet, das Scott oben erwähnt hat? Kruug vor 11 Jahren 0
Mit DOS-Batch-Scripting ist dies jedoch nicht ohne weiteres möglich. Die Freigabe zu finden ist einfach, aber das Handeln darauf ist viel schwieriger und bedeutet ein komplexeres und aufgeblähtes Skript. Ist nur ein Benutzer betroffen? Können Sie die zusätzlichen Freigaben nach dem oben aufgeführten Code hinzufügen? edwardbackstrom vor 11 Jahren 0
Es gibt eigentlich keinen Grund, das Problem zu "übertreffen". Solange der Freigabename korrekt ist, können Sie anstelle von NET USE * / delete nur NET USE \\ Server \ Share / Delete verwenden. Fahren Sie dann fort und weisen Sie den richtigen Laufwerksbuchstaben zu. edwardbackstrom vor 11 Jahren 1
Ja, ich neige dazu, dieses Problem (Over-Teching) zu haben, wenn ich ein Problem anschaue. Kruug vor 11 Jahren 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.