21

別の資格情報 (VBS スクリプトが実行されている資格情報ではない) を使用して、VBS スクリプト内からネットワーク共有にアクセスする良い方法はありますか?

目的は、次の 2 つのタスクを実行することです。

  1. リモート共有ファイル構造をプログラムでナビゲートして、いくつかのリモート ファイルが存在することを確認し、一方のファイルをもう一方のファイルにコピーします (両方ともリモート)。
  2. ローカル ドライブ (ローカル ユーザー名/アクセス許可でアクセス) からリモート ドライブ (別の資格情報でアクセス) にファイルをコピーする

私が知る限り、FSO (Scripting.FileSystemObject) は、それを使用するアプリケーションの資格情報で常に実行されるため、FSO (Scripting.FileSystemObject) は対象外です。これは、ローカル マシンのユーザーになります。(?)

「net use」を使用してリモート共有資格情報を提供し、robocopyなどでファイルをコピーするバッチファイル(または「cmd.exe」への拡張呼び出し)を準備するためにグーグルで見つけた唯一の実行可能なアプローチ、同じコマンドシェル「セッション」内から。これは、ローカル ドライブからリモート共有にファイルをコピー/展開する場合には問題なく機能しますが、この方法でファイル システムのブラウジングを行うのは非常に複雑で脆弱です (FSO で行うように)。

私が考えたもう 1 つの可能性は、2 つのスクリプト セッションを使用することです。スクリプトを呼び出し (コマンド ラインで別の資格情報を指定)、cmd.exe セッションを実行します。最初に「ネット使用」を実行して、リモート共有を一時的な共有にマップします。次に、「実際に何かを行う」モードでそれ自体を実行し、FSO を使用します。それが完了すると (cmd.exe シェルに戻って)、「ネット使用」で一時ドライブを再び切断します。これは扱いにくく (複数のウィンドウ、一時ドライブなど)、うまくいくかどうかさえわかりません。

どちらかの方法を知っている人、または実行可能な代替手段を知っている人はいますか? (Windows 2000 マシンでは VBScript / WScript に固執します - PowerShell はありません!)

4

1 に答える 1

35

OK、私は誤解の下で働いていました-FSOは「NET USE」(またはWscript.Network「MapNetworkDrive」)で確立されたネットワーク資格情報を「取得」しないということです。

次のサンプル コードは非常にうまく機能します (一時的なネットワーク ドライブをセットアップする必要はありません)。

ServerShare = "\\192.168.3.56\d$"
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
于 2009-03-10T17:53:24.630 に答える