【PowerShell】Invole-Command –FilePath パラメタの魔法

Invoke-Command を使用するとリモートコンピューター上でコマンドレットを実行することができます。このとき、コマンドレット単体ではなく、スクリプトファイル(.ps1)を使用することができます。 Invoke-Command で .ps1 ファイルを使用する方法は2つあります。 Invoke-Command -ComputerName SV01 -FilePath .\hogehoge.ps1 Invoke-Command -ComputerName SV02 {.\hogehoge.ps1} 前者と後者の違い、わかりますか? 前者の場合は、スクリプトファイルのパスはローカルコンピューターです。後者の場合は、リモートコンピューター内のパスになります。 リモートコンピューターにコマンドレットが存在することさえ確認できていれば、スクリプトファイルをいちいち送信しなくてもよいというのは非常に便利なことです。 (参考)【PowerShell】Hyper-V 系コマンドレットを手元の Windows 7 から実行するには ~ Import-PSSession ちなみに、指定した ps1 ファイルに引数を指定したい場合にはどうしたらよいでしょう? 以下のように、-ArgumentList パラメタを使用して指定します。 Invoke-Command -ComputerName SV01 -FilePath .\hogehoge.ps1 -ArgumentList “Arg1",“Arg2",“Arg3" PowerShell…知れば知るほど奥が深いです。


【PowerShell】-ComputerName に複数のリモートコンピューターを指定するとどうなる?

Windows PowerShell のコマンドレットには、-ComputerName というパラメタを持つものが多く存在します。 これは、WMIを使用してリモートコンピューターのクラスに接続して、情報を取得したり処理を行うためのものです。 -ComputerName には以下のようにして複数のコンピューターを指定することができます。 Get-Service -ComputerName tfdc01,tfsv01 |Select-Object name,machinename Name                                                 MachineName —-                                                 ———– adfssrv                                              tfsv01 AdtAgent                                             tfdc01 AdtAgent                                             tfsv01 ADWS                                                 tfdc01 AeLookupSvc                                          tfsv01 AeLookupSvc                                          tfdc01 ・ ・ ・ 結果は、キーとなる Name の昇順で表示されていることがわかります。 もしコンピューターごとにまとめて出力するのであれば、以下のように指定すればOkです。  Get-Service -ComputerName tfdc01,tfsv01 |Sort-Object MachineName |Select-Object MachineName,Name,Status さて、ここで疑問です。 複数のコンピューター名を指定した場合、処理はパラレルで行われるのでしょうか?それとも ForEach のように順番に処理されるのでしょうか? ためしに複数のコンピューターに対して以下のコマンドレットを実行してみます。これはリモートコンピューターに接続して3秒後に現在の日時をミリ秒まで取得し表示しています。 $List = "tfsv01","tfsv02","tfsv03","tfdc01","tfdc02","tfops","tfsql2" Invoke-Command -ComputerName $List {Start-Sleep -Seconds…


【PowerShell】PSComputerName プロパティの存在を忘れずに

Windows PowerShell を使用してリモートコンピューターに対して処理を行うには、-ComputerName パラメタを使用するのが一般的です。 例えば、リモートコンピューターのサービス一覧を取得するには、以下のように入力します。 Get-Service –ComputerName Target01 結果は以下の通りです。 Status   Name               DisplayName ——   —-               ———– Stopped  AeLookupSvc        Application Experience Stopped  ALG                Application Layer Gateway Service Running  AppHostSvc         Application Host Helper Service Running  AppIDSvc           Application Identity ・ ・ ・ 出力結果にコンピューター名を含めたい場合には、以下のように書きます。 Get-Service –ComputerName Target01 | Select-Object MachineName,Name,Status MachineName                Name                                          Status ———–                —-                                          —— Target01                AeLookupSvc                                  Stopped Target01               …