SQLの窓

2014年07月17日


PowerShell2.0 : 初めての PowerShell / ファイルのダウンロード (.NET Framework の利用)

Windows7 では PowerShell はデフォルトで利用できます。ですが、基本的には .NET Framework を利用したりするので一般的ではありません。プログラマ向きの面倒なものです。

PowerShell2.0 : 最初の設定( set-executionpolicy remotesigned の実行 )

特に、言語マニュアルというものがあるのでは無く、ヘルプから 『Windows PowerShell の About ヘルプ トピック』という解りにくところから探して行きます(本文のサンプルコードを参考にしていきます)。

ヘルプは、Windows ベースのグラフィック ユーザー インターフェイスでコマンドの実行ができる『Windows PowerShell ISE』から呼び出します



以下は、about_Automatic_Variables と言って、状態情報を格納する変数について書かれています。True や  False や Null はここにありますが他にもいろいろな値が用意されています

about_Automatic_Variables
(日本語テキストが必要な場合は、get-help about_Automatic_Variables > about_Automatic_Variables.txt を実行します)

(例)

$NULL
	NULL または空の値を格納します。文字列 "NULL" の代わりにこの変数
	を使用して、コマンドおよびスクリプトで NULL を表すことができます。
	空でない文字列またはゼロ以外の整数に変換されると、この文字列は
	TRUE として解釈されます。


また、以下は get-help Add-Type -full に書かれているサンプルを元にテストした、ファイルをダウンロードする為の二種類の簡単なコードです。後者は GUI のダウンロード進捗を示すダイアログが表示されます。

※ 前者はこちら
$obj = New-Object System.Net.WebClient
$obj.DownloadFile("http://winofsql.jp/image/winofsql.png", "C:\user\work\data\winofsql1.png")
$obj.Dispose()

▼ 6000 は、タイムアウト間隔 (ミリ秒単位)。 既定値は 100 秒です。
add-type -AssemblyName Microsoft.VisualBasic
$obj = New-Object Microsoft.VisualBasic.Devices.Network
$obj.DownloadFile(
	"http://dl.bintray.com/oneclick/rubyinstaller/rubyinstaller-2.0.0-p481.exe?direct",
	"C:\user\work\data\rubyinstaller-2.0.0-p481.exe" ,
	"",
	"",
	$true,
	6000,
	$true 
)

タイムアウトは、指定した connectionTimeout 内にサーバーが応答しない場合に発生します
いずれも、出力ファイルのフォルダに対する権限を保有している必要があります。



タグ:PowerShell
posted by lightbox at 2014-07-17 01:30 | PowerShell | このブログの読者になる | 更新情報をチェックする

2014年03月28日


PowerShell2.0 : ファイルを開くダイアログを使う

