* PowerShell Coreで,指定したディレクトリーの一日前に更新したファイルを取得

:CATEGORIES: PowerShell Core

Get-ChildItem -Path /home/a66/a_screenshot/  -Recurse | Where-Object {
   $_.LastWriteTime.Date -eq (Get-Date).Date.AddDays(-1)
}

参考:
PowerShell/Get-Dateで前日、翌日、前月、翌月などの日付を取得する方法 - Windowsと暮らす https://win.just4fun.biz/?PowerShell/Get-Date%E3%81%A7%E5%89%8D%E6%97%A5%E3%80%81%E7%BF%8C%E6%97%A5%E3%80%81%E5%89%8D%E6%9C%88%E3%80%81%E7%BF%8C%E6%9C%88%E3%81%AA%E3%81%A9%E3%81%AE%E6%97%A5%E4%BB%98%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95

PowerShell - powershellで更新日付が今日のファイルだけを抽出したい|teratail https://teratail.com/questions/130323


PS /home/a66/pwsh (09:39:53) > (Get-Date) | Get-Member


TypeName: System.DateTime

Name MemberType Definition

        • ---------- ----------

Add Method datetime Add(timespan value)
AddDays Method datetime AddDays(double value)
AddHours Method datetime AddHours(double value)
AddMilliseconds Method datetime AddMilliseconds(double value)
AddMinutes Method datetime AddMinutes(double value)
AddMonths Method datetime AddMonths(int months)
AddSeconds Method datetime AddSeconds(double value)
AddTicks Method datetime AddTicks(long value)
AddYears Method datetime AddYears(int value)
CompareTo Method int CompareTo(System.Object value), int CompareTo(datetime value), int IComparable.CompareTo(System.Object obj), int ICom
Equals Method bool Equals(System.Object value), bool Equals(datetime value), bool IEquatable[datetime].Equals(datetime other)
GetDateTimeFormats Method string GetDateTimeFormats(), string GetDateTimeFormats(System.IFormatProvider provider), string[] GetDateTimeFormats(…
GetHashCode Method int GetHashCode()
GetObjectData Method void ISerializable.GetObjectData(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.Stream…
GetType Method type GetType()
GetTypeCode Method System.TypeCode GetTypeCode(), System.TypeCode IConvertible.GetTypeCode()
IsDaylightSavingTime Method bool IsDaylightSavingTime()
Subtract Method timespan Subtract(datetime value), datetime Subtract(timespan value)
ToBinary Method long ToBinary()
ToBoolean Method bool IConvertible.ToBoolean(System.IFormatProvider provider)
ToByte Method byte IConvertible.ToByte(System.IFormatProvider provider)
ToChar Method char IConvertible.ToChar(System.IFormatProvider provider)
ToDateTime Method datetime IConvertible.ToDateTime(System.IFormatProvider provider)
ToDecimal Method decimal IConvertible.ToDecimal(System.IFormatProvider provider)
ToDouble Method double IConvertible.ToDouble(System.IFormatProvider provider)
ToFileTime Method long ToFileTime()
ToFileTimeUtc Method long ToFileTimeUtc()
ToInt16 Method short IConvertible.ToInt16(System.IFormatProvider provider)
ToInt32 Method int IConvertible.ToInt32(System.IFormatProvider provider)
ToInt64 Method long IConvertible.ToInt64(System.IFormatProvider provider)
ToLocalTime Method datetime ToLocalTime()
ToLongDateString Method string ToLongDateString()
ToLongTimeString Method string ToLongTimeString()
ToOADate Method double ToOADate()
ToSByte Method sbyte IConvertible.ToSByte(System.IFormatProvider provider)
ToShortDateString Method string ToShortDateString()
ToShortTimeString Method string ToShortTimeString()
ToSingle Method float IConvertible.ToSingle(System.IFormatProvider provider)
ToString Method string ToString(), string ToString(string format), string ToString(System.IFormatProvider provider), string ToString(stri…
ToType Method System.Object IConvertible.ToType(type conversionType, System.IFormatProvider provider)
ToUInt16 Method ushort IConvertible.ToUInt16(System.IFormatProvider provider)
ToUInt32 Method uint IConvertible.ToUInt32(System.IFormatProvider provider)
ToUInt64 Method ulong IConvertible.ToUInt64(System.IFormatProvider provider)
ToUniversalTime Method datetime ToUniversalTime()
TryFormat Method bool TryFormat(System.Span[char] destination, [ref] int charsWritten, System.ReadOnlySpan[char] format, System.IFormatPro…
DisplayHint NoteProperty DisplayHintType DisplayHint=DateTime
Date Property datetime Date {get;}
Day Property int Day {get;}
DayOfWeek Property System.DayOfWeek DayOfWeek {get;}
DayOfYear Property int DayOfYear {get;}
Hour Property int Hour {get;}
Kind Property System.DateTimeKind Kind {get;}
Millisecond Property int Millisecond {get;}
Minute Property int Minute {get;}
Month Property int Month {get;}
Second Property int Second {get;}
Ticks Property long Ticks {get;}
TimeOfDay Property timespan TimeOfDay {get;}
Year Property int Year {get;}
DateTime ScriptProperty System.Object DateTime {get=if ((& { Set-StrictMode -Version 1; $this.DisplayHint }) -ieq "Date")…

実行結果:
```
PS /home/a66/pwsh (09:40:09) > (Get-ChildItem -Path /home/a66/a_screenshot/ -Recurse | Where-Object {
>> $_.LastWriteTime.Date -eq (Get-Date).Date.AddDays(-1)
>> })


Directory: /home/a66/a_screenshot/ts

Mode LastWriteTime Length Name

        • ------------- ------ ----
          • 2020/10/25 12:55 251269 2020-10-25-125521_モトケンさんがリツイート感熱紙(疑似太陽炉)@thermalpaper00·14時間先日の迷い子を助けた小学生のニュースの際の反応もそうだ.jpg

          • 2020/10/25 12:57 261263 2020-10-25-125734_モトケンさんがリツイート弁護士 市川 寛@imarockcaster42·14時間「主語が大きい」との批判を受けるツイートが散見される今日.jpg

          • 2020/10/25 12:58 251810 2020-10-25-125848_モトケン@motoken_tw返信先: @joytamachanさん最初の発言者の発言内容が不十分だったり分かりにくい場合は、その点について.jpg

          • 2020/10/25 13:14 217992 2020-10-25-131405_深澤諭史さんがリツイートアラン・スミシー@bluebuggle·31分注文していた本が届いた。.jpg
          • 2020/10/25 13:30 226218 2020-10-25-133015_深澤諭史さんがリツイートリーチ一発ツモ裏1@luckymangan·1時間だって執行部が無惨様と変わらない言動してますし….jpg

          • 2020/10/25 13:31 224672 2020-10-25-133122_@k_sawmen魔界を愛する普通の大魔王。人類滅亡を企む悪の若手弁護士の会、略して「めつわか」の代表です。めつわかメンバーは随時募集中です.jpg

          • 2020/10/25 14:45 217377 2020-10-25-144555_gmail-sent。ps1 - Visual Studio Code.jpg
          • 2020/10/25 20:15 267628 2020-10-25-201510_深澤諭史さんがリツイート弁護士大西洋一@o2441·1時間御意。.jpg
          • 2020/10/25 20:17 291011 2020-10-25-201705_深澤諭史さんがリツイート弁護士 中村憲昭@nakanori930·1時間全く同感です。あっという間に枯渇しちゃいますよね。長年かけて築いた.jpg

          • 2020/10/25 20:18 291386 2020-10-25-201804_深澤諭史さんがリツイートきよし弁護士@n5M5ULaRFaY3Ayz·1時間この信頼がなくなってしまったら、弁護士業務も難しくなってしまい.jpg

          • 2020/10/25 20:18 290955 2020-10-25-201841_深澤諭史さんがリツイート齋藤裕@bengyutakasaito·1時間禿同.jpg
          • 2020/10/25 20:41 287167 2020-10-25-204104_深澤諭史さんがリツイート小倉秀夫@chosakukenho·3時間科学的知見をもとに政府の諮問に答申しまたは提言等をするだけの組織がどうや.jpg

          • 2020/10/25 20:45 282189 2020-10-25-204543_小倉秀夫@chosakukenho被告人に下される刑が死刑ではなく無期懲役にとどまることによる遺族の不快感と、無実の被告人が死刑判決が下され.jpg

          • 2020/10/25 20:50 287582 2020-10-25-205053_ふなざわひろゆき@FLetlRmdM7gs5vS死刑廃止論は、被害者遺族の痛切な思いは当然受け止めた上で(なお、死刑を望まない遺族もいる。原.jpg

          • 2020/10/25 20:51 263362 2020-10-25-205138_小倉秀夫@chosakukenho初期捜査段階でガバッとかき集めた資料の中に被告人が真犯人であることを疑わせるものがあっても、これを弁護人に.jpg

          • 2020/10/25 20:58 282012 2020-10-25-205853_新田はちろう(富山県知事候補)@nitta8chan·21時間富山県知事候補の新田はちろうです。投票前にぜひご覧ください。.jpg

          • 2020/10/25 20:59 299675 2020-10-25-205920_新田はちろう(富山県知事候補)@nitta8chan富山県知事選挙に立候補した新田はちろうです。県政に民間企業の当たり前を取り入れ、将来世代.jpg

          • 2020/10/25 20:59 327684 2020-10-25-205939_石井 たかかず(富山県知事)@ishii_takakazu5石井隆一です。危機こそチャンス!アフター・コロナ時代のモデル県となる、人が輝く「.jpg

          • 2020/10/25 21:34 240222 2020-10-25-213423_豪弁 足立敬太 @大事なのは感謝と恩返しだ@keita_adachi札幌は〜まーあかん、汚れとる はんかくさい病気がはやっとる.jpg

          • 2020/10/25 21:38 317367 2020-10-25-213808_豪弁 足立敬太 @大事なのは感謝と恩返しださんがリツイートたろう teacher@tomo_law_·2時間被疑者国選が開始する前、「当地.jpg

          • 2020/10/25 21:39 294217 2020-10-25-213902_豪弁 足立敬太 @大事なのは感謝と恩返しだ@keita_adachi·1時間現職知事が8時で落選確実ってどういうこと.jpg

          • 2020/10/25 21:50 386548 2020-10-25-215046_NHKスペシャル公式@nhk_n_sp·18 d’oct。【ただいま放送中】 #NHKスペシャル 「香港 激動の記録~市民と“自由”の行方~.jpg

          • 2020/10/25 21:51 391993 2020-10-25-215141_NHKスペシャル公式@nhk_n_sp·10月18日【ただいま放送中】 #NHKスペシャル 「香港 激動の記録~市民と“自由”の行方~」番組.jpg

          • 2020/10/25 23:43 278444 2020-10-25-234353_モトケン@motoken_tw返信先: @jupiterthunder_さん, @MC6809EOS9さん君のツイートは見る価値がないので私.jpg

          • 2020/10/25 23:51 233611 2020-10-25-235145_小倉秀夫@Hideo_Ogura戦争賛美云々以前に、政教分離的にまずくないですかね。「知覧特攻平和観音堂等慰霊碑にて、慰霊式或いは鎮魂式とい.jpg

          • 2020/10/25 23:57 419684 2020-10-25-235725_奉納\危険生物・弁護士脳汚染除去装置\金沢地方検察庁御中_2020: REGEXP:”観音”/データベース登録済みツイート:2020年10月.jpg

          • 2020/10/25 23:58 415325 2020-10-25-235838_奉納\危険生物・弁護士脳汚染除去装置\金沢地方検察庁御中_2020: REGEXP:”観音”/データベース登録済みツイート:2020年10月.jpg

PS /home/a66/pwsh (09:41:45) >
```

* PowerShell Coreでgmailアカウントでメール(添付ファイル付き)を送信するスクリプト

:CATEGORIES: PowerShell

参考:
ソースコードの式の途中で改行する方法[PowerShell] : バヤシタ https://bayashita.com/p/entry/show/87
19.複数行の入力を取得する < 自作関数 Tips メニュー < PowerShell Tips < HIRO's.NET https://hiros-dot.net/PowerShell/myfunction/myfunction19.htm
PowerShellでメールを送る([Send-MailMessageコマンドレット] GmailからYahooメールへ) - Qiita https://qiita.com/hisabo/items/077431a9c30d38eae37a

#!/snap/bin/pwsh

Param(
    [String]$Subject,
    [String]$Body,
    [String]$Attachments,
    [Int]$Test = 0,
    [Int]$Read = 0
)

$passwordFile = [String]"パスワードを保存したファイルのフルパス"

if ( $Read -Ne 0 ) {
    Write-Host "送信するメールの本文を入力してください。終了は.のみで改行です。"
    $Body = Read-MultiLine
}

if ([string]::IsNullOrEmpty($Subject) -Or [string]::IsNullOrEmpty($Body)) {
    Write-Host "gmail-sent.ps1 -Subject """" -Body """""
    Write-Host "or"
    Write-Host "gmail-sent.ps1 -Subject """" -Body """" -Attachments 添付ファイル名"
    exit
}


if ( $Test -Ne 0 ) {
    Write-Host "Subject:"
    Write-Host $Subject
    Write-Host "Body:"
    Write-Host $Body

    exit
}

# 送信元
$From = "送信者のGoogleアカウント@gmail.com"
$To  = @("送信先メールアドレス")

# メールサーバ設定
$MailSv = "smtp.gmail.com" #ipaddress or host name
$Port = 587
$Encode = "UTF8"

#$pwd = "XXXX" | ConvertTo-SecureString -AsPlainText -Force
$password = [String](Get-Content $passwordFile)[3].Substring(2)
$pwd = ConvertTo-SecureString $password -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential $From,$pwd

if (! [string]::IsNullOrEmpty($Attachments)) {
    Send-MailMessage -From $From -To $To -SmtpServer $MailSv -Credential $cred -Encoding $Encode -Port $Port -UseSsl -Subject $Subject -Body $Body -Attachments $Attachments
} else {
    Send-MailMessage -From $From -To $To -SmtpServer $MailSv -Credential $cred -Encoding $Encode -Port $Port -UseSsl -Subject $Subject -Body $Body
}

function Read-MultiLine ( [string]$prompt, [string]$endChar = "." ){
	if ( $prompt.Length -gt 0 ){ Write-Host ($prompt + ":") }

	while(1)
	{
		$ip += Read-Host
		if ($ip.SubString($ip.Length - $endChar.Length) -eq $endChar){ break; }
		else{$ip += "`n"}
    }

	return $ip.Substring(0, $ip.Length - $endChar.Length)
}

実行結果:
```
PS /home/a66/pwsh> gmail-sent.ps1 -Subject "送信メール($(Get-Date -Format F))" -Body "メールの本文" -Attachments ./t1.txt

WARNING: The command 'Send-MailMessage' is obsolete. This cmdlet does not guarantee secure connections to SMTP servers. While there is no immediate replacement available in PowerShell, we recommend you do not use Send-MailMessage at this time. See https://aka.ms/SendMailMessage for more information.
PS /home/a66/pwsh>
```

 決まってワーニングが出るのですが,翻訳すると,「Send-MailMessageは廃止になりました。代替手段はないですが現時点では使わないことを推奨します。」などとありました。

 PowerShell Coreの引数は簡単に名前付けが利用できて,引数の順番を意識しないで済むのも楽です。コマンド履歴を再利用する場合,この利便性を強く感じました。

 添付ファイルの送信を目的とする場合,メールの本文は必要がないという考えですが,引数に「-Read 1」をつけることで,複数行での入力を出来るようにしました。半角の.だけの行が入力の終了になります。

 参考にさせてもらったページは他の記号になっていましたが,平成18年頃によく使っていたコマンドラインsendmailが半角の.を本文入力の終了にしていたように思います。

* Linux(Ubuntu)のPowerShell Coreで,指定したディレクトリー内で再帰的に正規表現に一致したファイルを,カレントディレクトリーにコピー

:CATEGORIES: PowerShell Core,正規表現


PS (19:09:35) > Get-ChildItem -Path ~/ -Recurse | Where-Object { $_.name -match "^200[1-3]-..-...*\.jpg$" }| % { $n = $_.name; if (Test-Path ./$n) { echo "ここに,${n}はあります。" } else { cp $_.FullName ./$n} }
ここに,2002-11-02_152511_別冊ジュリスト,シッカロール.jpgはあります。
ここに,2002-11-02_152511_別冊ジュリスト,シッカロール.jpgはあります。
ここに,2002-12-29_163215_告発事件一件記録(写真資料・撮影日時).jpgはあります。
ここに,2002-11-02_152511_別冊ジュリスト,シッカロール.jpgはあります。
ここに,2002-12-29_163215_告発事件一件記録(写真資料・撮影日時).jpgはあります。
PS Pictures/w (19:10:48) > ls
2002-11-02_152511_別冊ジュリスト,シッカロール.jpg 2002-12-29_163215_告発事件一件記録(写真資料・撮影日時).jpg

 これまではfindコマンドのexecオプションや,locateコマンドとxargsとの組み合わせで行ってきた処理ですが,複数の同名ファイルがあると,ワーニングのようなメッセージが出ていたので条件式を付けました。

* Linux(Ubuntu)で,C#のCoreTweetのコンパイルと実行を出来るようした,dotnetとmono

 dotnetの方は,「dotnet add package CoreTweet --version 1.0.0.483」とやるだけで,情報さえ見つかれば,そのまま実行するだけで簡単でした。dotnetはインストールも簡単だったと思います。

 しかし,dotnetは,「dotnet new console -o twitterTl」などとアプリのようなものを作った上で,ディレクトリに入り,C#のコードを書いたcsのファイルを編集し,「dotnet run」という実行方法しか情報が見当たりませんでした。

 monoは,「mcs Program.cs」などとやることでexeファイルが作成され,「mono Program.exe」と実行することが出来,プログラムのコンパイルとして自然体です。

 Visual Studioだと簡単にインストールできたCoreTweetですが,monoだと情報が見つからず,試行錯誤の連続でした。Javaでもクラスパスを指定するコンパイルの方法があったので,その方向で調べたところうまくいきました。

 ファイルは別に入手したものになりますが,NET45のものを使いました。「mcs -reference:./CoreTweet.dll Program.cs」でコンパイルは成功したのですが,実行時にエラーが出たので,同じディレクトリにNewtonsoft.Json.dllを置きました。

 「nuget install CoreTweet」の実行で「CoreTweet.1.0.0.483 Newtonsoft.Json.9.0.1」の2つのディレクトリが出来,そのなかにCoreTweet.dllとNewtonsoft.Json.dllがあります。

* 理解するのに時間が掛かった,C#で文字列から正規表現で部分文字列を抽出するRegexの使い方

using System.Text.RegularExpressions;

var url = "https://twitter.com/fukazawas/status/497913648950411264";

var regex = new Regex(@"(?:https://twitter\.com/)(?\w+?)(?:/status/.+)");
var m = regex.Matches(url);

for (Match m = regex.Match(url); m.Success; m = m.NextMatch())
{
string user = m.Groups["user"].Value;
Console.WriteLine(user);
}

pythonにも似たようなRegexのようなものがあって,Matchのようなもので値を取り出していましたが,全て1つの配列に入っていたように思います。このC#では,NextMatch()というメソッドを実行することで,次の値を読み込んでいるようです。

この仕組みを理解するのに,試行錯誤しながら2時間ほど時間を使いました。

(エ) 「座間9人殺害で死刑になりたくて仕方ない被告人をも、その意図に反して弁護する、士。 それが仕事。」という深澤諭史弁護士のリツイート

 長い時間続けたプログラムがようやくできあがったと思った直後の夜中の1時過ぎだったと記憶しますが,深澤諭史弁護士のタイムラインで見かけた衝撃的な内容のツイートでした。スクリーンショットも記録してあると思います。


> 座間9人殺害で死刑になりたくて仕方ない被告人をも、その意図に反して弁護する、士。
> それが仕事。
> 世間にどんなに叩かれても。
> 被告人の自暴自棄や精神疾患を最期まで信じて。
>

>


 たしか,このヨコチン刑事というアカウントは,弁護士アカウントから弁護士ではないという指摘を受けていましたが,これまで見てきたツイートの中でもとりわけ弁護士らしいと感じた内容で,ともかく深澤諭史弁護士がリツイートをしていることに社会的意義を感じました。


> 座間9人殺害で死刑になりたくて仕方ない被告人をも、その意図に反して弁護する、士。
> それが仕事。
> 世間にどんなに叩かれても。
> 被告人の自暴自棄や精神疾患を最期まで信じて。
>

>


 ヨコチン刑事というアカウントを弁護士ではないとツイートしたのをモトケンこと矢部善朗弁護士(京都弁護士会)かと思っていたのですが,確信は持てず,次のように調べたところモトケンこと矢部善朗弁護士(京都弁護士会)ではなくローカスこと三浦義隆弁護士だったようです。


(py37_env) a66@DESKTOP-1ASSOGN:~$ ajx-user-mysql-REGEXP_blogger_hirono2014sk.rb motoken_tw 'ヨコチン' '1000-01-01/3000-1
2-31'
SELECT * FROM tw_user_tweet WHERE tw_date BETWEEN '1000-01-01' AND '3000-12-31' AND (user LIKE "motoken_tw") AND tweet REGEXP "ヨコチン" ORDER BY tw_date ASC
none
(py37_env) a66@DESKTOP-1ASSOGN:~$ ajx-user-mysql-REGEXP_blogger_hirono2014sk.rb lawkus 'ヨコチン' '1000-01-01/3000-12-31
'
SELECT * FROM tw_user_tweet WHERE tw_date BETWEEN '1000-01-01' AND '3000-12-31' AND (user LIKE "lawkus") AND tweet REGEXP "ヨコチン" ORDER BY tw_date ASC
REGEXP:”ヨコチン”/ystk(@lawkus)の検索(2019-06-11〜2020-09-03/2020年10月21日12時23分の記録4件)

2020年10月21日12時23分の登録: REGEXP:”ヨコチン”/ystk(@lawkus)の検索(2019-06-11〜2020-09-03/2020年10月21日12時23分の記録4件) http://kk2020-09.blogspot.com/2020/10/regexpystklawkus2019-06-112020-09.html


> ヨコチン刑事氏を弁護士だと思っている法クラが散見されるが、 下記投稿からわかるように弁護士ではないだろう。以前自作の懲戒請求書をアップしていたこともあったがそれも明らかに弁護士の書いたものではなかった。(ヨコチン氏自身は弁護士を自称していないと思うので同氏を批判する趣旨ではない) https://t.co/lItUKFxOIW



> 当たり前だろ。ヨコチン氏はこのような濫用的な懲戒請求をしたことを恥じ、喜久山先生に詫びるべきだ。
> もっとも不当懲戒請求として不法行為にまであたるかというと、そこは微妙な気はするが。 https://t.co/YCM1jxCIIY



2020年10月21日12時44分の実行記録
twitterAPI-search-lawList-mydql-add.rb "ヨコチン"
ツイート数:16/2050 リツイート数:0/2050 トータル:60
hirono_hideki 1/0件
kk_hirono 12/0件
s_hirono 3/0件

 作成したまとめ記事に目を通していたところ,深澤諭史弁護士関連で意外な発見がありました。スクリーンショットとして記録していたので前に読んでいるはずなのですが,魔法にでもかかったようにすっかりと忘れていました。

(ウ) 「これは同感です。 ゴールドラッシュの話と同じで、得したのは誰でしょう?」という向原栄大朗弁護士の反応

 これもTwitterAPIで取得したツイートのテキストを見ていたので気がつかなかったのですが,6年前という深澤諭史弁護士のツイートを公式引用したものでした。再掲になりますが,続けてご紹介します。


> 非弁委員やって,常議員やって,思い知ったことは,
>



> これは同感です。
> ゴールドラッシュの話と同じで、得したのは誰でしょう? https://t.co/k0cvhCtueE


 初めにゴールドラッシュという言葉をみてピンと来なかったのですが,昭和40年代後半から昭和50年代前半のテレビの西部劇で見かけたような言葉で,昭和56年の夏になりますが,矢沢永吉の曲名として歌を聴いた記憶があります。アルバム名にもなっていたかもしれません。