PowerShellでリモートマシンのサービスをリストする

多くのコンピューターを管理をすることはIT関係の仕事をしているとよくあることです。特に最近は仮想マシンの技術が発達して、より多くのコンピューターを管理する機会が多くなりました。それぞれのコンピューターにリモートログインをしてあるWindowsサービスがインストールされているかどうかをチェックするのは、数台のコンピューターだったら大したことはないのですが、10台、20台になるとそれだけで結構時間のかかるものです。

そこで、PowerShellのスクリプトでリモートマシンのWindowsサービスをリストすることができます。以下の例ではすべてのリモートマシンが同じ資格情報(Administrator)を使用できるものとします。

$credential = Get-Credential -Credential Administrator

$computers = “server1″,”server2″,”server3″,”server4″,”server5″,”server6″

foreach($computer in $computers)
{
    ” $computer ================”
    $allServices = Get-WMIObject Win32_Service -computer $computer -credential $credential
    $allServices | where{$_.DisplayName -match “integration”} | Format-List -Property DisplayName
}

※この記事は「徒然雑記」に掲載したものです。

[Tips] エクスプローラの右クリックメニューにpowershellを追加する

本記事は、レジストリを操作します。必ず自己責任の下において実行してください。


エクスプローラの右クリックメニューからPowerShellが起動できたら便利だとは思いませんか?

ということで、やってみたのでその方法を紹介します。

まず レジストリエディタを起動します。

powershell(コマンドプロンプトでもOK。ファイル名を指定して実行でもOK)上から regedit[Enter] で起動します。

HKEY_CLASSES_ROOT\Folder\Shellに新しいキーとしてpowershellを作成します。

つぎに、powershellの下にcommandを作成して、値のデータを「powershell.exe -noexit -command “cd ‘%L’ “」にします(下図参照)。

レジストリの編集

 

編集が終わったら、エクスプローラを開いて、任意のフォルダを右クリックしてみてください。コンテキストメニューに「powershell」が追加されていることを確認できます。

「powershell」を選択すると、今選択したフォルダをがカレントディレクトリとなってPowerShellが起動します。

pwoershell2

[Tips] メソッドを追加してみる

String型の値にダブルクォーテーションを付けて出力させる、という処理が頻繁にあったため、String型にメソッドを追加してみました。

メソッド名はAddDoubleQuoteとし、以下のようにして使用できるようにしたいと思います。

PS> $str = "Test"
PS> $str.AddDoubleQuote()
PS> "Test"

以下は、AddDoubleQuoteメソッド作成手順です。

まずは、xmlファイルを作成します。

<?xml version="1.0" encoding="utf-8" ?> 
<Types>  
  <Type> 
    <Name>System.String</Name> 
    <Members> 
      <ScriptMethod> 
        <Name>AddDoubleQuote</Name> 
        <Script> 
          '"' + $this + '"'
        </Script> 
      </ScriptMethod> 
    </Members> 
  </Type> 
</Types>

Stringクラスの拡張となるため、<Name>タグにはSystem.Stringを記述。

メソッド名は、AddDoubleQuoteとするので、<ScriptMethod>タグの中の<Name>タグの中に記述します。

そして、実際の処理は<Script>タグの中に記述します。

自分自身は$thisで表されます。ここでは$thisの両脇にダブルクォーテーションが付くようにしています。

上記のXMLファイルは、拡張子をps1xmlとして保存します。

今回は $pshome 配下に AddDoubleQuote.ps1xml という名前で保存しました。
AddDoubleQuoteメソッドを使用できるようにするには、Update-TypeDataコマンドレットを使用します。

update-typedata -prependpath C:\Windows\System32\WindowsPowerShell\v1.0\AddDoubleQuote.ps1xml

あとは、最初の例に示した方法で使用します。

PS> $str = "Test"
PS> $str.AddDoubleQuote()
PS> "Test"

追加したAddDoubleQuoteメソッドは、PowerShellコンソール単位でしか使えません。
処理を永続化したい場合は、$PROFILEに登録しておきましょう。

プロファイルがまだない場合は下記コマンドで作成します。

New-item –type file –force $profile

あとは、作成したプロファイルに下記を追加します。これで、次回以降PowerShellが起動されたときから AddDoubleQuoteメソッドが使えるようになります。

update-typedata -prependpath C:\Windows\System32\WindowsPowerShell\v1.0\AddDoubleQuote.ps1xml

IISのウェブアプリケーションをPowerShellで削除

めっちゃ久々に投稿します。よ、4年ぶり???www

開発の仕事をしていると、開発マシンのIIS内にウェブアプリケーションがたくさん作成されます。数十個または百個余りのウェブアプリケーションをIISマネージャーから右クリックして削除となると大変時間がかかりますね。Shift+クリックができないのがその大きな理由です。そこでPowerShellを使用して一気に削除する方法を紹介します。

PowerShellではIIS自体をファイルシステムのように扱うことができます。それができるようにするには、PowerShellのアイコンを右クリックして「システムモジュールをインポートする」をクリックします。

image

次にIIS:と入力してEnterキーを押すと、IISドライブが登場して、dirコマンドを入力すると以下の画像のように表示されます。

SNAGHTMLc1592

今度はSites\Defailt Web Siteに入ってdirコマンドを入力すると、以下のようにDefault Web Site内に存在するファイルやディレクトリや仮想ディレクトリがリストされます。

image 

ここで次のコマンドを入力します。以下のコマンドは本当にすべてのウェブアプリケーション、そしてそれに対応するディレクトリを削除しますので、気をつけて自己責任で実行してください。

dir | where {$_.NodeType –eq “application”} | foreach {del $_.PhysicalPath; Remove-Item $_.Name –recurse}

再びdirを入力すると、以下のようにtest1とtest2のウェブアプリケーションが削除されました。これはIISマネージャーで確認しても同じです。

image