コマンドを使ってもっとシンプルに実行するサンプルを作成しました。
WSHのMSDNから共有フォルダに関するサンプルについての説明の引用
テキスト スクリプト エディタに、WMI (Windows Management Instrumentation) を使って共有を作成するためのコードを入力します。共有は上記の手順で作成したフォルダに設定します。スクリプトにより、まず、WMI. に接続します。次に、セキュリティ偽装レベルおよび Windows NT 権限を設定します。これにより、ユーザーは、DACL (Discretionary Access Control List) および SACL (Security Access Control List) を設定できるようになります。さらに、新しいセキュリティ記述子を作成し、新しい共有で使用する一組の ACE (Access Control Entry) をセットアップします。最後に、作成したセキュリティ記述子を使って新しい共有を作成します。なるほど。なんか色々あってややこしいってことは分かった。
そして上記ページのサンプルソース

コマンドラインで「net share 共有名=c:\app\フォルダ /grant:everyone,full」と書くだけで共有フォルダの設定ができることを知ったうえで上記サンプルを見ると、長過ぎ。。と感じます。

共有フォルダの設定を変えるには管理者権限が必要なため、昇格処理がある分わたしのスクリプトもコマンドに比べたら長くなってしまいますが、だいぶ分かりやすいかと思います。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<package> | |
<job> | |
<script> | |
arg = WScript.Arguments | |
if(arg.length!=1){ | |
WScript.Echo('共有するフォルダを1つだけ指定してください') | |
WScript.Quit() | |
} | |
// 共有フォルダを扱うコマンドは管理者権限がないと実行できないので、昇格する | |
shellApp = new ActiveXObject('Shell.Application') | |
shellApp.ShellExecute('wscript', WScript.ScriptFullName+' //job:main "'+arg(0)+'" uac', '', 'runas') | |
</script> | |
</job> | |
<job id=main> | |
<script> | |
arg = WScript.Arguments | |
shell = new ActiveXObject('WScript.Shell') | |
shell.run('cmd /K net share 新規共有='+arg(0)+' /grant:everyone,full') | |
</script> | |
</job> | |
</package> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<package> | |
<job> | |
<script> | |
arg = WScript.Arguments | |
if(arg.length!=1){ | |
WScript.Echo('共有解除するフォルダを1つだけ指定してください') | |
WScript.Quit() | |
} | |
// 試してないけど、多分共有の解除も管理者権限が必要なので昇格する | |
shellApp = new ActiveXObject('Shell.Application') | |
shellApp.ShellExecute('wscript', WScript.ScriptFullName+' //job:main "'+arg(0)+'" uac', '', 'runas') | |
</script> | |
</job> | |
<job id=main> | |
<script> | |
arg = WScript.Arguments | |
path = arg(0) | |
// 共有設定しているフォルダのリストを取得して共有名を調べる | |
arr共有=[] | |
objEnum = new Enumerator(WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer().ExecQuery("Select * From Win32_Share")) | |
共有名 = '' | |
for(i=0; !objEnum.atEnd() ;objEnum.moveNext()){ | |
item = objEnum.item() | |
if(path==item.path){ | |
共有名 = item.name | |
break | |
} | |
} | |
if(!共有名){ | |
WScript.Echo('下記Pathフォルダは共有されていません。\n\n'+path) | |
WScript.Quit() | |
} | |
shell = new ActiveXObject('WScript.Shell') | |
shell.run('cmd /K net share '+共有名+' /delete') | |
</script> | |
</job> | |
</package> |
以下のように、設定用ファイルと解除用ファイルを作成して

共有したいフォルダを設定用ファイルにドラッグ&ドロップすると
「ユーザーアカウント制御」の画面が表示されて、許可すると以下の画面が表示されます。

net shareコマンドで共有フォルダのリストを表示すると、以下のように「新規共有」という名前が追加されています。

同様に、共有中のフォルダを解除用ファイルにドラッグ&ドロップすると
共有フォルダとして追加する時と同様にユーザーアカウント制御制御の画面が表示されます。その画面で実行を許可すると、以下の画面が表示されます。

もう一度net shareコマンドで共有フォルダの一覧を確認すると「新規共有」がなくなっていることが確認できました。

0 件のコメント:
コメントを投稿