Windows PowerShell 2.0 Part2at WIN
Windows PowerShell 2.0 Part2 - 暇つぶし2ch854:名無し~3.EXE
12/03/26 01:04:33.77 oEO0u+/r
>>853
出来ました!
ありがとうございます。

855:名無し~3.EXE
12/03/27 00:50:36.77 inAh1wn/
Script Explorer for Windows PowerShell
URLリンク(www.infoq.com)

856:名無し~3.EXE
12/04/15 22:57:57.96 pkSJReQW
特定フォルダのサイズを求めたいです。以下のようにしたできたのですが、
Get-ChildItem -Path "c:\Documents and Settings" -Recurse -Force | ForEach-Object -Begin { $Len = 0 } -Process { $Len = $Len + $_.Length } -End { $Len }
ここで他のホストのフォルダを指定するにはどうしたらよいでしょうか。

857:名無し~3.EXE
12/04/20 21:03:54.55 QlVpncDd
windowsのショートカットで
powershell c:\foo\hoge.ps1
としてpowershellスクリプトを実行するようにしています.
マウスでクリックするぶんには良いのですが
cmd.exeから.lnkを実行しようとしてもリンク先のファイルをクリックしたのと
同じあつかいになるみたいでノートパッドで開かれるだけです.
.lnkをクリックした時と同じように動作させるにはどうしたらよいでしょう?

858:名無し~3.EXE
12/04/21 00:44:02.15 yTqO4Tyd
解決しました.すみません。

859:名無し~3.EXE
12/04/21 11:12:33.69 m7D/t1la
>>858
方法書いとけ

860:名無し~3.EXE
12/04/21 16:47:41.12 iaRP3Ara
> hoge.lnk

861:名無し~3.EXE
12/05/03 15:41:50.33 6zZnPu7R
フォルダ名だけ与えるとそのフォルダ内の全エクセルファイルのシート名を全て表示する。
これをなるべく短いコマンドでやることって難しいでしょうか?
書いてみたけどうまく動きません・・・

gci c:\tmp -include *.xls -recurse | % {$e.Workbooks.Open($_.fullname,$null,$true) | % ($s in $e.worksheets){$s.name}}


862:861
12/05/03 15:47:32.35 6zZnPu7R
最初の1行が抜けてました。

$e = New-Object -ComObject Excel.Application

863:名無し~3.EXE
12/05/03 17:42:27.16 6vyoHuAw
>>861
最後Foreach-Objectとforeach構文がごっちゃになってる
foreach構文はパイプラインの中では使えない

ls 省略
| % { $e.Workbooks.Open( $_.fullname ,$null,$true).worksheets } | % { $_.name }

V3だったら最後こう書けるけど、それくらい

| % { $e.Workbooks.Open( $_.fullname ,$null,$true).worksheets.name }

864:名無し~3.EXE
12/05/03 20:08:54.42 6zZnPu7R
>>863
うまくいきました。ありがとうございます!
ちなみに最後に

$e.Quit()
[void][System.Runtime.InteropServices.Marshal]::FinalReleaseComObject($e)

ってやるんですが、タスクマネージャから消えてくれません・・・
普通これで消えるんですよね?
バージョンが古い(EXCEL2000)からかも・・・

865:Himagine
12/05/03 20:30:43.90 bmFSyBqH
>>864
こんな感じかな。変数のRemoveが必要でしょうね。

[System.Runtime.Interopservices.Marshal]::ReleaseComObject($e)
Remove-Variable e


866:Himagine
12/05/03 22:00:05.38 bmFSyBqH
ごめん、Remove無くても消えるね。
ってことは、やはりバージョンだろか?

867:名無し~3.EXE
12/05/03 22:32:28.81 KDSIYBDw
$e.ExecuteExcel4Macro('CALL("Kernel32","ExitProcess","JJ",999)')

868:名無し~3.EXE
12/05/03 22:36:18.34 6zZnPu7R
>>866
レスサンクスです。
家のPCはWinXP-Homeのすごく古いもので、実際にこのスクリプトを使うのは
会社のWin7機(EXCEL2010)なので問題なく消えるような気がしてきました。
わざわざ試して頂いてありがとうございます。


869:名無し~3.EXE
12/05/03 22:47:53.65 6zZnPu7R
>>867
あっ、ありがとうございます。
「リモートプロシージャコールに失敗しました」みたいなメッセージは出ましたが、一発で消えました・・・
これで自宅でもこのスクリプトが使えます。ありがとうございました。

870:名無し~3.EXE
12/05/04 03:40:33.94 pPdyyxM3
とりあえずExcelとファイルとファイルの中のシート開くのに使った変数.Close() して変数自体を$null
最後に[GC]::Collect()しとけばだいたいあってる

871:名無し~3.EXE
12/05/19 22:43:50.06 z0tuVkey
「Sheet2が選択された状態でEXCELファイルを開く」ということをしたくて以下のコードを書いたのですがうまく動きません・・・
エラーにはならないのですが、どこが悪いのか教えて下さい。

$file="C:\aaa.xls"
$app = New-Object -ComObject Excel.Application
$app.visible = $true
$wb = $app.Workbooks.Open($file,$null,$true)
$wb.worksheets.Sheet2.select

872:871
12/05/19 23:56:56.94 z0tuVkey
自己レスです。
最後の行を↓にしたら出来ました。お騒がせしました。

$wb.worksheets.item("sheet2").select()

ただ新たな問題が出てきました。
これをやったあと画面に表示されたEXCELを画面右上の「×」ボタンで終了させるとEXCEL.EXEというプロセスが残ってしまいます。
taskkillとかするしかないんでしょうか?できればEXCEL終了と同時にプロセスも消えて欲しいのですが・・・


873:名無し~3.EXE
12/05/20 15:43:41.98 IBtJUAZy
powershell側からの参照はすべて解放してるのか?

874:名無し~3.EXE
12/05/21 07:23:50.52 XpNJnbsM
>>872
消えないのが普通じゃないかな。
>>865 に例があるように
Comオブジェクトを解放しないといけないんだと思う。



最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch