どちらでも自分の運用で正しく動けばいいのですが、ほんの少し落とし穴もあるようなので知っておいたほうがよさそうです。( というか、Microsoft と一緒に生きて行くにはではデフォルトというか... ) PowerShell の Add-Type と [Reflection.Assembly] 記述部分によって、最初の System. が省略できる場合もあるようですが、差が良く解らないので 全て System. から書いています。 Add-Type Add-Type では、他の使い方というか、C#のコードを利用する みたいなのもあります。 powershell -NoProfile -ExecutionPolicy Unrestricted .\addtype.ps1 ▼ コマンドラインが長いので ps.bat を Windows フォルダに作成しておきますpowershell -NoProfile -ExecutionPolicy Unrestricted %1▼ Windows7 用powershell -Sta -NoProfile -ExecutionPolicy Unrestricted %1
Add-Type -assemblyName System.Windows.Forms $obj = New-Object System.Windows.Forms.OpenFileDialog $obj.Filter = 'Excel|*.xlsx|旧 Excel|*.xls|全て|*.*' $obj.InitialDirectory = 'c:\' if ($obj.ShowDialog() -eq [System.Windows.Forms.DialogResult]::OK) { $obj.FileName } else { 'キャンセルされました' }
ダウンロードした場合は、セキュリティの警告が出るので、エディタで上書き保存するかプロパティの『セキュリティ』で許可にチェックして『適用』します。 C# のソースコードで書いたほうが簡単
$code = @" using System.Windows.Forms; public class MyClass { public static string Open() { OpenFileDialog obj = new OpenFileDialog(); obj.Filter = "Excel|*.xlsx|旧 Excel|*.xls|全て|*.*"; obj.InitialDirectory = @"C:\"; if (obj.ShowDialog() == DialogResult.OK) { return obj.FileName; } else { return "キャンセルされました"; } } } "@ Add-Type -Language CSharp -TypeDefinition $code -ReferencedAssemblies ("System.Windows.Forms") [MyClass]::Open()
[System.Reflection.Assembly]::LoadWithPartialName powershell -NoProfile -ExecutionPolicy Unrestricted .\assembly.ps1
[System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms') $obj = New-Object System.Windows.Forms.OpenFileDialog $obj.Filter = 'Excel|*.xlsx|旧 Excel|*.xls|全て|*.*' $obj.InitialDirectory = 'c:\' if ($obj.ShowDialog() -eq [System.Windows.Forms.DialogResult]::OK) { $obj.FileName } else { 'キャンセルされました' }
関連する記事 PowerShell でエクスプローラでコピーしたファイルリストを取得して、テキストのクリップボードに再度コピーしなおす 参考 PowerShellスクリプティングの第一歩(後編)
|
【PowerShellの最新記事】
- PowerShell のバージョンを確認して、最新の PowerShell(pwsh)を実行する方法
- PowerShell で System.Data.Odbc を使用して MySQL のデータを一覧表示( csv )
- PowerShell : COM 経由(New-Object) + MySQL Connector/ODBC でループ処理をしながら更新
- PowerShell でエクスプローラでコピーしたファイルリストを取得して、テキストのクリップボードに再度コピーしなおす
- PowerShell2.0 : PowerShell のコードだけで TKMP.dll を使用してメールを送信する
- PowerShell2.0 : PowerShell 内で VBのコードを記述(TKMP.dllを使用)して、exe を作成した後実行してメールを送信する
- PowerShell で PNG 画像にフォントを指定してテキストを書き込む
- PowerShell で、SQLServer2012 の SMO を使用してテーブルの create 用のスクリプトを出力する
- PowerShell より New-Object で .NET Framework を使って簡単にバイナリファイルをアップロードする
- PowerShell より COM オブジェクトを使用して、簡単にバイナリファイルをアップロードする
- PowerShell2.0 : here-string と呼ばれるヒアドキュメント( here-string )の構文
- PowerShell2.0 : 初めての PowerShell / ファイルのダウンロード (.NET Framework の利用)
- PowerShell2.0 : ファイルを開くダイアログを使う
- PowerShell2.0 : イベントの処理とタイマーと、関数と変数のスコープ
- PowerShell(スクリプト)の引数を格納する配列変数 $args の扱い
- PowerShell2.0 : Shell.Application でディレクトリ内のファイルとディレクトリの個数( .NET の文字列フォーマット )
- PowerShell2.0 : PowerShell ISE で Excel のオブジェクトを利用して完全に終了(メモリから解放)させるには
- PowerShell2.0 : 全ての日本語ヘルプファイル(テキスト)を作成するスクリプト
- PowerShell2.0 : プロンプトの変更
- PowerShell2.0 : .NET Framework のスタティックメソッドの実行