1
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

PowerShellコマンドを他の端末で遠隔実行させる方法

Posted at

#背景
インフラ系の社内SEをしていると、ユーザーのPC上でPowerShellを叩かせたいということがよくあります。急ぎでなければログオンスクリプトでも良いのですが、ログオンスクリプトだと管理者の好きなタイミングで実行されないというデメリットがあります。遠隔でユーザーのPCのPowerShellを実行する方法を調べてみました。

#目的
他のPCのPowerShellコマンドを遠隔で実行する。

#前提条件
当然ですが、遠隔操作対象となるPCの管理者権限がある前提です。

#コードの解説
###1行目:
まず、実行したいコマンドを文字列として保存します。

$command_str = '実行したいコマンド'

###2行目:
続いて、遠隔操作するPC名を指定します。

$pc_name = '遠隔操作対象のPC名'

###3行目:
Invoke-Command は他の端末を遠隔操作するためのコマンドです。
以下のようにPowerShellを打ち込むと実行コマンドが実行されます。
Invoke-Command $pc_name -ScriptBlock {実行コマンド}

ただ、↑の方法には1つ問題があります。
{}で括った中にはPowerShellで宣言した変数が利用できないのです。
例えば、以下のように入力しても$pc_nameに対してpingを打ってくれません。
Invoke-Command $pc_name -ScriptBlock {ping $pc_name}

その解決策が以下のコードになります。

Invoke-Command $pc_name -ScriptBlock {invoke-expression $args[0]} -ArgumentList $command_str

{}に引数として1行目で作成した文字列化させたコマンドを渡します。
invoke-expressionで文字列化した$command_strを実行するという仕組みです。

#全体のコード

$command_str = 'New-Item c:\tmp\test.txt -itemType Directory'
$pc_name = 'user_pc'
Invoke-Command $pc_name -ScriptBlock {invoke-expression $args[0]} -ArgumentList $command_str

1
5
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
1
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?