Windowsで別のユーザーとしてコマンドプロンプト・PowerShellを実行する方法

Windows

Windowsで「コマンドプロンプト(cmd.exe)やPowerShell」を別のユーザーとして実行したい場面は意外と多くあります。例えば、管理者権限が必要な作業をしたり、他のユーザーアカウントでプログラムをテストしたりする時です。

この記事では、別のユーザーとしてコマンドライン環境を起動する3つの方法をわかりやすく解説します。それぞれの特徴と使い分けも含めて、初心者の方でも理解できるよう丁寧に説明していきます。

スポンサーリンク

別のユーザーとして実行する理由

よくある使用場面

なぜ別のユーザーで実行する必要があるの?

  1. 管理者権限での作業
    • システムファイルの変更
    • ソフトウェアのインストール
    • レジストリの編集
  2. セキュリティ上の分離
    • 危険な可能性があるスクリプトの実行
    • 信頼できないプログラムのテスト
    • 権限を制限した環境での作業
  3. 開発・テスト環境
    • 異なるユーザー権限でのアプリケーションテスト
    • ユーザーごとの設定の確認
    • 権限に関する問題の調査
  4. システム管理
    • 他のユーザーのファイルにアクセス
    • ユーザーアカウントの管理
    • トラブルシューティング

セキュリティの重要性

なぜセキュリティを意識する必要があるの?

  • 最小権限の原則:必要最小限の権限でだけ作業を行う
  • アカウント分離:日常作業と管理作業でアカウントを分ける
  • 監査ログ:誰がいつ何をしたかを記録に残す

方法①:右クリックメニューから実行(推奨)

この方法の特徴

最も直感的で使いやすい方法です。マウス操作だけで簡単に別ユーザーとして実行できます。

詳細な手順

ステップ1:対象ファイルを探す

  1. スタートメニューの場合
    • スタートボタンをクリック
    • 「cmd」または「PowerShell」と入力
    • 検索結果が表示される
  2. エクスプローラーの場合
    • エクスプローラーを開く
    • C:\Windows\System32\cmd.exe に移動
    • または C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe に移動

ステップ2:特別な右クリック操作

  1. 対象のファイル(cmd.exe や PowerShell)を見つける
  2. Shiftキーを押しながら右クリックする
  3. コンテキストメニューが表示される
  4. 別のユーザーとして実行」を選択

ステップ3:認証情報の入力

  1. 「Windows セキュリティ」ダイアログが表示される
  2. ユーザー名を入力(例:Administrator)
  3. パスワードを入力
  4. 「OK」ボタンをクリック

表示されるダイアログの見方

Windows セキュリティ
───────────────────
別のユーザーとして実行します

ユーザー名: [Administrator     ]
パスワード: [***************  ]

□ 資格情報を記憶する

    [OK]    [キャンセル]

重要な部分の説明

  • ユーザー名:実行したいユーザーアカウント名
  • パスワード:そのユーザーのパスワード
  • 資格情報を記憶する:次回以降パスワード入力を省略(セキュリティリスクあり)

成功時の確認方法

別ユーザーで実行されているかを確認する方法:

whoami

このコマンドで現在のユーザー名が表示されます。

この方法のメリット・デメリット

メリット

  • 操作が簡単で直感的
  • コマンドを覚える必要がない
  • Windows 10/11で標準対応
  • エラーが起こりにくい

デメリット

  • 自動化には向かない
  • バッチファイルからは呼び出せない
  • 毎回手動操作が必要

この章のまとめ:この方法は直感的で使いやすく、Windows 10/11で標準対応されています。日常的な使用には最もおすすめです。

方法②:runasコマンドを使用(コマンドライン)

この方法の特徴

コマンドライン(文字入力)を使って別ユーザーとして実行する方法です。自動化やスクリプトでの利用に適しています。

基本的な使い方

基本構文

runas /user:<ユーザー名> "<実行したいプログラム>"

