2010/04/16

クラシック表示のシェルをオンにする


この時期はリプレースがあったりして、当然7も新たにドメインに参加することになったりしてます。
で、今回発覚したのがGPOの「クラッシック表示のシェルをオンにする」の機能変更。

このポリシー自体は、エクスプローラをクラッシック表示に切り替え、
エクスプローラーの処理の負担や消費メモリ量の軽減させ軽快な動作をはかることができるのですが。。

しかし、今までは「有効」にすることで強制的にダブルクリックになっていたのに
7からは「有効」にするとシングルクリックが適用されるという・・。ひどいッッ
混在している環境だったらどうやって統一させろというんだろう・・。

ちなみに、フォルダオプションを見ても見た目上は「ダブルクリックで開く」になってます。
とりあえず、現状適用されているかどうかを見る場合は、レジストリを見るとてっとり早いです。
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
ClassicShell  DWORD値


クラッシック表示のシェルに関してはこちらのブログで詳しく紹介されていますので、どうぞ。
attosoft.info Blog
http://attosoft.info/blog/win-accel/item-useclassicshell/

2010/04/04

タスクスケジューラ設定

4月1日、エイプリルフール。
円谷プロでは毎年手のこんだサイトを作りあげるが、
今年はTwitterの模倣、円谷ッターをやっていた。
円谷ッター(跡地)
http://tsubutter.m-78.jp/



ウルトラ兄弟と怪獣達が円谷ッターを使って、
4月1日終日ずーっとつぶやいていた。
0時から23時までほぼずっと誰かがつぶやいていたけれど、
流石に社員がずっと張り付いていたわけではあるまい。
(ゴモたんは別だろうけれどもw)

先週ツギハギで作ったTwitterスクリプトを利用しつつ、
Twitterのタスクスケジュールつぶやきができないかなぁと考えたが・・

簡単にできると思ったが、思った以上に苦労

まず、Windowsのタスク処理を見なければなるまい。
Vista,2008Serverからタスクスケジューラの機能が大きく変わった。
IT Prp: 大幅に強化されたWindows Server 2008のタスク・スケジューラ
フォルダを作成し、タスクを管理するライブラリ機能もつき管理しやすくなったようだ。


それを踏まえた上で、この記事を参照してみよう。
Hey, Scripting Guy!: タスク スケジューラを使って効率的に作業する方法はありますか
PowerShellを利用したタスク管理のスクリプトである。
上記のスクリプトを使って、「Twitter」ライブラリを作ってみる。




デフォルトのタスクスケジューラ
 . .\taskps.ps1
New-TaskFolder -folder (New-TaskObject) -path "\twitter"

Name                                                             Path
----                                                             ----
twitter                                                          \twitter

Twitterフォルダが作成された。

続いて、タスクの登録に関しては以下の記事。
Hey, Scripting Guy!: スケジュールされたタスクを複数のコンピューター上に作成する方法はありますか

と、上記を参考にしながら昨日ガシガシ作ったのだけど、
特殊なことをせず、素直にATコマンドを使えば良かったような気がする・・。
あらかじめ未来のつぶやきを設定して「おえかき うぃる」とつぶやきたかったのです。。
完成したにはしたけれど、ちょっと微妙な感じなので今回はコード公開は見送り。

2010/03/28

PowerShellでTwitter投稿

こんな記事を見た。

twitter で大学のネットワークを監視 [これでも大学職員のブログ -情報センター勤務中-]
http://d.hatena.ne.jp/daigaku-syokuin/20100326/p1

と、いうわけで探してみました。
やはりPowerShell経由でTwitter投稿するスクリプトを作っている方がいました。

SAPIEN Technologies
http://blog.sapien.com/index.php/2008/06/23/out-twitter/

Mike Ormond's Blog
http://blogs.msdn.com/mikeormond/archive/2009/01/30/updated-twitter-powershell-script.aspx

