[VBScript] ユーザログイン状態のまま管理者実行する方法

どーもボキです。

システム管理者なら知っておくべき、ユーザログイン状態のまま管理者実行する方法

    社内SEのボキは、自分たちがつくったシステムを社内ユーザに利用してもらっている。

    社内でのパソコンには、大きく2種類ある。
    1. 一人ひとりに与えられた専用PC(=管理者ログインでの利用)
    2. 複数で共用利用するPC(=ユーザログインでの利用)

    ボキたちが管理するのは2。PCの設定を変更する場合、管理者権限が必要となることが多い。
    その場合、ユーザログインのまま管理者実行できる必要がある。

    リモートデスクトップなら管理者ログインできるものの、これではPC台数分の操作が必要だ。
    ユーザログインのまま、管理者権限での操作を実現する必要がある。
    [VBScript] ユーザログイン状態のまま管理者実行する方法_a0021757_13343349.png
    そんなとき、どうするか?

ユーザログインでも管理者権限を得る方法がある!

    それは、RUNASコマンド。
    RUNASコマンドなら、ユーザログインのまま管理者ログインになり替わることができる。

    RUNAS 使用法:

    RUNAS [ [/noprofile | /profile] [/env] [/savecred | /netonly] ]
    /user:<ユーザー名> プログラム

    RUNAS [ [/noprofile | /profile] [/env] [/savecred] ]
    /smartcard [/user:<ユーザー名>] プログラム

    RUNAS /trustlevel:<信頼レベル> プログラム

    /noprofile ユーザーのプロファイルを読み込まないように指定します。
    この結果、アプリケーションをより速く読み込むことができま
    すが、一部のアプリケーションが正しく動作しない可能性があ
    ります。

    /profile ユーザーのプロファイルを読み込むように指定します。
    これは既定値です。

    /env ユーザーの環境ではなく、現在の環境を使用する場合に使います

    /netonly 指定された資格情報をリモート アクセスのみで使用する場合に
    使います。

    /savecred ユーザーが以前に保存した資格情報を使います。
    このオプションは Windows 7 Home Edition
    または Windows 7 Starter Edition では使用できません
    Edition では利用できないので無視されます。

    /smartcard 資格情報がスマート カードから提供される場合に使います。

    /user <ユーザー名> の形式は、"ユーザー@ドメイン" または
    "ドメインユーザー" です]

    /showtrustlevels /trustlevel に対して引数として使用できるレベルを表示し
    ます。

    /trustlevel <レベル> は /showtrustlevels に列挙されているレベルの
    いずれかです。

    プログラム 実行可能なコマンドラインです。下の例を参照してください。

    例:
    > runas /noprofile /user:mymachineadministrator cmd
    > runas /profile /env /user:mydomainadmin "mmc %windir%system32dsa.msc"
    > runas /env /user:user@domain.microsoft.com "notepad "my file.txt""

    注意: 要求されたときのみ、ユーザーのパスワードを入力してください。
    注意: /profile は /netonly と互換性がありません。
    注意: /savecred は /smartcard と互換性がありません。

んで、RUNASを使えば解決するのか?

    ザンネンながら、RUNASを使えばすべて解決するわけではない。

    なぜなら、RUNASは指定したユーザプロファイル(ここでは管理者ログイン)のパスワードが必要になるからだ。
    つまり、管理者ログインのパスワードを知らないと使えない。

    ならば、どうするか?

VBScriptのSendKeysでパスワード入力操作をさせればよい。

    VBScriptからRunAsを実行し、RunAsに対してSendKeysを用いてパスワードを自動入力させればよい。

    以下ソースにてユーザ名とパスワードは実行するPCにて変更すること。
    つまり、管理者名とパスワードは固定、もしくは、PC情報に紐付く情報で生成しておくとよい。

    '-------------------------------------------------------------------------------
    ' アドミニ権限で実行
    '-------------------------------------------------------------------------------
    Sub ExecuteAdmin(Command)
    Dim objWS
    Dim wsEnv
    Dim id,pw

    Set objWS = CreateObject("WScript.Shell")
    Set wsEnv = objWS.Environment("Process")

    id = wsEnv("COMPUTERNAME") & "AdminUser" ' PCローカルの管理者ユーザ
    pw = "AdminUser_Password_0123" ' 管理者ユーザのパスワード

    ' runasコマンドを実行
    objWS.Run "runas /user:" & id & " """ & Command & """" ' コマンドを「"」で囲む

    WScript.Sleep 500
    objWS.AppActivate("runas.exe") ' runasを最前面
    WScript.Sleep 500

    objWS.SendKeys(pw)
    objWS.SendKeys("{enter}")
    End Sub

ん???これって管理者ログインとそのパスワードが丸見えじゃない?

    あっバレた??
    その通り、スクリプトの中身を見られるとパスワードがダダ漏れ。

    これの対策は次回に。

にほんブログ村 IT技術ブログへ
にほんブログ村
名前
URL
削除用パスワード

※このブログはコメント承認制を適用しています。ブログの持ち主が承認するまでコメントは表示されません。

by yozda | 2020-12-20 12:28 | ボキ、しごとのヒント集める | Comments(0)

ボキの興味、書き散らかします


by ボキ
カレンダー
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31