dantegabriel
Goto Top

Powershell Netzlaufwerke trennen

Guten Abend zusammen,

ich versuche seit einiger Zeit ein kleines Powershell Skript zu schreiben, welches bei der Anmeldung automatisiert ablaufen soll, bedauerlicherweise komme ich nun an einer Stelle nicht weiter, ich hoffe ich kann hier ein wenig Hilfe finden.

Mein Problem bezieht sich auf das trennen von Netzlaufwerken unter Zuhilfenahme von WMI bzw. Com Objekten. Um das Ziel zu erreichen, habe ich es bislang auf 2 Wegen versucht. Ich denke es ist hilfreich, wenn ich erst den Code und dann eine Beschreibung anfüge, was bzw. warum ich was gemacht habe. (Achja um mein Problem konkret zu benennen, beide Ideen funktionieren nicht)

CODE 1=========
$netzlaufwerkekobj = $(New-Object -ComObject WScript Network)
$netzlaufwerke = Get-WMIObject Win32_LogicalDisk -Filter DriveType=4
foreach ($aktlaufwerk in $netzlaufwerke)
{
$aktlaufwerk | Select-Object DeviceID
$netzlaufwerkekobj.Removenetworkdrive($aktlaufwerk)
}

Okay, das war meine erste Idee, ich schaffe mit "netzlaufwerkeobj" ein COM Objekt "WScript.Network", damit ich später nicht immer das ganze Objekt ausschreiben muss. Dann habe ich eine Variable angelegt, die mir alle Laufwerke ausgibt und bereits alles bis auf die Netzlaufwerke heraus filtert. (Filter DriveType=4) Anschließend lasse ich in einer Schleife alle Objekte durchgehen, dabei ist "aktlaufwerk" die Variable die das aktuelle Laufwerk enthält. (Durchgänge = Anzahl der Laufwerke) In der Schleife soll vom aktuellen Laufwerk die ID selektiert werden, damit diese im nächsten Schritt den Laufwerksbuchstaben für das entfernen des Netzlaufwerks bereitstellt.


<######################CODE-2-######################>

#Netzlaufwerke entfernen

$netzlaufwerkekobj = $(New-Object -ComObject WScript.Network)

$netzlaufwerke = Get-WMIObject Win32_LogicalDisk -Filter DriveType=4

foreach ($aktlaufwerk in $netzlaufwerke)

{
$aktlaufwerk | Select-Object DeviceID
[string]$abc = $aktlaufwerk
$abc = $abc.substring(11) <#Gibt auf der PS @{Device=Buchstabe:} aus, welches nur ab dem 11 Zeichen angezeigt wird#>
$bcd = $abc.substring(0,2)
$netzlaufwerkekobj.Removenetworkdrive("$bcd")
}

Meine zweite Idee bestand darin, das meine erste Idee nicht funktionieren könnte, da er den Pfadbuchstaben nicht übernehmen kann, also habe ich versucht diesen als String anzugeben. Da "Select-Object DeviceID" als String eine Ausgabe der Form @{Device=Buchstabe:} schafft, schneide ich mit substring alles bis auf den Pfadbuchstaben und den Doppelpunkt ab. Anschließend füge ich den beschnittenen String in den Befehl zur Laufwerksentfernung ein. Da es sich um eine Foreachschleife handelt, müssten "abc" und "bcd" immer den aktuellen Pfadbuchstaben ausgeben. (Was unter Power GUI und der Zeilenweise wiedergabe des Codes auch in den Variablen steht)

Mein Problem ist aber, wie bereits erwähnt, das beide Ideen nicht funktionieren. Wenn ich jedoch den Befehl : >>$(New-Object -ComObject WScript.Network).Removenetworkdrive("T:")<< manuell in die Powershell eingebe, entfernt die Powershell (hier als Beispiel das Laufwerk T) das Laufwerk.