具体的な使用例

# 管理者アカウントでコマンドプロンプトを起動
runas /user:Administrator cmd
# 特定のユーザーでメモ帳を起動
runas /user:testuser notepad.exe
# ドメインユーザーでプログラムを実行
runas /user:COMPANY\john.doe "C:\Program Files\MyApp\app.exe"

よく使われるオプション

基本オプション

# プロファイルを読み込まずに高速起動
runas /noprofile /user:Administrator cmd
# プロファイルを読み込む(デフォルト)
runas /profile /user:Administrator cmd
# パスワードを保存(セキュリティリスクあり)
runas /savecred /user:Administrator cmd
# ネットワークアクセスのみ別ユーザー
runas /netonly /user:DOMAIN\user cmd

オプションの詳細説明

オプション説明使用場面
/noprofileユーザープロファイルを読み込まない高速起動が必要な時
/profileユーザープロファイルを読み込む通常の使用
/savecred資格情報を保存頻繁に使用する時(要注意)
/netonlyネットワークアクセスのみリモートサーバーアクセス時

実際の操作例

ステップ1:コマンドプロンプトを開く

  1. Windows + R キーを押す
  2. 「cmd」と入力してEnter

ステップ2:runasコマンドを実行

# 管理者として新しいコマンドプロンプトを起動
runas /user:Administrator cmd

ステップ3:パスワードの入力

Administrator のパスワードを入力してください: 

パスワードを入力してEnterキーを押します(画面には表示されません)。

ステップ4:実行結果の確認

成功すると新しいコマンドプロンプトウィンドウが開きます。

# 現在のユーザーを確認
whoami

バッチファイルでの自動化

バッチファイル例(run_as_admin.bat)

@echo off
echo 管理者権限でコマンドプロンプトを起動します...
runas /user:Administrator cmd
pause

PowerShellスクリプトでの実行

# PowerShellスクリプト内でrunasを使用
Start-Process -FilePath "runas" -ArgumentList "/user:Administrator cmd" -Wait

エラーとトラブルシューティング

よくあるエラーメッセージ

1326: ログオンに失敗しました: ユーザー名またはパスワードが正しくありません。

→ ユーザー名やパスワードを確認してください

1327: ログオンに失敗しました: ユーザー アカウントの制限。

→ アカウントが無効化されているか、権限が不足しています

この章のまとめrunasコマンドは自動化に便利で、スクリプトやバッチファイルから呼び出すことができます。

方法③:PowerShellのStart-Processを使用

この方法の特徴

PowerShellの高機能なコマンドレットを使って、より柔軟に別ユーザーとして実行する方法です。

基本的な使い方

基本構文

$credential = Get-Credential
Start-Process -FilePath "<プログラム名>" -Credential $credential

具体的な使用例

# 認証情報を取得してPowerShellを起動
$cred = Get-Credential -UserName "Administrator" -Message "管理者のパスワードを入力してください"
Start-Process -FilePath "powershell.exe" -Credential $cred
# コマンドプロンプトを別ユーザーで起動
$cred = Get-Credential -UserName "testuser"
Start-Process -FilePath "cmd.exe" -Credential $cred
# 特定のプログラムを別ユーザーで起動
$cred = Get-Credential
Start-Process -FilePath "C:\Program Files\MyApp\app.exe" -Credential $cred

Get-Credentialダイアログの活用

認証情報の取得

# 基本的な認証ダイアログ
$cred = Get-Credential
# ユーザー名を事前指定
$cred = Get-Credential -UserName "DOMAIN\username"
# カスタムメッセージ付き
$cred = Get-Credential -UserName "Administrator" -Message "システム管理用の認証を行います"

表示されるダイアログの見方

Windows PowerShell 資格情報の要求
────────────────────────────────
システム管理用の認証を行います

ユーザー名: [Administrator     ]
パスワード: [***************  ]

    [OK]    [キャンセル]

