Accedi alla condivisione di rete da VBScript, ad esempio FileSystemObject
-
08-07-2019 - |
Domanda
Esiste un buon modo per accedere alle condivisioni di rete da uno script VBS, con credenziali alternative (non le credenziali con cui è in esecuzione lo script VBS)?
L'intenzione è di eseguire due attività:
- navigare programmaticamente una struttura di file di condivisione remota, al fine di confermare l'esistenza di un paio di file remoti e copiare un file sull'altro (entrambi remoti)
- copia i file da un'unità locale (accessibile con nome utente / autorizzazioni locali) su un'unità remota (accessibile con le credenziali alternative)
Per quanto ne so, FSO (Scripting.FileSystemObject) è fuori dall'immagine, perché funziona sempre con le credenziali dell'applicazione che la utilizza - che sarebbe l'utente del computer locale. (?)
L'unico approccio apparentemente valido che ho trovato mentre cercavo su Google di preparare un file batch (o una chiamata estesa a "cmd.exe") che utilizza "net use" per fornire le credenziali di condivisione remota e quindi copiare i file con robocopy o simili, all'interno della stessa shell di comando "sessione". Funzionerebbe correttamente per la copia / distribuzione di file dall'unità locale alla condivisione remota, ma sarebbe molto complicato e fragile eseguire qualsiasi tipo di esplorazione del file system (come faresti con FSO) in questo modo.
Un'altra possibilità che ho preso in considerazione riguarda due sessioni di script: si chiama lo script (fornendo le credenziali alternative nella riga di comando) ed esegue una sessione cmd.exe, che per prima cosa fa un "uso netto"; per mappare la condivisione remota su un'unità locale temporanea, quindi si esegue da solo in un "fare cose" modalità e utilizza FSO, quindi quando è terminato (indietro nella shell cmd.exe) disconnette l'unità temporanea con " net use " ancora. Questo è goffo (più finestre, unità temporanea ...) e non sono nemmeno sicuro che funzionerebbe.
Qualcuno conosce entrambi i modi o conosce un'alternativa praticabile? (attenendosi a VBScript / WScript su una macchina Windows 2000 - nessuna PowerShell!)
Soluzione
OK, stavo lavorando sotto un malinteso - che l'UST non avrebbe "raccolto" le credenziali di rete stabilite con "NET USE" (o Wscript.Network " MapNetworkDrive ").
Si scopre che funziona e il seguente codice di esempio funziona molto bene (senza la necessità di impostare unità di rete temporanee):
ServerShare = "\\192.168.3.56\d<*>quot;
UserName = "domain\username"
Password = "password"
Set NetworkObject = CreateObject("WScript.Network")
Set FSO = CreateObject("Scripting.FileSystemObject")
NetworkObject.MapNetworkDrive "", ServerShare, False, UserName, Password
Set Directory = FSO.GetFolder(ServerShare)
For Each FileName In Directory.Files
WScript.Echo FileName.Name
Next
Set FileName = Nothing
Set Directory = Nothing
Set FSO = Nothing
NetworkObject.RemoveNetworkDrive ServerShare, True, False
Set ShellObject = Nothing
Set NetworkObject = Nothing