- PR -

ユーザが管理者権限を有しているかバッチで判定する方法

1
投稿者投稿内容
yama
会議室デビュー日: 2005/11/21
投稿数: 4
投稿日時: 2005-11-22 00:56
プログラムのインストールをバッチファイルで実行しようと考えています。

バッチファイルで管理者権限ユーザで実行しようとしているか判定する事は可能でしょうか。

このプログラムは%ERRORLEVEL%に結果を返しません。
このため、
1.架空のローカルユーザをバッチで登録しその結果で判定する
  <登録できた場合に削除処理が発生する>
2.インストールで作られるファイルが存在しない場合に権限がなっかたと判定する
  <上書きインストール時は既に存在するため判定できない>
等を考えています。

何か良い判定方法はないものでしょうか。

対象クライアントはNT、2000、XP、2003のOSがあり、
NTドメイン、ワークグループ、ActiveDirectory
のネットワークのクライアントを対象としています。
各ネットワークで運用しているユーザについてはルールはありません。
dellgate
大ベテラン
会議室デビュー日: 2004/02/20
投稿数: 198
投稿日時: 2005-11-22 11:02
バッチファイルで判定するならfind(findstr)
すればよいのではないでしょうか。


suがあれば、su使って管理者アカウント指定して
インストールさせるという方法も・・・・



[ メッセージ編集済み 編集者: dellgate 編集日時 2005-11-22 11:09 ]

[ メッセージ編集済み 編集者: dellgate 編集日時 2005-11-22 11:10 ]
yama
会議室デビュー日: 2005/11/21
投稿数: 4
投稿日時: 2005-11-23 01:35
dellgateさん有難うございます。

説明不足でした。
このプログラムは「サイレントインストール」形式で実行することができるのですが、エラーが発生しても(正常終了しても)標準出力やメッセージボックスでの表示一切ありません。
このため、> や | で受けてfindするための文字列が存在しません。
管理者用のアカウント及びそのパスワードも統一されていません。
このソフトはCDで配布し、各クライアント側で管理者権限ユーザでログイン後、実行をしてもらう予定にしています。
また、このソフトのPatchの適用等、管理者権限を必要とする処理が4本あり、RUNASコマンドの組み込みはユーザが煩雑となる、統一した管理者権限ユーザがない、パスワード未設定のアカウントの場合はこのコマンドが利用できない(かったと思う)ためこのコマンドは使用しないつもりです。
(勉強不足でヒントのsuがわかりませんが・・・)

MSDOSコマンドの範囲(管理者権限があるOSで共通に使える範囲)で実行時のユーザが管理者権限をもっているかを実行時にチェックできればと考えています。
ローカルユーザの登録コマンドで判断できそうですが、最終そのアカウントを削除するとしても、そのクライアントに不要な処理を行うことになるので、極力避けたい思っていますが、この方法以外に思いつきません。

何か良い方法があればご教授お願いします。
(中間ファイルもできれば避けたいものです。VBSは多少は理解できます)


[ メッセージ編集済み 編集者: yama 編集日時 2005-11-23 01:45 ]

[ メッセージ編集済み 編集者: yama 編集日時 2005-11-23 01:54 ]
dellgate
大ベテラン
会議室デビュー日: 2004/02/20
投稿数: 198
投稿日時: 2005-11-24 09:50
管理者権限のユーザでログオンして実行するという前提でれば、
バッチを実行した時点で、そのユーザが本当に管理者権限を有
しているかを判定すれば、よいのではないでしょうか。

プログラムが結果を返さないから・・・というのは、実行した結果
が把握できないということでり、ユーザを判定するとは直接関係が
ないと思われます。(特に、先にその処理を行っていれば)

バッチのなかに、そのプログラムを実行する処理(コマンド)を記述
していると思いますが、その前の処理でユーザ判定してください。
OKだったら処理継続、NGであれば処理終了。

引用:

MSDOSコマンドの範囲(管理者権限があるOSで共通に使える範囲)で実行時のユーザが管理者権限をもっているかを実行時にチェックできればと考えています。



例えばですが、
  echo %USERNAME% (もしくは whoami)で、ユーザ情報取得。

  net user xxxx | findstr "Administrators" で、
  そのユーザが管理者権限を有しているか判定(エラーレベルによる)
で、インストールプログラム実行前にユーザ判定することはできると思います。

