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à:

  1. 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)
  2. 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!)

È stato utile?

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top