HYPERCONCERTO株式会社のチーフエンジニア雑記Blog

hyperconcerto株式会社のチーフエンジニアが日々気づいたことを書いています

6回目、vSphereをPowerShellで操作するときのTips

Powershellのお悩み1
LinuxのRSHみたいにリモートからスクリプトの実行はできないのでしょうか?

回答
できます。
実行するためにはいくつか事前準備が必要となります。
※Windows Server 2012R2で検証

サーバー側(スクリプトを送り込まれて実行するマシン)
Enable-PSRemoting を実行してYesで抜ける
Set-ExecutionPolicy Remotesigned にする

クライアント側(スクリプトを送り込むマシン)
Enable-PSRemoting を実行してYesで抜ける
Set-ExecutionPolicy Remotesigned にする

あとWindows girewallの許可が必要ですが、Enable-PSRemotingで勝手に穴が開くはずです。
ネットワーク機器側の設定は必要です。

Invoke-Command -ComputerName SERVER1 -Credential SERVER1\user10 -FilePath C:\Temp\Script.ps1 -ArgumentList "Arg1"

クライアント側のC:\Temp\Script.ps1がSERVER1で実行されます。
Invoke-Commandはサーバーの中にあるファイルも実行できます。
また、Administrators権限のあるユーザーを指定した場合は管理者として実行と同じ状態になるようなので
IPアドレス変更やホスト名変更など、ちょっと厄介なスクリプトも動きます。

Powershellのお悩み2
Grep的なコマンドは無いのでしょうか?

回答
どうやるんだっけ?と頭をひねってしまうけど、初歩的コマンドです。
Select-Stringというコマンドでできます。
例えばnetstat -anの結果のうちLISTENINGになってる部分だけ欲しい時は下記のように書きます。
netstat -an | Select-String LISTENING

正規表現も使えます
netstat -an | Select-String -pattern ".ISTENING"

aliasを使えばgrepとして呼び出せます。
Set-Alias grep Select-String
netstat -an | grep LISTENING