プロが教えるわが家の防犯対策術!

私、とある理由によりC#にて作成したものをPowerShellにて作り直しを試みております。会社での利用が目的であり、PowerShellのVer2という制限がある為、ZipFileクラスを使って何とかしようとしています。
 実現したいことを大まかには下記の流れです。(2,3は質問とは直接関係ありません)
  1.Zip書庫内のファイルを一つずつチェック
  2.ある条件にて必要なものだけを解凍対象とする
  3.解凍対象ファイルをファイル名を変更するのでその準備
  4.指定フォルダに変更後名称にて解凍する

以下,PowerShellにて作成してみたものの抜粋ですが、
Add-Type -AssemblyName "System.IO.Compression.FileSystem"
Add-Type -AssemblyName "System.IO.Compression"
  [System.IO.Compression.Zipfile]::OpenRead("対象.zipパス").Entries | %($_){}
にて【ZipArchiveEntry】を一つづ取得し,ForEach内にて、
  $_.[System.IO.Compression.ZipFileExtensions]::ExtractToFile("解凍先ファイルパス",1)
を実行するところでエラーとなります。
どなたかご教授ください!もしくは他の方法もあるでしょうか?
(今,次案としているのは,C#ソースをそのまま書き込むという方法です)


<元としているC#ソース>
using (ZipArchive ZA = ZipFile.OpenRead("対象.zipパス"))
{//書庫内のファイルとディレクトリを列挙する
foreach (ZipArchiveEntry ZAE in ZA.Entries)
{ ~この間でファイルチェックおよび変更後ファイル名構築~
ZAE.ExtractToFile("解凍先ファイルパス", true);
}
}

A 回答 (2件)

確認したわけじゃないですが



> $_.[System.IO.Compression.ZipFileExtensions]::ExtractToFile("解凍先ファイルパス",1)

$_はZipArchiveEntryクラスのインスタンスなので、書くとすれば以下の様になりませんか

[System.IO.Compression.ZipFileExtensions]::ExtractToFile($_, "解凍先ファイルパス",1)


ZipFileExtensions クラス
https://msdn.microsoft.com/ja-jp/library/system. …
    • good
    • 1
この回答へのお礼

おーーー!出来たーーー!
ありがとうございます、出来ました。
さらにはとても早い回答で、大変助かりました!
何とか自力で解決したいと思い、これだけで3日間は悩んでました。

頂いた参照リンクも見てはいたのですが・・・siffon9さまの例文を見て、やっと点と点が繋がった感じで3ございます。

siffon9さま、もしお時間があればさらにご教授願いたいのですが・・・
私は今回、元となるC#ソースとして書いた
 > ZAE.ExtractToFile("解凍先ファイルパス", true);
の書き方だけに囚われておりました。
C#では、ZAE(ZipArchiveEntry)を頭に持ってきても動作するのは何故なのでしょうか?参照リンクでのメソッド記述方法とは異なると思うのですが。

お礼日時:2018/07/15 18:29

> C#では、ZAE(ZipArchiveEntry)を頭に持ってきても動作するのは何故なのでしょうか?



これらのクラスを使用したことが無いので推測になりますが

ZipArchiveEntry クラス
https://msdn.microsoft.com/ja-jp/library/system. …

の「備考」の表の下の記述によるものではないでしょうか
(機械翻訳で何を言っているのかよくわかりませんが)

推測どおりであるならば、PowerShellにおいても
Add-Type -AssemblyName "System.IO.Compression.FileSystem"の記述があるので
当該行は
$_.ExtractToFile("解凍先ファイルパス", true)
と書いても動作しそうですね。
    • good
    • 1
この回答へのお礼

確かに、おっしゃる通り何やら書いてありますね。変な細かいまで回答頂きありがとうございました。

お礼日時:2018/07/15 19:53

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!