高度な使用例

ワーキングディレクトリを指定

$cred = Get-Credential -UserName "Administrator"
Start-Process -FilePath "cmd.exe" -Credential $cred -WorkingDirectory "C:\temp"

引数を指定してプログラムを起動

$cred = Get-Credential -UserName "Administrator"
Start-Process -FilePath "powershell.exe" -ArgumentList "-NoExit", "-Command", "Get-Process" -Credential $cred

ウィンドウ状態を指定

$cred = Get-Credential -UserName "Administrator"
Start-Process -FilePath "cmd.exe" -Credential $cred -WindowStyle Maximized

スクリプトでの活用

自動化スクリプト例

# 関数として定義
function Start-AsUser {
    param(
        [string]$UserName,
        [string]$Program = "powershell.exe"
    )
    
    $cred = Get-Credential -UserName $UserName -Message "$UserName として実行します"
    
    if ($cred) {
        Start-Process -FilePath $Program -Credential $cred
        Write-Host "$Program を $UserName として起動しました" -ForegroundColor Green
    } else {
        Write-Host "認証がキャンセルされました" -ForegroundColor Red
    }
}

# 使用例
Start-AsUser -UserName "Administrator" -Program "cmd.exe"

エラーハンドリング

エラー処理を含む例

try {
    $cred = Get-Credential -UserName "Administrator"
    
    if ($cred) {
        Start-Process -FilePath "powershell.exe" -Credential $cred -ErrorAction Stop
        Write-Host "プロセスを正常に開始しました" -ForegroundColor Green
    }
} catch {
    Write-Host "エラーが発生しました: $($_.Exception.Message)" -ForegroundColor Red
}

UAC(ユーザーアカウント制御)との関係

重要な注意点:UAC昇格(管理者権限取得)と他ユーザー実行は同時にはできません。

2段階での実行例

# ステップ1: 別ユーザーでPowerShellを起動
$cred = Get-Credential -UserName "Administrator"
Start-Process -FilePath "powershell.exe" -Credential $cred

# ステップ2: 起動したPowerShell内で昇格が必要な場合
# 新しいPowerShellウィンドウ内で以下を実行
Start-Process -FilePath "powershell.exe" -Verb RunAs

この章のまとめ:PowerShellのStart-Process -Credentialは最も柔軟で、セキュアな方法です。プログラマーや上級者におすすめです。

用途別の最適な方法選び

シーン別推奨方法

使用シーン推奨方法理由
日常的な管理作業Shift + 右クリック簡単・直感的
バッチファイル・自動化runasコマンドスクリプト対応
PowerShell環境Start-Process -Credential柔軟性・セキュリティ
一時的な作業Shift + 右クリック手軽さ重視
定期的な作業runas /savecredパスワード省略可能

セキュリティレベル別の選択

高セキュリティ環境

  • PowerShellのStart-Process -Credential
  • 資格情報の保存は行わない
  • 使用後は必ずセッションを終了

一般的な環境

  • Shift + 右クリック
  • 必要に応じてrunasコマンド
  • パスワード保存は慎重に判断

開発・テスト環境

  • 用途に応じて柔軟に選択
  • 自動化が重要ならrunasやPowerShell
  • 手軽さが重要ならGUI操作

重要な注意点とセキュリティ

パスワードの取り扱い

基本原則

  • パスワードは毎回入力が原則
  • /savecredオプションは便利だが、セキュリティリスクあり
  • 共有PCでは資格情報の保存は避ける

/savecred使用時の注意

# 初回のみパスワード入力が必要
runas /savecred /user:Administrator cmd

# 2回目以降はパスワード不要(危険)
runas /savecred /user:Administrator cmd

この機能は便利ですが、以下のリスクがあります:

  • 他の人が同じコマンドを実行できてしまう
  • 悪意のあるプログラムが管理者権限を取得する可能性
  • セキュリティポリシーに違反する場合がある

