PowerShell講座です。 前回は、配列について紹介しました。 【PowerShell講座】配列について. ブログを報告する, Application data下のフォルダをWindows PowerShellでZIPファイ…, Windows PowerShell のシステム要件 | Microsoft Docs, 江戸時代の元号をレジストリィに足したが.NETのJapaneseCalendar Classの下限値…, Application data下のフォルダをWindows PowerShellでZIPファイルに…, 江戸時代の元号をレジストリィに足したが.NETのJapaneseCalendar Classの下限値は西暦1868年9月8日だったので和暦変換できなかった話. Windows 7 SP1. 複数配列に存在している同じ(共通)要素を取り出したり、異なる要素を出力したりすることがあります。, $array1 = "apple","bear","cat","dog"$array2 = "apple","book","cut","dog", $array1 | Where-Object { $array2 -contains $_} または$newArr = @()$array1 | ForEach-Object{ if($array2 -contains $_){ $newArr += $_ }}, $array1 | Where-Object { $array2 -notcontains $_}または$newArr = @()$array1 | ForEach-Object{ if($array2 -notcontains $_){ $newArr += $_ }}, $unionArr = $array1 + $array2 |  Select-Object –Unique, Office 2013 Word,Excel、PowerPointなどのファイルを開けない, フェールオーバークラスタ Event ID 1194, 1069, 1205, 1254. -OutFile ~\FindDuplicateFile.ps1, https://github.com/MuraAtVwnet/FindDuplicateFile, git@github.com:MuraAtVwnet/FindDuplicateFile.git, Bug リポートなどありましたらfeed back をください. ョートカットを置きます マイクロソフトが開発した CUI のシェル。.NET 上で動作する。 コマンドプロンプトよりはるかに高機能で、 Windows の管理がコマンドだけでできるようになる。 バージョン. Powershell (94) RDS (1) ServerCore (2) Skype for Business Server (7) SQL Server (26) Windows 10 (4) WindowsServer (1) WSL (4) wsl2 (7) WSUS (1) グループポリシー (12) コマンド (20) バッチファイル (4) レジストリ (2) WindowsServer (2) RDS (1) WordPress (9) zabbix (4) フリーツール (2) WinShot (1) 分解 … https://raw.githubusercontent.com/MuraAtVwnet/FindDuplicateFile/master/FindDuplicateFile.ps1 前の記事では(私の想像で) 人間が手作業している日常業務を自動化する例としてWindows PowerShellでExcelファイルを編集すると言う内容を書きましたが、余りPowerShellっぽさがないスクリプトになってしまったので、今度はPowerShellっぽいスクリプトになるようにフォルダ内の重複するファイルを… 配列でないオブジェクトに対してCountプロパティを使いたいときは配列化してやる必要があります。 # PowerShell 2.0 # 要素数1の配列化してCountプロパティを取得 PS C:\> @(123).Count 1 PowerShell 3.0以降の動作. 前の記事では(私の想像で) 人間が手作業している日常業務を自動化する例としてWindows PowerShellでExcelファイルを編集すると言う内容を書きましたが、余りPowerShellっぽさがないスクリプトになってしまったので、今度はPowerShellっぽいスクリプトになるようにフォルダ内の重複するファイルを調べてみます, とりあえず今回のサンプルコードとしてはピクチャフォルダ配下のファイルを調べることにします, ピクチャフォルダを[Environment]::GetFolderPath('MyPictures')で取得してGet-ChildItemの-Pathに設定し、ファイルだけ欲しいので-File付けて、子アイテムがフォルダの場合その中身も再帰的に取得するよう-Recurse付けて、ついでに隠しファイルも取れるよう-Forceも付けました, いままでDOSでバッチを書いていた身からすると、PowerShellは本当に強力です, Hashが何かについてはこの記事では説明しないので、各自ハッシュ関数で検索して下さい, Windows PowerShellではversion 4から標準コマンドレットにGet-FileHashと言う、ファイルハッシュを取得するその名の通りのコマンドレットが追加されていますので、先ほど取得したファイルリストをパイプ (|) を使ってGet-FileHashに流し込んでみます, Get-FileHashはパイプラインから流れてくるSystem.IO.FileSystemInfoを直接受け取れるので上記のように書けます, ちなみに、-AlgorithmパラメータにSHA256を与えていますがここはパフォーマンスと相談して好きなアルゴリズムを採用してください (今回のサンプルコードでは悪意のある第三者が改竄したファイルでhashを衝突させてくる心配はほぼないですし), そして、ユニークではないhashを持つObjectだけ出力したいので、とりあえず今回はSort-Object -Property HashでHashでソートした上で直前のObjectのhashと同じかどうかを判定することにします, しかし、これだと一致するファイル A1,A2,A3 があった場合、A1,A2,A2,A3 と、A2が2回出力されてしまいます, そこで、その後Select-Object -Property * -Uniqueとして重複したObjectを取り除くことにします, 以上でピクチャフォルダ配下の重複したファイルが分かるようになりましたが、重複はしているがそれぞれ必要なファイルの場合もありますので、削除や移動はせず、CSVファイルに出力することにします, CSVに出力する場合、Export-CSVと言うそのままの名前のコマンドレットを使います, ですが、出力されたCSVを開いてみると先頭の列はAlgorithmという、今回は全行同じ値が必ず入っているので要らない情報が有ったり、逆に (同じファイルとはいえ) 最終更新日等があった方がどのファイルを消すかの参考情報になって便利などの微妙に使い勝手が悪いことが気になります, そこで、Get-FileHashの行を書き換え、素のGet-FileHashの出力結果ではなく、Select-Objectを使って必要な情報を持ったPSCustomObjectを次のパイプに渡すように変更してみます, 最後に、このコードをps1ファイルに保存するときにはファイルの先頭に#Requires -Version 4.0と実行時の最低バージョンの指定を書いておくと良いでしょう, 今回のスクリプトではversion 4.0から追加されたGet-FileHashを使っていますが、2017年12月現在、Version 4.0が入っていない環境は一応残っています (参考: Windows PowerShell のシステム要件 | Microsoft Docs), パイプをどんどん繋げてObjectを流していると、俺、シェル書いてるって気分になって楽しいです, rh-kimataさんは、はてなブログを使っています。あなたもはてなブログをはじめてみませんか?, Powered by Hatena Blog FindDuplicateFile.ps1 -Remove ・重複ファイルを C:\Backup へ移動する. All rights reserved. 重複リストを「C:\Photo\CSV」に出力します, 6.0.1 で動作確認しているので、Windows 以外でも動作すると思います。, リポジトリを Clone するか、Invoke-WebRequest してください, Invoke-WebRequest はじめまして。区分 ランク001 A002 B002 B003 C004 D005 E005 Fこのようなデータを以下の条件で削除し抽出する方法を教えていただけないでしょうか。・区分が重複しているデータ Copyright © MURA スクリプト実行が制限されてエラーになる場合は、管理権限で PowerShell プロンプトを開いて以下を入力し、スクリプト実行を許可しててください。 Set-ExecutionPolicy RemoteSigned -Force . 第5回目は、CSVデータ入出力についてです。 環境は、Windows 10(64bit)、PowerShell 6.1.2 です。 まずは、知らない方のためにCSVデータについて説明します。 CSVデータとは. Powershell 2.0では配列にContainsメッソドが使えない; Powershell 重複要素 異なる要素の出力と配列結合; 7月 (9) 6月 (11) 5月 (3) 4月 (6) 3月 (2) 2月 (3) 1月 (11) 2012 (61) 12月 (25) 11月 (5) ただし、この動作はPowerShell 3.0以降になると変わります。 2019.02.04. PowerShell/文字列をカンマなどで区切り文字を指定し配列に格納する・Split ... Windows設定関連/Windows 7のDPI を変更する方法 (91357) edit. PowerShell とは . | Counter: 41753, today: 43, yesterday: 34 Tweet. 使い方 ・重複ファイルを削除する. Windows 7 以降は標準で搭載されているが、 OS のバージョンが上がるごとに PowerShell