Ich verstehe aber auch nicht, warum die Powershell die manuelle Eingabe akzeptiert, die automatisierte aber nicht. (Nebenbei es ist kein Leerzeichen oder so vorhanden, wodurch es nicht klappen könnte, ich habe die Länge der abgeschnittenen Strings geprüft, sie ist wie erwartet 2 (Also Buchstabe und der Doppelpunkt)


Naja ich hoffe ihr habt eine Idee woran es liegen könnte, falls noch Angaben fehlen oder ihr noch eine Frage habt gebt mir bitte Bescheid.

mit freundlichen Grüßen:

Dante Gabriel

Content-Key: 171886

Url: https://administrator.de/contentid/171886

Printed on: April 16, 2024 at 10:04 o'clock

Member: filippg
filippg Aug 22, 2011 at 19:18:44 (UTC)
Goto Top
Hallo,

wenn was nicht funktioniert ist es ja hilfreich, wenn man schreibt, was genau nicht funktioniert (z.B. ob es eine Fehlermedlung gibt).
Aber spontan wäre mein Tipp, dass der Fehler gleich in der ersten Zeile liegt: $netzlaufwerkekobj = $(New-Object -ComObject WScript.Network) hat m.E. ein $ zu viel, $netzlaufwerkekobj = New-Object -ComObject WScript.Network könnte besser funktionieren.
Daneben der Hinweis, dass in der PowerShell auch alle cmd-Befehle funktionieren, also auch net use. Manchmal ist das einfacher...

Gruß

Filipp
Member: DanteGabriel
DanteGabriel Aug 22, 2011 at 19:47:06 (UTC)
Goto Top
Hm naja Powershell gibt schon einen Fehler aus, der sagt aber nur das die Netzwerkverbindung nicht vorhanden ist. (Was letztlich nicht stimmt.)

Fehlermeldung: "Ausnahme beim Aufrufen von "RemoveNetworkDrive" mit 1 Argument(en): "Diese Netzwerkverb
indung ist nicht vorhanden."

Die Sache mit dem $ ist glaube ich so richtig. Jedenfalls funktioniert sonst der Aufruf von Removenetworkdrive nicht mehr (wenn ich das richtig verstanden habe)

achja mit net use habe ich es nicht hinbekommen, da ich wohl eine ungültige Eingabe mit der Variablen schaffe (da er auch dort die Netzwerkverbindung nicht trennen kann). net use $bcd /delete (in der Schleife) gibt zumindest eine solche Rückmeldung.

Fehlermeldung bei net use "net.exe : Die Netzwerkverbindung konnte nicht gefunden werden."

mit freundlichen Grüßen:

Dante Gabriel
Mitglied: 60730
60730 Aug 22, 2011 at 20:25:57 (UTC)
Goto Top
moin,
wenn net use $bcd /delete nicht funktioniert, bist du dir sicher, dass du eine Verbindung zu $BCD hast?

Ps: Ich würds ja auf die altertümliche Art machen...
for %a in (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) do if exist %a:\ net use %a /d /y >nul >2nul

Klar ist die alte Holzhammermethode die sich nicht drum kümmert, ob ein Laufwerk lokal oder ein Netzwerklaufwerk ist, aber will man das in dem Fall auch wirklich wissen?
Ich vermute, der einzeiler ist trotzdem deutlich schneller (auf jeden Fall geschrieben)

Gruß
Member: bastla
bastla Aug 22, 2011 at 21:15:30 (UTC)
Goto Top
@t-mo
Und
net use * /d /y >nul 2>nul
magst Du nicht? (Ok, von Druckern war bisher nicht die Rede ...)
@DanteGabriel (BTW: Willkommen im Forum!)
Die hier verfügbare passt auch für PoSh-Scripts ... face-wink

Grüße
bastla
Member: DanteGabriel
DanteGabriel Aug 23, 2011 at 08:04:33 (UTC)
Goto Top
@timobeil

Die Holzhammermethode würde in meinem fall nichts bringen, zum einen weil das Skript (unteranderem) über Thin Clients laufen soll, und einige Laufwerke nicht entfernt werden sollen.

$bcd ist belegt, lustigerweise gibt die PS jetzt keine Fehler mehr aus, schmeißt dafür aber auch nicht alle Laufwerke raus, sondern nur ca. die Hälfte

ich schreibe mal den Auswurf der PS wenn sie abc und bcd mit ausgeben soll.

DeviceID

L:
var abc hat den Wert: L:"
var bcd hat den Wert: L:
T:
var abc hat den Wert: T:"
var bcd hat den Wert: T:
Z:
var abc hat den Wert: Z:"
var bcd hat den Wert: Z:

Naja nun sind aber Laufwerk L und z so halb noch vorhanden. Laufwerk L ist vollständig zugänglich, Laufwerk Z steht im Explorer zwar als "Nicht verbunden", was sich peer Doppelklick jedoch umgehend ändert. Laufwerk T wurde sauber getrennt.

Im Code habe ich jetzt den String noch etwas anders beschnitten, damit der mir den ganzen Quellpfad anzeigt und dort den Buchstaben sammt Doppelpunkt herausgeschnitten. (Also einen String der Form \\name\root\cimv2:Win32_LogicalDisk.DeviceID="BUCHSTABE:" )


@bastla
Danke fürs Willkommenheißen
Mitglied: 60730
60730 Aug 23, 2011 at 13:32:12 (UTC)
Goto Top
Salü und auch von mir nachträgliches willkommen.

[OT]
Die Holzhammermethode würde in meinem fall nichts bringen, zum einen weil das Skript (unteranderem) über Thin Clients laufen soll, und einige Laufwerke nicht entfernt werden sollen.

Naja - daher hab ich ja auch die Holzhammermethode und nicht den Bastlaschen Amboss genommen.

Die Schleife entfernt ja nur die Laufwerksbuchstaben, die in der Schleife genannt werden, ich hatte der einfachkeithalber ja das komplette ABC da reingemalt.
[/OT]

Gruß
Member: DanteGabriel
DanteGabriel Aug 23, 2011 at 14:04:45 (UTC)
Goto Top
@timobeil

Ja das dachte ich mir schon, ich habe nur das Problem das ich dann für alle Server (Terminal Server) die Laufwerksbuchstaben raussuchen muss, und dann noch die Skripte durchsuchen muss, welche Laufwerke erhalten bleiben sollen. (Nicht Netzlaufwerke) wenn ich das alles händisch eingeben müsste, wäre ein Automatismus wenig Sinnvoll. Aus diesem Grund hatte ich es ja extra über die DriveID versucht, die expliziet Laufwerke eines bestimmten Typs ausgibt. (Netzlaufwerk, HDD usw.)


Und Danke auch dir fürs Willkommenheißen face-smile

mit freundlichen Grüßen:

Dante Gabriel
Member: bastla
bastla Aug 23, 2011 at 14:16:22 (UTC)
Goto Top
Hallo DanteGabriel!
die Laufwerksbuchstaben raussuchen muss, und dann noch die Skripte durchsuchen muss, welche Laufwerke erhalten bleiben sollen. (Nicht Netzlaufwerke)
Mit "net use /d" können ja nur Netzlaufwerke getrennt werden (was eigentlich auch Deine Tests schon ergeben haben sollen face-wink) ...

Grüße
bastla
Member: DanteGabriel
DanteGabriel Aug 23, 2011 at 14:36:58 (UTC)
Goto Top
Hm moment jetzt komme ich nich ganz mit ^^

Also der Befehl
for %a in (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) do if exist %a:\ net use %a /d /y >nul >2nul
funktioniert bei mir so nicht, damit erhalte ich den Fehler: "Fehlende öffnende "(" nach dem Schlüsselwort "for"."

Ich hatte net use in verbindung mit der variable bcd verwendet, also in der Form "net use $bcd" und das hatte nicht funktioniert. Zum Vergleich mal die Version mit net use

$netlaufwerkewerkobj = $(New-Object -ComObject WScript.Network)
$netzlaufwerke = Get-WMIObject Win32_LogicalDisk -Filter DriveType=4
foreach ($aktlaufwerk in $netzlaufwerke)
{


$aktlaufwerk | Select-Object DeviceID 
[string]$abc = $aktlaufwerk
$abc = $abc.Substring(48)
"var abc hat den Wert: " +$abc  
$bcd = $abc.Substring(0,2) #Abschneiden des Strings auf den Laufwerksbuchstaben z.B. T:
"var bcd hat den Wert: " +$bcd  

net use $bcd
}

Dies führt zu folgender Ausgabe:
DeviceID                                                                                                                                                                     
--------                                                                                                                                                                     
L:                                                                                                                                                                           
var abc hat den Wert: L:"  
var bcd hat den Wert: L:
Lokaler Name      L:
Remotename        \\Server\Ordner
Ressourcentyp     Platte
Status            OK
Öffnungen         0
Verbindungen      1
Der Befehl wurde erfolgreich ausgeführt.

T:                                                                                                                                                                           
var abc hat den Wert: T:"  
var bcd hat den Wert: T:
Lokaler Name      T:
Remotename        \\Server\IOrdner
Ressourcentyp     Platte
Status            OK
Öffnungen         6
Verbindungen      1
Der Befehl wurde erfolgreich ausgeführt.

Z:                                                                                                                                                                           
var abc hat den Wert: Z:"  
var bcd hat den Wert: Z:
Lokaler Name      Z:
Remotename        \\Server\Ordner
Ressourcentyp     Platte
Status            OK
Öffnungen         0
Verbindungen      1
Der Befehl wurde erfolgreich ausgeführt.

Jedoch wird kein einziges Laufwerk getrennt.
Mitglied: 60730
60730 Aug 23, 2011 at 14:49:05 (UTC)
Goto Top
Salü,

Zitat von @DanteGabriel:
Hm moment jetzt komme ich nich ganz mit ^^

Also der Befehl ...
Ist eine Demo für die "Dosbox" / cmd.exe als batch müßten da jeweils zwei % statt einem % stehen.
Du willst aber eine Powershellvariante oder versuchst die Demo dem Powershell unterzujubeln.

Ich gebs zu, hätte ich explizit drauf eingehen müssen, aber irgendwie hattest du / ich an deiner Frage "nur" fehlende Code Tags zu reklamieren - ich dachte, du wärst ein alter hase, der das auf den ersten Blick erkennt.

Und bei der frage und der Lösung in Powershell denke ich halt meinem Alter entsprechend an die Kanonen und die Spatzen.

(Ich mach das Mappen wohl bis zur Rente in 25 Jahren noch mit purem cmd)

Gruß
Member: DanteGabriel
DanteGabriel Aug 23, 2011 at 14:58:13 (UTC)
Goto Top
@timobeil:

Nein ein alter hase bin ich leider nicht ^^ beschäftige mich erst seit einiger Zeit mit der Powershell und ich fand bislang weder im Netz noch im Buch (Das von Dr- Holger Schwichtenberg) einen Lösungsansatz oder die zündende Idee.

Den Befehl will ich natürlich in der Powershell ausführen, allerdings gelingt mir da die Übertragung offensichtlich nicht, wobei ich auch gerade nicht weiß welche Parameter net use in der Powershell hat, soweit ich das verstanden habe handelt es sich bei net use ja nur um eine Funktion die eine Instanzierung desselben Com Objekts aufruft, womit ich weiter oben versuchte das Problem anzugehen.

Ich hatte zugegeben auch die Idee das mappen über die Powershell auszulagern, aber ich hatte mir gedacht das ich das Skript später zertifizieren könnte, so das es nur auf speziellen Servern läuft, die das zertifikat haben. Andernfalls müsste man die Sicherheit der Powershell ja runterschrauben und die execution policy mind. auf Remote umstellen.

Achja vielleicht noch eine Amüsante Sache nebenbei, wo das mit dem Mappen erwähnst,

das Mappen via
#$netlaufwerkadd = $(New-Object -Com WScript.Network)
#$netlaufwerkadd.MapNetworkDrive("BUCHSTABE:", "\\Server\Ordner")  
funktioniert erfreulicherweise sehr gut und zuverlässig. Naja das entfernen wie man dem Thread bzw. Threadverlauf entnehmen kann leider nicht wirklich...

mit freundlichen Grüßen:

Dante Gabriel
Mitglied: 60730
60730 Aug 23, 2011 at 15:05:01 (UTC)
Goto Top
Salü,

du fühsrt doch

net use $bcd
aus und bekommst die Antwort
Der Befehl wurde erfolgreich ausgeführt.

Bei Net use /ohne /parameter /d - wird auch kein Laufwerk getrennt.

mal einfach mal in deine Zeile 14 ein
/d /y
ans ende rein.

Gruß
Member: DanteGabriel
DanteGabriel Aug 23, 2011 at 15:16:22 (UTC)
Goto Top
Ach da habe doch glatt die Aktion vergessen, muss natürlich

net use $bcd  /delete

heißen

Allerdings funktioniert dies genauso "gut" wie die andere Methode

DeviceID                                                                                                                                                                     
--------                                                                                                                                                                     
L:                                                                                                                                                                           
var abc hat den Wert: L:"  
var bcd hat den Wert: L:
L: wurde erfolgreich gelöscht.

T:                                                                                                                                                                           
var abc hat den Wert: T:"  
var bcd hat den Wert: T:
T: wurde erfolgreich gelöscht.

Z:                                                                                                                                                                           
var abc hat den Wert: Z:"  
var bcd hat den Wert: Z:
Entweder sind Dateien geöffnet, oder die Suche in den Verzeichnissen auf Z: ist noch nicht abgeschlossen.

Trotz der Aussgabe ist Laufwerk L immer noch gemappt und der Fehler von Laufwerk Z ist sehr eigenartig, da nichts auf dieses laufwerk zugreift. (Hatte es nur für den Test gemappt)

mit freundlichen Grüßen

Dante Gabriel
Member: DanteGabriel
DanteGabriel Aug 24, 2011 at 07:34:46 (UTC)
Goto Top
Ah cool ich hab den Fehler gefunden, offenbar stört es die Powershell wenn etwas mit dem Laufwerk nicht ganz stimmt. (Sei es ein Programm welches z.B. kurz vorher auf ein Laufwerk zugegriffen hat, oder wenn man ein entsprechendes Laufwerk im Explorer offen hat). Eigentümlicherweise werden dann auch alle nachstehenden Laufwerke nicht getrennt.

Habe das Skript mit net use eben mal in einer Testumgebung laufen lassen, wo nichts außer der PS und dem Betriebssystem läuft und dort funktioniert es. Jetzt bleibt jedoch noch die Frage ob es eine Art Continue Parameter oder so gibt, womit net use die Laufwerke (unabhängig ob ein Programm drauf zugreift oder nicht) entfernt.

mit freundlichen Grüßen:

Dante Gabriel
Mitglied: 60730
60730 Aug 24, 2011 at 08:38:17 (UTC)
Goto Top
Servus,

ich fass das mal zusammen...

  • du wertest mit Powershell die aktiven Laufwerke aus, via WMI prüfst du, ob das ein Netzwerklaufwerk ist
  • und dann (weil Powershell es intern nicht kann) nimmst du einen cmd Befehl, der das Laufwerk trennt.

  • Meister Bastla hat dir doch einen Zaunpfahl aufgemalt..

Zitat von @bastla:
Mit "net use /d" können ja nur Netzlaufwerke getrennt werden (was eigentlich auch Deine Tests schon ergeben haben sollen face-wink) ...
... und ich dir auch ein paar für den kompletten Zaun.

  • Es gibt einen (in den von mir verwendeten M$ Systemen) bisher immer nutzbaren, aber undokumentierten Schalter /Y - der steht für Yes und macht genau das, was du willst - das harte trennen eines Laufwerks.
Zitat von @60730:
mal einfach mal in deine Zeile 14 ein
/d /y
ans ende rein.

btw: Meine andere obige Aussage ist (fast) falsch, natürlich baue ich (wohl auch noch bis zur Rente) Loginscripte mit Kixtart.

Gruß
Member: DanteGabriel
DanteGabriel Aug 24, 2011 at 10:04:33 (UTC)
Goto Top
@timobeil

Achso jetzt verstehe ich das, aber jetzt funktioniert das dann auch endlich mal vielen Dank face-smile


Das ich einen cmd Befehl nutzen muss damit die ganze Sache läuft finde ich persönlich auch etwas ärgerlich, da es sich dann nicht mehr strickt nur um Powershell eigenen Code handelt. (Auch wenns ne Funktion ist) Aber naja, da es auf dem anderen Weg (zumindest nach meinen Versuchen) nicht funktioniert, mit net use jedoch schon hat sich die Sache erledigt.

Danke für die Hilfe

mit freundlichen Grüßen

Dante Gabriel
Mitglied: 60730
60730 Aug 24, 2011 at 10:19:44 (UTC)
Goto Top
Servus,
Zitat von @DanteGabriel:
Aber naja, da es auf dem anderen Weg (zumindest nach meinen Versuchen) nicht funktioniert, mit net use jedoch schon hat sich die Sache erledigt.

Ich schreib dir mal, was ich, als Powershell grade frisch rausgekommen ist - "erlebt" habe..

Das Mappen via Powershellinternen Befehlen funktioniert ganz wunderbar.......
....solange man sich in der Powershell bewegt, also so ähnlich wie ein set a=b mit einem vorgeschalteten setlocal und wenn man die Powershell beendet, ist der Share wech ;-(

Danke für die Hilfe

Gerne geschehen und "Danke" fürs Danke.

mit freundlichen Grüßen
retour
Member: DanteGabriel
DanteGabriel Oct 06, 2011 at 06:32:26 (UTC)
Goto Top
So, ich habe das Skript jetzt noch einmal optimiert, werde d.h. die Schwäche des vorherigen Skriptes beschreiben und dann die beiden verbesserten Versionen vorstellen.

Der alte Code
$netlaufwerkewerkobj = $(New-Object -ComObject WScript.Network)
$netzlaufwerke = Get-WMIObject Win32_LogicalDisk -Filter DriveType=4
foreach ($aktlaufwerk in $netzlaufwerke)
{$aktlaufwerk | Select-Object DeviceID 
$ghf = $aktlaufwerk
[string]$abc = $aktlaufwerk
$abc = $abc.Substring(48)
$bcd = $abc.Substring(0,2) #Abschneiden des Strings auf den Laufwerksbuchstaben z.B. T:
$netlaufwerkewerkobj.RemoveNetworkDrive("$bcd")   

Die Schwächen
Das Problem bei diesem Code ist, dass er etwas umständlich zu lesen ist und darüber hinaus die Trennung der Laufwerke vom Hostnamen abhängig ist. Weiter oben hatte ich dies ja bereits einmal erwähnt, das der String die Form "\\IP-od-Name\root\cimv2:Win32_LogicalDisk.DeviceID="BUCHSTABE:" hat. Da sich der Hostname oder der Servername in der Regel einen unterschiedlich langen Namen aufweisen, hätte man das Problem, das dieses Skript eben nur auf Rechnern läuft, deren Hostname z.B. die Länge 6 hat. Um diesem Problem entgegen zu wirken habe ich mich noch mal an den Code gesetzt und ihn auf 2 Art und Weisen optimiert.

Neuer Code Möglichkeit 1
$netlaufwerkewerkobj = $(New-Object -ComObject WScript.Network)
		$netzlaufwerke = Get-WMIObject Win32_LogicalDisk -Filter DriveType=4
		[array]$IDlaufwerke = $netzlaufwerke | Select-Object DeviceID 
		foreach ($aktl in $IDlaufwerke){		
			[string]$selectaktl = $aktl
			$zuentf=$selectaktl.Substring(11,2)
		        $netlaufwerkewerkobj.RemoveNetworkDrive("$zuentf")   

                        #net use $zuentf /d /y
			}

Der Unterschied zum alten Code ist, das die Device Informationen als Array gespeiert werden, die Var IDlaufwerke bekommt dann im Verlauf der Schleife die folgende Menge an Werten {@{DeviceID=L:}, @{DeviceID=T:}, @{DeviceID=Z:, .usw....}}, diese Zuweisung ist Eindeutig, dann schneiden wir nur noch alles ab was wir nicht brauchen (also nur noch den Laufwerksbuchstaben) und schon ist das ganze eine funktionstüchtige saubere Sache. Net use soll dabei eine Alternative zum Com Objekt darstellen. Eine Eigenheit spreche ich gleich aber noch an.

Neuer Code Möglichkeit 2
$netlaufwerkewerkobj = $(New-Object -ComObject WScript.Network)
[array]$drivename = Get-WmiObject WIN32_MappedLogicalDisk |select Caption
		foreach ($aktl in $drivename){
			[string]$bcd = $aktl
			$acd = $bcd.Substring(10,2)
			$netlaufwerkewerkobj.RemoveNetworkDrive("$acd")   

                        #net use $acd /d /y

Diese Alternative des Codes würde umgehend alle gemappten Laufwerke ausgeben und anschließend genau nach dem selben Schema arbeiten wie die erste Möglichkeit, es ist d.h. Geschmackssache was man lieber nutzen möchte. Im letzteren Fall, also der Möglichkeit 2 hat man eventuell noch den Vorteil das dass Skript einige Milisekunden schneller ist, da hier keine Filterung, sondern nur eine Auswahl des Laufwerknamens (Buchstabe) stattfindet.

Letzte Anmerkung
Ich habe in beiden Fällen den net use Befehl als Kommentar dazu geschrieben, da mir bislang noch kein Zusatz für das COM Objekt bekannt ist, mit dem man das "harte" Trennen von Laufwerken ermöglicht. Generell kann man sagen das dass Com Objekt (also RemoveNetzworkDrive) jedes Laufwerk entfernt, das mit der Powershell hinzugefügt wurde. Bei den anderen laufwerken (z.B. manuell hinzugefügte) trennt der befehl die Verbindung, entfernt diese jedoch nicht! Der net use Befehl, der wie in den vorherigen Posts beschrieben an DOS angelegt ist, trennt die Laufwerke hingegen strikt.

mfg

Dante Gabriel