Hey, Scripting Guy! では、[System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") を使う方法が紹介されていますが Add-Type で普通に使えるのでそれでいいと思いますHey, Scripting Guy!

Windows PowerShell を使用して [ファイルを開く] ダイアログ ボックスを開く方法はありますか

これらの情報は、Windows XP の頃の情報で、Windows7 の PowerShell では 以下で示されるコード内の $OpenFileDialog.ShowHelp = $true; によって正しく実行されます( これが無いとダイアログが表示されずに、PowerShell がメモリ上で停止してしまいまいます )

これ以外の方法では、"powershell -Sta -file スクリプト" で実行すると表示されます。
利用する場合は、"powershell -file スクリプト" で実行しないと、powershell 内から .\スクリプト で実行するとダイアログがアクティブにならないので注意です
Add-Type -AssemblyName System.Windows.Forms

$OpenFileDialog = New-Object System.Windows.Forms.OpenFileDialog

$OpenFileDialog.initialDirectory = "c:\tmp"

$OpenFileDialog.filter = "All files (*.*)| *.*"

$OpenFileDialog.ShowHelp = $true;

$OpenFileDialog.ShowDialog() | Out-Null

$OpenFileDialog.filename

関連する記事

PowerShell2.0 : 最初の設定



posted by lightbox at 2014-03-28 01:01 | PowerShell | このブログの読者になる | 更新情報をチェックする

2010年04月09日


PowerShell2.0 : イベントの処理とタイマーと、関数と変数のスコープ

.NET のアセンプリのイベント処理を行う為の準備の為のテストです。関数のスコープは、現在のセッションでテストの為に表示するのに必須でした。特別な理由が無い限り運用のスクリプト内の定義はグローバルを意識して定義して処理するのがいいと思います。
# タイマー作成
$timer = New-Object Timers.Timer
# タイマー間隔
$timer.Interval = 500

# タイマーのイベント処理を登録
$job = Register-ObjectEvent `
	-inputObject $timer `
	-eventName Elapsed `
	-sourceIdentifier testEventSample `
	-Action { myTimerFunction }

# タイマーの処理
# 呼び出し側に表示させる為にグローバルスコープとして登録
$counter = 0	# このスクリプトのスコープ
function global:myTimerFunction {
	# このスクリプトのスコープで参照
	$script:counter++
	$str = get-date -uformat %s
	[System.Console]::WriteLine("OK : $counter : $str")
}

# 規定値は false
# タイマー開始
$timer.Enabled = $true


<#

# PowerShellのプロンプトから .ps1 を実行する場合、
# スクリプト内で完結させるにはこの部分を有効にします
# 有効にしない場合は、スクリプト実行後もイベントは継
# 続して実行されます
# その場合イベントを終了するには、unregister-event
# を実行して下さい

# タイマーの処理を表示させる為にこちら側に停止状態
# を連続的に作成
for($i=1;$i -le 20;$i++){
	Start-Sleep -Milliseconds 500
}

# タイマーのイベント処理を削除
unregister-event testEventSample

# 関数を削除
remove-item function:myTimerFunction

#>

"スクリプト終了"




posted by lightbox at 2010-04-09 11:49 | PowerShell | このブログの読者になる | 更新情報をチェックする

2010年04月07日


PowerShell(スクリプト)の引数を格納する配列変数 $args の扱い

$args は配列になるので、文字列に埋め込むには部分式演算子 というものを使います。これは、about_operators で説明されています。

$($args[0]).gettype().fullname は.NET Framework 型を調べていますが、これについては、about_assignment_operators の505行目あたりで説明されています。

"{0},{1}" -f $args[0], $args[1] は、.NET の書式の使い方ですが、これも about_operators にあります。

注意すべきは、引き渡す場合で、配列として区切る為の区切り文字は空白なので、, を使うと一つの引数に配列が格納されます。

----------------------------------------------------
PS C:\ps\test> .\test_002.ps1 a,b
a b,
System.Object[]
System.Object[],
----------------------------------------------------

以下は通常の場合です
----------------------------------------------------
PS C:\ps\test> .\test_002.ps1 a b
a,b
System.String
a,b
----------------------------------------------------
"$($args[0]),$($args[1])"

$($args[0]).gettype().fullname

"{0},{1}" -f $args[0], $args[1]



posted by lightbox at 2010-04-07 13:01 | PowerShell | このブログの読者になる | 更新情報をチェックする

PowerShell2.0 : Shell.Application でディレクトリ内のファイルとディレクトリの個数( .NET の文字列フォーマット )

COM の Shell.Application を単純に使っています。
この例は、Shell の英文マニュアルページに投稿されていたものです。
(Folder.Items Method (Windows))

"Folder `"{0}`" contains {1} items" -f $foldername, $count の
-f は、フォーマット演算子 と呼ばれ、about_operators に
説明があります。(文字列オブジェクトの format メソッドを使用)

※ "Folder `"$foldername`" contains $count items" でも同じ結果になります
# Shell オブジェクトを取得
$shell = new-object -com Shell.Application

# ファイル(またはディレクトリ)数を数える対象のディレクトリ
$foldername = "C:\TEMP"

# フォルダオブジェクト
$folder = $shell.namespace($foldername)

# 正しいフォルダの場合
if ($folder) {
	# ファイル一覧を持つオブジェクトを取得
	$folderitems = $folder.items()
	# 数を取得
	$count = $folderitems.count
	# 表示
	"Folder `"{0}`" contains {1} items" -f $foldername, $count
}



タグ:PowerShell
posted by lightbox at 2010-04-07 09:13 | PowerShell | このブログの読者になる | 更新情報をチェックする

2010年03月31日


PowerShell2.0 : PowerShell ISE で Excel のオブジェクトを利用して完全に終了(メモリから解放)させるには

コンソールなら良いのですが、PowerShell 統合スクリプト環境 (ISE)
だと、Windows アプリケーションなので、元となるプロセスが終了しな
いと Excel がプロセスに残ったままになります。

明示的に終了させるには、.NET プログラミングで通常行われる方法で
行いますが、作成したオブジェクトは全て $null をセットする必要が
あるかもしれません

※ 作成したオブジェクト : 少なくとも左辺に置いた変数にセットした場合
$ExcelApp = New-Object -ComObject "Excel.Application"
$ExcelApp.Quit()
$ExcelApp = $null
[System.GC]::Collect([System.GC]::MaxGeneration)
PowerShell2.0 : COM 経由で Excel のグラフを作成した後、
PDFとしてエクスポートする を ISE で実行した場合、以下の処理を
追加するとメモリから解放されました

$ExcelApp = $null
$MyChart = $null
$newChartObject = $null
$dataRange = $null
$chartObjects = $null
$MySheet = $null
$ExcelBook = $null
[System.GC]::Collect([System.GC]::MaxGeneration)
Ps_ise


タグ:PowerShell
posted by lightbox at 2010-03-31 17:40 | PowerShell | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。

また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。

※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです

対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。


※ エキスパートモードで表示しています

アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります

<% if:page_name eq 'archive' -%>
アーカイブページでのみ表示される内容
<% /if %>

<% if:page_name eq 'category' -%>
カテゴリページでのみ表示される内容
<% /if %>

<% if:page_name eq 'tag' -%>
タグページでのみ表示される内容
<% /if %>
この記述は、以下の場所で使用します
container 終わり



フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり