0
1

More than 1 year has passed since last update.

.ps1を非表示で常駐(service化)する方法

Last updated at Posted at 2022-02-23

ローカル環境:windows 10
リモート環境:Centos 7

この記事はpowershellを非表示でバックグラウンド実行させっぱなしにする方法です。

#何ができるか
.ps1スクリプトを走らせっぱなしにしておくと、最小化してもタスクバーに残るので邪魔です。PC起動時に画面を開かずserviceとしてpowershell実行します。

筆者はsshポートフォワーディングをこれで行うことで、リモート環境のjupyterを開いたりします。なお、画面を開かないのでこれで起動したpowershellに対話的な入力はできません。

#やり方
.ps1をpowershellの引数と与えサービスとして登録します。
(sshポートフォワーディングを例にしていますが、ほかのことにも使えそうです)

■GUIのあるソフトウェアをサービス化する
https://nssm.cc/download からLatest release 2014年のもの(古くても大丈夫)をダウンロード。
・解凍してnssm-2.24\nssm-2.24\win64\nssm.exe を
・環境変数Pathに設定されているフォルダに入れる
・管理者でpowershell起動 (以下、説明画像あり)
・「nssm install 任意のサービス名」と叩く。
・「任意のサービス名」はこの後使うので覚えておく。
・立ち上がったUIで
  「Path」:Powershellの.exeファイル
  「Startup directory」:任意の作業ディレクトリ
  「Arguments」:任意の.ps1ファイル
  「install service」を押す(説明画像ここまで)
sshポートフォワーディングするps1スクリプトをサービス化-01.jpg

■サービスを実行するアカウントに対し「サービスとしてログイン」を許可する。
※理由はポートフォワーディングがLocal Systemの権限ではできないため。ユーザーアカウントでサービスを動かす。
・グループポリシーエディタを開くWin+R「gpedit.msc」
※グループポリシーエディタがない場合
 (https://itojisan.xyz/trouble/17155/ で配っている「gpedit.bat」でグループポリシーエディタをインストールできる。
・グループポリシーエディタで以下を編集(以下、説明画像あり)
 コンピューターの構成 > Windows 設定 > セキュリティ 設定 > Local Policies > User Rights Assignment
  サービスとしてログオン のプロパティ
    「ユーザーまたはグループの追加」:ボタンを押す
      「選択するオブジェクト名を入れてください」:アカウント名を入力
      「名前の解決」:ボタンを押す
  「OK」「OK」、全てのウィンドウを閉じる。
・これで「サービスとしてログイン」の許可は完了。(説明画像ここまで)
sshポートフォワーディングするps1スクリプトをサービス化-02.jpg

■サービスを実行するアカウントを設定する
・「サービス」を開く(以下、説明画像あり)
・登録した「任意のサービス名」のプロパティを開く
・ログオン(タブ) > アカウント > 参照
  「選択するオブジェクト名を入れてください」:アカウント名を入力
      「名前の解決」:ボタンを押す
      「OK」
  「パスワード」:ログインに使っているもの入力
  「パスワードの確認入力」: 〃
  「OK」(説明画像ここまで)
・登録した「任意のサービス名」を右クリック > 「開始」
・.ps1が実行されている状態となる。

sshポートフォワーディングするps1スクリプトをサービス化-03.jpg

■powershellでps1を呼び出せるにしておく
サービス内部の処理で、サービスが停止してしまう場合は、
管理者権限のpowershellで

管理者powershell
Set-ExecutionPolicy RemoteSigned

と叩いてps1の実行許可を恒久的に与えておく。

##.ps1のサービス化の作業はここまでで完了しています。あとは関連情報です。

■sshポートフォワーディングの確認方法
・powershellを開き
 「Test-NetConnection -ComputerName localhost -Port 8888」と叩くと
 成功:True 失敗: failed でポートフォワーディングできているか確認できる。

■個人的な味付けをする。
・サービスの再起動設定
  「サービス」を開く
  登録した「任意のサービス名」のプロパティを開く
  ・回復(タブ) でエラー時の挙動を設定できる

この記事は以上です。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1