- Published on
PsExecでPowershell経由でリモートからWindowsのアプリを起動・実行
- Authors
- Name
- Shou Arisaka nyapp.buzz/shou
- short bio
- Z世代の情報技術者。Next.jsで自作SNSを個人開発中。
PsExecを使えば、SSH経由でホストのPowershellでアプリを実行して、開くことができます。 PsExecでPowershell経由でリモートからWindowsのアプリを起動・実行する方法について紹介します。
例えば、まぁ僕の需要だと、ubuntuのサーバーで処理をしたら、windowsにjavaかautohotkeyでも使ってツールチップ通知とかメッセージボックスする、っていうことがやりたかったのです。
windowsでPsExecをインストールして使えるようにします。
PsExec - Windows Sysinternals | Microsoft Docsダウンロードして解凍。PsExec64.exeへのパスをコピーしてやれば使えます。
ubuntuでwindowsにSSHログイン。
ssh user@192.168.3.19
僕の今の環境は、ホストで開いているvirtualboxのubuntuからwindowsにsshでcmdに接続し、そのsshのなかでPsExecしてアプリを実行、という流れでやっています。
ちょっと複雑…っていうか、特殊なのかもしれません。ので、ユーザー名とパスワードなしでもいけます。 ホストからホストへPsExec64しても、同じくユーザー名とパスワードなしでいけます。自分自身へSSHするのと同じ感じです。
あいにく今実機のubuntuが使えないので、使えるようになったらそちらからはパスワードなどが必要になるか検証してみたいかと思います。
C:\Users\user\Desktop\PSTools\PsExec64.exe \\192.168.3.19 notepad # => notepadは動かない。
C:\Users\user\Desktop\PSTools\PsExec64.exe \\192.168.3.19 "java.exe -jar C:\pg\SetClipboardWithBtn\build\SetClipboardWithBtn.jar" # => エラー。
C:\Users\user\Desktop\PSTools\PsExec64.exe \\192.168.3.19 java.exe -jar C:\pg\SetClipboardWithBtn\build\SetClipboardWithBtn.jar # => エラー。
C:\Users\user\Desktop\PSTools\PsExec64.exe \\192.168.3.19 calc # => calcはなぜか正常に起動する
C:\Users\user\Desktop\PSTools\PsExec64.exe \\192.168.3.19 -d -i cmd /c notepad # => こうしてやると正常に起動する
C:\Users\user\Desktop\PSTools\PsExec64.exe \\192.168.3.19 -d -i cmd /c C:\pg\SetClipboardWithBtn\build\SetClipboardWithBtn.jar # => 同じ要領でJavaファイルでもatomでもなんでもできるようになる。
C:\Users\user\Desktop\PSTools\PsExec64.exe \\192.168.3.19 -d -i cmd /c start "" C:\pg\SetClipboardWithBtn\build\SetClipboardWithBtn.jar # => コマンドプロンプトを非表示する
C:\Users\user\Desktop\PSTools\PsExec64.exe \\192.168.3.19 -u user -p yourPassword -d -i cmd /c start "" C:\pg\SetClipboardWithBtn\build\SetClipboardWithBtn.jar # => 外部PCから接続する場合には(おそらく)ユーザー名とパスワードの設定が必要になる。
参考:
- windows - can't start notepad on remote machine using psexec - Stack Overflow
- command line - How To Execute Cmd.exe Silently? - Super User
- How to get the current logged on user on PowerShell
ユーザー名の確認:
$env:UserName
または
PS C:\pg> Get-WMIObject -class Win32_ComputerSystem | select username
username
--------
DESKTOP-HOGEHOGE\user
どっちを使うべきのかはよくわかっていない。ユーザー名だけ、なのか、コンピュータ名+ユーザー名としてユーザー名なのか。 cmdへのSSHログイン自体はユーザー名だけでいけたので…どうなんでしょう。
パスワードの確認:
windowsって普段PINでログインするので、通常のパスワードって忘れるんですよね。
あと、複雑にしてる要因がいくつかあって…。 windowsのパスワードはマイクロソフトアカウントと関連付けられている場合と、ローカルパスワードとして設定されている2パターンがあります。
まぁ…これは完全に忘れたらどうなるのか僕もよくわかっていません。僕は感で思い出せたのでよかったですが…。
15歳でWordPressサイトを立ち上げ、ウェブ領域に足を踏み入れる。翌年にはRuby on Railsを用いたマイクロサービス開発に着手し、現在はデジタル庁を支えたNext.jsによるHP作成やSaaS開発のプロジェクトに携わりながら、React.js・Node.js・TypeScriptによるモダンなウェブアプリの個人開発を趣味でも行う。
フロントエンドからバックエンドまで一貫したアジャイルなフルスタック開発を得意とし、ウェブマーケティングや広告デザインも必要に応じて担当、広告運用・SEO対策・データ分析まで行う低コストかつ高品質な顧客体験の提供が好評。
国内外から200万人を超える人々に支えられ、9周年を迎えるITブログ「yuipro」の開発者、デザイナーでありライター。現在ベータ段階の自作SNS「nyapp.buzz」を日本一の国産SNSとするべく奮闘中。