Windows PowerShell ISE

PowerShellスクリプトの編集サポートをしてくれるWindows PowerShell ISE。本当に素晴らしい。以前はサードパーティーがいろいろエディタを出してたんだけど、PowerShell ISEさえあればPowerShellのスクリプティングには何も要りません。

image

IISのアプリケーションをすべて消す方法

IISに何十個ものウェブアプリケーションがあり、それがらもうすでに使われていない場合、IISマネージャーからだととてもじゃないけどすべてを消すには厳しいものがある。やっぱりそこでPowerShellの登場だ。プロダクション環境では気をつけて…

Import-Module WebAdministration
pushd
cd IIS:
cd 'Sites\Default Web Site'
dir | where {$_.NodeType –eq “application”} | foreach {Remove-WebApplication $_.Name}
popd

Windows Server 2008 R2におけるPowerShellでのIIS管理

仕事で使っているOSがWindows Server 2008 R2で、IIS:と入力してもIISの管理ができなかったので、ちょっとググってみたら

Import-Module WebAdministration

を実行するとできるようになりました。$profileのファイルに入れてあげると毎回入力する必要がなくなって良いかなと。

PowerShellでXmlPoke

本当にちょっとしたことなんですが、XMLデータのあるところをちょこっと変えたいという時にはNAntだとxmlpokeというタスクが便利ですね。それと同じことをPowerShellでやらなければならないことがありましたので、functionを作ってみました。

function XmlPoke([string]$xmlFilePath, [string]$XPath, [string]$value)
{
    $xml = [xml](Get-Content $xmlFilePath)
    Select-Xml -xml $xml -XPath $XPath | % {$_.Node.'#text' = $value}
    $xml.Save($xmlFilePath)
}

ツイッターからブログへの帰還

ここ3~4年はブログよりもツイッターで発言することが多かったんです。手軽、すぐに反応があるなど利点があるのですが、やはりちゃんとまとまった考えを書いて共有するという点に於いてはブログじゃなければならないんだと思います。

このブログでは、自分はソフトウェアの技術屋なので、それを中心にこれからも徐々に気長に書いていこうと思います。コンピューターが一般に浸透しはじめてからまだ本当に歴史的には浅いので、まだまだこれから人類の発展に寄与することを期待してその一助を担えればいいなあなんて思っています。

それよりなによりも、コンピューターが面白いからやってるんですけどね…

PowerShellでUnzip

これに関して検索するとたくさん出てくることと思いますが、Windowsのシェルを使わないとできないんです。つまり、Server Core環境ではShellがないので、

$shell = New-Object -ComObject Shell.Application

も使えないことがあります。そこで、.NET Framework 4.5に登場したSystem.IO.Compression.ZipFileを以下のように使うと簡単にZipファイルがPowerShellで解凍できてしまいます。当然のことながら.NET Framework 4.5はインストールしておく必要があります。

function ExtractZipFile([string]$filePath, [string]$destination)
{
    #Assemblyを読み込む。
    [System.Reflection.Assembly]::LoadWithPartialName("System.IO.Compression.FileSystem") | Out-Null
    #ファイルを解凍。
    [System.IO.Compression.ZipFile]::ExtractToDirectory($filePath, $destination)
}

PowerShellでディレクトリ内にある最新のディレクトリを取得する

関数にしてしまいましたが、一行でできちゃいますね。

function GetLatestChildDirectory($rootDir)
{
    return (dir $rootDir | where {$_.PSIsContainer} | sort CreationTime -desc | select -f 1)
}

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
}

Windowsのコマンドラインで履歴を保存

特に開発者ならWindowsでコマンドラインを使用していろいろ仕事をすることが多いと思いますが、コマンドラインって一回閉じちゃうと履歴が全部消えちゃいますよね。Ctrl+Vで貼付けだってできないし、結構不便。そんな痒いところに手が届くソフトがclink。オープンソースで無料のようです。