バッチで行うとすればこんな感じでしょうか。VBSつかえばもっとシンプルに
なるかもしれませんがそっちは疎いので識者のかた、アドバイスお願いします。

yama
会議室デビュー日: 2005/11/21
投稿数: 4
投稿日時: 2005-11-25 00:01
dellgateさん有難うございます。

ご指摘のとおりログオンユーザが「管理者権限」を有しているかを判定できればOKです。

ご教授頂いたコード
 net user xxxx | findstr "Administrators" で

net user %username% | find /I "*administrators" としてみました。
 ドメインユーザの場合「ユーザ名が見つかりません」(net user %username% でのメッセージ)となり、ユーザアカウントの情報を得ることができませんでした。

ドメインユーザの指定方法をご存知の方ご教授お願いします。
(net user %username% /domainも試しましたがだめでした)
dellgate
大ベテラン
会議室デビュー日: 2004/02/20
投稿数: 198
投稿日時: 2005-11-25 12:11
引用:

yamaさんの書き込み (2005-11-25 00:01) より:
dellgateさん有難うございます。

ご指摘のとおりログオンユーザが「管理者権限」を有しているかを判定できればOKです。

ご教授頂いたコード
 net user xxxx | findstr "Administrators" で

net user %username% | find /I "*administrators" としてみました。
 ドメインユーザの場合「ユーザ名が見つかりません」(net user %username% でのメッセージ)となり、ユーザアカウントの情報を得ることができませんでした。

ドメインユーザの指定方法をご存知の方ご教授お願いします。
(net user %username% /domainも試しましたがだめでした)




うーん、こちらでは表示できるのですけどね。(2003/XP/200で確認しました。)
%USERNAME%を変数にセットしてやってもだめでしょうか。。。
そもそも、echo %USERNAME% で何が表示されるのでしょう。
まるちねす
ぬし
会議室デビュー日: 2004/04/28
投稿数: 302
投稿日時: 2005-11-27 15:05
NTはわかりませんが 2000以上なら

net localgroup Administrators | find /I "%username%"

あとは if errorlevel で分岐させてやればいいのでは?
yama
会議室デビュー日: 2005/11/21
投稿数: 4
投稿日時: 2005-11-29 00:27
まるちねす様、dellgate様ありがとございます。

echo %USERNAME% で 表示される内容
ログイン時に入力したユーザIDのみです(ドメイン名は付加されていません)
(xp sp2 環境で確認)
%userdomain% と%USERNAME%の文字連結¥ . @で全て試しましたが「ユーザ名が見つかりません」でした。

私の職場でのパソコン(xp sp2)はADのドメインユーザでログオンしています。
パソコンにはローカルユーザの登録を行っていません(ドメインユーザとしてはPOWERユーザ権限が付与されています)この環境下では「net user %username%」または「net user %username% /domain」は「ユーザ名が見つかりません」となります。
上記コマンドで「所属しているローカルグループ」か「所属しているグローバルグループ」にパワーユーザ権限のグループが表示されるのではと期待しましたが、エラーとなりました。(テストは行っていませんが、当部門の環境ではドメインユーザに管理者権限を付与した場合も同様のエラーとなると推測しています<ユーザ管理を行っている担当が多忙らしく管理者権限を付与してくれないため推測です>)

今回、皆様のお知恵を拝借したかったの
プログラムのインストールをするために管理者権限が必要である。
このインストールプログラムはサイレントモードで実行すると管理者権限がない場合はインストールされないが、その旨のメッセージを何も出さない
このために、インストール開始前に権限があるかチェックしインストールしたい
が趣旨です。

このため、ご教授頂いたコマンドで、ローカルユーザならチェックできることがわかりましたので、インストール用のCDの配布時に「管理者権限を有するローカルユーザでログイン後、実行下さい」とマニュアルに明記し、バッチファイルのチェックを行うことにしました。
他部門で「dellgate様」と同様のユーザ管理を行っている場合は、管理者権限を有するローカルユーザでログインしなくてもインストールができるので目的が達成できますし

まるちねす様のご助言については、明日にでも職場で試してみます。

今後とも、諸先輩方のお知恵をお借りしなければ解決できないことがあるかもわかりません。その時にはまたお知恵をお貸し下さい。


1

スキルアップ/キャリアアップ(JOB@IT)