#背景
インフラ系の社内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