素晴らしい。で、二つのスクリプトの良いとこ取りをしてくっつけてみた。
以下をFixtwit.ps1 として保存してください。
Function Out-Twitter {

    BEGIN {
            #check for global Twitter credential
            if (!$global:Twitter_Credential) {
                $global:Twitter_Credential=Get-Credential
            }
    }

    PROCESS {
  
        #turn off error pipeline
        $erroractionpreference="SilentlyContinue"
  
        [string]$tweet=$_
  
        ##Twitter投稿関数
        function SubmitWebRequest(  
            [string] $RequestUrl,
            [string] $RequestMethod,
            [string] $RequestContentType,
            [string] $PostString,
            [string] $Username,
            [string] $Password
            )
        {
          [System.Net.ServicePointManager]::Expect100Continue = $false

          $request = [System.Net.WebRequest]::Create($RequestUrl)
          
          if ($Username) {
            $request.Credentials = new-object System.Net.NetworkCredential($Username, $Password)
          }
          
          $request.Method = $RequestMethod
        
          if ($RequestMethod -ieq "POST") {
            $request.ContentType = $RequestContentType      

            $formdata = [System.Text.Encoding]::UTF8.GetBytes($PostString)
            $request.ContentLength = $formdata.Length
            $requestStream = $request.GetRequestStream()
            $requestStream.Write($formdata, 0, $formdata.Length)
            $requestStream.Close()
          }
        
          $response = $request.GetResponse()

          $reader = new-object System.IO.StreamReader($response.GetResponseStream())
          $returnvalue = $reader.ReadToEnd()
          $reader.Close()
        
          return $returnvalue
        } #end function
      
        #Short Url
        Function Get-Snurl {
            Param([string]$link="http://www.google.com")
      
            $tinyurlrequest = "http://tinyurl.com/api-create.php?url=$link"
                       

            write-progress "Tweeting" "Getting tiny URL" -cu $tinyurlrequest
            $tinyurl = SubmitWebRequest $tinyurlrequest "GET"
            write-debug "Tweeting - Received tiny URL Response: $($tinyurl)"
            write $tinyurl
  
        }
        #search for web links using Regex
        [regex]$regex="(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?"
  
         If ($tweet -match $regex) {
                  $link=$matches[0]
          }
       
         #if an embedded url was found, convert it to a snurl link
         if ($link) {
            $snurl=Get-Snurl $link
            $tweet=$tweet.Replace($link,$snurl)
         }


        if ($tweet.Length -gt 140) {
            Write-Warning ("Your message is " + (($tweet.length)-140)  + " characters too long.")
            $clear=$True
            return
        }
      
      
        $tweetstring = [String]::Format("status={0}", $tweet)
        $request = [Net.WebRequest]::Create($url)
        $twitusername=$global:Twitter_Credential.GetNetworkCredential().Username
        $twitpassword=$global:Twitter_Credential.GetNetworkCredential().Password
      
        $twitResponseText = SubmitWebRequest `
                                    "http://twitter.com/statuses/update.xml" `
                                    "POST" `
                                    "application/x-www-form-urlencoded" `
                                    $tweetstring `
                                    $twitusername `
                                    $twitpassword
        write-debug "Tweeting - Posted status update. Response: $($twitResponseText)"

   }
    
    END {
        #if there was an error, then don't keep the global Twitter
        #credential
        if ($clear) {
            Remove-Variable Twitter_Credential -scope Global
            }
        }
      
} #end Function
 じゃば、使ってみる。
PS 2010/03/28 12:23> . .\fixtwit.ps1
PS 2010/03/28 12:24> "もう昼・・お腹すいた・・" | Out-Twitter
fixtwit.ps1 をドット化して実行。
つぶやきたい言葉をはいて、パイプを通し Out-Twitter を実行。

実行すると資格情報を聞かれるので、
Twitterのアカウントとパスワードを入力する。


入力すると処理が走り、投稿完了。

投稿されていることが確認できた。
URL短縮もされるはずなんだけど、うまく行く時と行かないときがあるような。。
なんでだろう。
↑修正しました。

あくまでツギハギなので本家のスクリプトを見に行ってください。
これをPowerShellのバックグラウンド処理を使えば監視っぽいことはできるかもですね。

2010/03/25

チェックブログふえてきました。

ブログチェックにはRSSがとても便利。
MS社員の方も多くのブログを運営していて、とても参考になります。
技術共有が簡単にでき、いろんな可能性を秘めているこの業界がやっぱり好きです。

Windows Maniax の野良さんによってマイクロソフト株式会社の社員ブログ一覧が
まとめられています。

開発系のブログも紹介されているのでチェックしてはいかがでしょうかー。

2010/03/24

PowerShellの使い方


PowerShellがいくら普及してきた、といってもいきなり
1から10までPowerShellでやるには荷が重いし、
運用管理レベルでは、仰々しく作り込みをするではなく
はじめの内はバッチの中でちょこちょことコマンドレッドを使うというレベルでいいかと思う。
慣れてきたら色々趣向をこらしてやってみるってことで。
(いまだ.NETFrameWork よくわからないし。)

例えば、ここ最近のHotFix適用状況を調べるバッチだとこんな感じで。
 @echo off
:1
echo HotFixチェック
set /p kbmonth=何ヶ月分のFotFixを出力しますか?:

powershell -command "& { Get-HotFix | ? { $_.InstalledOn -ge $(get-date).addmonths(-%kbmonth%) } }"

pause
goto 1
 これをバッチとして用意して実行すれば、
コマンドプロンプトの中でPowerShellを呼び出し、Get-HotFixコマンドレッドを使って
HotFixの適用状況を得ることができます。
HotFixチェック
何ヶ月分のFotFixを出力しますか?:1


Source        Description      HotFixID      InstalledBy          InstalledOn
------        -----------      --------      -----------          -----------
BUSO-PC       Update           KB976264      NT AUTHORITY\SYSTEM  2010/03/10...
BUSO-PC       Update           KB980302      NT AUTHORITY\SYSTEM  2010/03/23...



続行するには何かキーを押してください . . .
HotFixチェック
何ヶ月分のFotFixを出力しますか?:2

Source        Description      HotFixID      InstalledBy          InstalledOn
------        -----------      --------      -----------          -----------
BUSO-PC       Security Update  KB971468      NT AUTHORITY\SYSTEM  2010/02/10...
BUSO-PC       Security Update  KB975560      NT AUTHORITY\SYSTEM  2010/02/10...
BUSO-PC       Update           KB976264      NT AUTHORITY\SYSTEM  2010/03/10...
BUSO-PC       Update           KB976662      NT AUTHORITY\SYSTEM  2010/02/24...
BUSO-PC       Update           KB976972      NT AUTHORITY\SYSTEM  2010/01/27...

:(略

まぁはじめはこんな感じで徐々にコマンドレッドを使っていく、という形で。
しかし、この使い方でもPowerShellのリモート機能を組み合わせると結構面白いことができます。
それはまぁ、機会あればまたいずれ。