vbsで実装された共有フォルダのローカルパスを決定しますか?
2499 ワード
共有フォルダのローカルパスを決定するにはどうすればいいですか?
質問:
こんにちは、スクリプトの専門家!UNCパス(たとえば\server 1test)がある場合、スクリプトを使用して共有フォルダ(例えばC:ScriptsTestフォルダ)のローカルパスを決定できますか?
-- JVK
回答:
こんにちは、JVK.はい、おっしゃるとおりです.
ああ、そうだ.私たちはほとんど忘れてしまった.スクリプトを使用して共有フォルダのローカルパスを決定できますか?もちろんいいです(なぜ野球シーズン中に暇な人がいるのか分かりませんが).もしこれが本当にやりたいことなら、どうすればいいか教えてあげます.
ご覧のように、まず典型的なUNCパス:\atl-fs-01publicを使用しました.ちなみに、このパスはstrPathという変数に格納されます.このパス名があれば、私たちは2つのことをしなければなりません.まず、コンピュータ名(atl-fs-01)と共有名(public)を区別する必要があります.その後、コンピュータatl-fs-01に接続し、publicフォルダのローカルパスを決定する必要があります.それはどれくらい難しいですか.ちっとも難しくない.
特に、私たちが「無敵」のライバルに勝ったばかりのシナリオライターです.まだ言ってないでしょ?最後の得点は4対2です.私たちはそんなによくありませんが.コーチがいいに違いない...
本題に戻りましょう.まず、UNCパスの前の\を削除しなければなりません.他にもいくつかの方法がありますが、Replace関数を使用して、表示される各\を空の内容に置き換えるだけです.
strPath = Replace(strPath, "\\", "")
この行のコードを実行すると、変数strPathはatl-fs-01publicに等しくなります.これは、Split関数を使用してこの値を配列に分割できることを意味します.
arrPath = Split(strPath, "\")
に基づいて分離すると、最終的に2つのデータからなる配列が得られます.
? atl-fs-01
? public
言うまでもなく、これは私たちが探している2つの情報です.コンピュータ名と共有フォルダ名です.これを明らかにすると、配列の最初の項目(項0)をstrComputerという変数に、2番目の項目(項1)をstrShareという変数に割り当てます.
strComputer = arrPath(0)
strShare = arrPath(1)
では、今私たちは難しい部分に着いたのではないでしょうか.信じるかどうかにかかわらず、これは難しい部分です.その後、標準のWMIスクリプトを使用するだけです.まず、リモートコンピュータのWMIサービスに接続します.(どのリモートコンピュータですか?strComputerという変数に格納されているAtl-fs-01です.)次に、ExecQueryメソッドを使用してコンピュータ上のすべての共有フォルダのセットを取得します.
Set colItems = objWMIService.ExecQuery _
("Select * From Win32_Share Where Name = '" & strShare & "'")
良いアイデア:私たちはすべての共有フォルダを取得していませんよね?代わりに、Name属性がstrShare変数の値に等しい共有フォルダのみを取得しました.(しばらく居眠りをすると、strShareはpublic、つまり共有フォルダ名に等しい)次に、For Eachループを作成してコレクションを巡ります.(1台のコンピュータ上の共有フォルダ名が一意でなければならないため、このセットには1つしかありません)、Path属性の値を戻します.Path属性はatl-fs-01上のフォルダのローカルパスを教えてくれます.
D:\Scripts\Public
これが、UNCパスを取得し、ローカルフォルダパスを決定するために必要なすべてです.
質問:
こんにちは、スクリプトの専門家!UNCパス(たとえば\server 1test)がある場合、スクリプトを使用して共有フォルダ(例えばC:ScriptsTestフォルダ)のローカルパスを決定できますか?
-- JVK
回答:
こんにちは、JVK.はい、おっしゃるとおりです.
ああ、そうだ.私たちはほとんど忘れてしまった.スクリプトを使用して共有フォルダのローカルパスを決定できますか?もちろんいいです(なぜ野球シーズン中に暇な人がいるのか分かりませんが).もしこれが本当にやりたいことなら、どうすればいいか教えてあげます.
strPath = "\\atl-fs-01\public"
strPath = Replace(strPath, "\\", "")
arrPath = Split(strPath, "\")
strComputer = arrPath(0)
strShare = arrPath(1)
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery _
("Select * From Win32_Share Where Name = '" & strShare & "'")
For Each objItem in colItems
Wscript.Echo objItem.Path
Next
ご覧のように、まず典型的なUNCパス:\atl-fs-01publicを使用しました.ちなみに、このパスはstrPathという変数に格納されます.このパス名があれば、私たちは2つのことをしなければなりません.まず、コンピュータ名(atl-fs-01)と共有名(public)を区別する必要があります.その後、コンピュータatl-fs-01に接続し、publicフォルダのローカルパスを決定する必要があります.それはどれくらい難しいですか.ちっとも難しくない.
特に、私たちが「無敵」のライバルに勝ったばかりのシナリオライターです.まだ言ってないでしょ?最後の得点は4対2です.私たちはそんなによくありませんが.コーチがいいに違いない...
本題に戻りましょう.まず、UNCパスの前の\を削除しなければなりません.他にもいくつかの方法がありますが、Replace関数を使用して、表示される各\を空の内容に置き換えるだけです.
strPath = Replace(strPath, "\\", "")
この行のコードを実行すると、変数strPathはatl-fs-01publicに等しくなります.これは、Split関数を使用してこの値を配列に分割できることを意味します.
arrPath = Split(strPath, "\")
に基づいて分離すると、最終的に2つのデータからなる配列が得られます.
? atl-fs-01
? public
言うまでもなく、これは私たちが探している2つの情報です.コンピュータ名と共有フォルダ名です.これを明らかにすると、配列の最初の項目(項0)をstrComputerという変数に、2番目の項目(項1)をstrShareという変数に割り当てます.
strComputer = arrPath(0)
strShare = arrPath(1)
では、今私たちは難しい部分に着いたのではないでしょうか.信じるかどうかにかかわらず、これは難しい部分です.その後、標準のWMIスクリプトを使用するだけです.まず、リモートコンピュータのWMIサービスに接続します.(どのリモートコンピュータですか?strComputerという変数に格納されているAtl-fs-01です.)次に、ExecQueryメソッドを使用してコンピュータ上のすべての共有フォルダのセットを取得します.
Set colItems = objWMIService.ExecQuery _
("Select * From Win32_Share Where Name = '" & strShare & "'")
良いアイデア:私たちはすべての共有フォルダを取得していませんよね?代わりに、Name属性がstrShare変数の値に等しい共有フォルダのみを取得しました.(しばらく居眠りをすると、strShareはpublic、つまり共有フォルダ名に等しい)次に、For Eachループを作成してコレクションを巡ります.(1台のコンピュータ上の共有フォルダ名が一意でなければならないため、このセットには1つしかありません)、Path属性の値を戻します.Path属性はatl-fs-01上のフォルダのローカルパスを教えてくれます.
D:\Scripts\Public
これが、UNCパスを取得し、ローカルフォルダパスを決定するために必要なすべてです.