05/01/2008

Effettuare il mapping di un'unità di rete

A cura di Efran Cobisi


Sebbene sia possibile creare un cmdlet ad hoc in grado di effettuare il mapping di un'unità di rete utilizzando le API di Windows, ovvero la funzione WNetAddConnection2A, Windows PowerShell consente di riutilizzare un oggetto COM amico di vecchia data di chiunque abbia avuto l'occasione di scrivere script utilizzando WSH: WSHNetwork, conosciuto anche con il nome di WScript.Network.
Grazie a questo oggetto è infatti possibile creare, eliminare ed ottenere la lista delle unità di rete presenti nel PC.

Ecco come è possibile effettuare il mapping dell'UNC \\server\share all'unità di rete X:
$network = New-Object -ComObject Wscript.Network $network.MapNetworkDrive("X:", "\\server\share")
Ed ancora, ecco come rimuovere l'unità creata in precedenza:
$network = New-Object -ComObject Wscript.Network $network.RemoveNetworkDrive("X:")
È poi possibile recuperare la lista delle unità di rete presenti nel PC utilizzando un semplice blocco di codice in grado di interagire con l'output del metodo EnumNetworkDrives() dell'oggetto in analisi:
# Predisponde l'hashtable che conterrà il risultato $output = @{} # Recupera i drive di rete tramite WScript.NetWork $network = New-Object -ComObject Wscript.Network $networkDrives = $network.EnumNetworkDrives() # Effettua l'iterazione del risultato recuperato in precedenza e lo carica nell'hashtable for ($idx = 0; $idx -lt $networkDrives.Length; $idx += 2) { $output[$networkDrives.Item($idx)] = $networkDrives.Item($idx + 1) } # Visualizza l'output a video $output
Ritornerà qualcosa del tipo:
Name                           Value
----                           -----
W:                             \\tethys\AgentsManager
X:                             \\tethys\FreeSlot
Y:                             \\Plato\PoshDev
Commenti

Nessun commento disponibile.