UACとの関係

UAC(ユーザーアカウント制御)の理解

UAC昇格と別ユーザー実行は同時にはできません。必要な場合は段階的に操作を分けます。

正しい手順例

  1. ステップ1:別ユーザーとして実行 runas /user:Administrator cmd
  2. ステップ2:必要に応じてUAC昇格 新しく開いたコマンドプロンプト内で: # 管理者権限が必要なコマンドを実行 sfc /scannow

グループポリシーとの制約

企業環境での制限

  • RunAsによる実行制限:組織によってはRunAsが制限されている場合
  • ユーザー権限の制約:ログオン権限、サービス実行権限の制限
  • 監査ログ:RunAs実行が記録される場合

確認すべきポリシー

# ローカルセキュリティポリシーの確認
secpol.msc

主な確認項目:

  • 「サービスとしてログオン」権限
  • 「バッチジョブとしてログオン」権限
  • 「ネットワーク経由でのアクセス」権限

実践的な活用例

システム管理での活用

ファイルの権限変更

# 管理者として実行
runas /user:Administrator cmd

# 新しいコマンドプロンプトで実行
takeown /f "C:\important\file.txt"
icacls "C:\important\file.txt" /grant Everyone:F

サービスの管理

# PowerShellで管理者として実行
$cred = Get-Credential -UserName "Administrator"
Start-Process -FilePath "powershell.exe" -Credential $cred

# 新しいPowerShellで実行
Get-Service | Where-Object {$_.Status -eq "Stopped"}
Start-Service -Name "Spooler"

開発・テストでの活用

アプリケーションのテスト

# テストユーザーとしてアプリを実行
runas /user:testuser "C:\MyApp\app.exe"

異なる権限での動作確認

# 一般ユーザーとして実行
$cred = Get-Credential -UserName "normaluser"
Start-Process -FilePath "myprogram.exe" -Credential $cred

# 結果を確認
Get-Process -Name "myprogram"

トラブルシューティング

よくあるエラーと解決方法

エラー1326:ログオン失敗

1326: ログオンに失敗しました: ユーザー名またはパスワードが正しくありません。

解決方法

  • ユーザー名の確認(ドメイン名も含めて)
  • パスワードの再確認
  • アカウントの有効性確認

エラー1327:アカウント制限

1327: ログオンに失敗しました: ユーザー アカウントの制限。

解決方法

  • アカウントが無効になっていないか確認
  • ログオン時間制限の確認
  • 必要な権限が付与されているか確認

プロセスが起動しない場合

# プロセスの状態を確認
Get-Process | Where-Object {$_.ProcessName -like "*cmd*"}

# イベントログの確認
Get-EventLog -LogName System -Newest 10 | Where-Object {$_.Source -like "*Security*"}

デバッグ方法

実行ログの確認

# 詳細ログ付きで実行
runas /user:Administrator "cmd /k echo Started successfully"

PowerShellでのデバッグ

# 詳細情報付きで実行
$cred = Get-Credential -UserName "Administrator"
Start-Process -FilePath "cmd.exe" -Credential $cred -PassThru -Verbose

まとめ

Windowsで別のユーザーとしてコマンドプロンプトやPowerShellを実行する方法は、用途に応じて使い分けることが重要です。

方法別まとめ

方法特徴推奨レベル最適な用途
Shift + 右クリック簡単・直感的日常的な管理作業
runasコマンド自動化可能スクリプト・バッチ処理
Start-Process -Credentialセキュア・柔軟PowerShell環境・上級者

重要なポイント

  1. セキュリティ最優先:パスワードの取り扱いには細心の注意を
  2. 用途に応じた選択:日常使いなら簡単な方法、自動化ならrunas
  3. 段階的な権限昇格:UACと別ユーザー実行は分けて考える
  4. ログとポリシーの確認:企業環境では制約に注意

コメント

タイトルとURLをコピーしました