前提・実現したいこと
PowerShellでファイルを操作するコードを書いていますが
関数内で発生する意図しない出力を破棄する方法が理解出来ず悩んでいます
検索すると色々出てきて
・| Out-Null
・[void]
・> $null
などは見つけたのですが、その通りに書くと必要なデータが取得出来ず困っています
やむなく
$aaa = t_FileTimeDifferent $files "t?????.txt"
$aaa[$aaa.Count - 1]
で配列の末尾を使用していますが良くない方法でしょうか?
どの様に記述したらboolの結果だけを取得出来るかご教示ください
該当のソースコード
ps1
1# 【呼び出され側 ※本当はboolのみを返したい】 2function t_FileTimeDifferent { 3 param ( 4 $files , [string] $t_FileString 5 ) 6 7 $hhhFile 8 $t_File 9 [bool] $timeDiffTargetFileExits = $false 10 11 foreach ($item in $files) { 12 if ($item -like "*HHH*.txt") { 13 $hhhFile = $item.LastWriteTime 14 } 15 elseif ($item -like $t_FileString) { 16 $t_File = $item.LastWriteTime 17 } 18 19 # 両方取得したらフラグを立ててループを抜ける 20 If ( ($t_File -ne $null) -and ($hhhFile -ne $null )) { 21 $timeDiffTargetFileExits = $true 22 break 23 } 24 } 25 26 # 両方の情報を取得済みだったら 27 If ($timeDiffTargetFileExits) { 28 # 時刻の差を算出 29 $diff = New-TimeSpan $hhhFile $t_File | Out-Null # 【←$diffに時差を取得したいが$nullになってしまい】 30 31 # 30秒以上差があったらエラー 32 If ([Math]::Abs($diff.TotalSeconds) -gt 30) { #【←ここが正しく判定出来なくなる】 33 return $true 34 } 35 } 36 37 return $false 38 39} 40 41 42# 【呼び出し側】 43function ErrorCheck { 44 param ([string]$targetFolder) 45 46 47 # ファイル一覧を取得 48 [string] $files 49 $files = Get-ChildItem -Path $targetFolder 50 51 52--- 中略 --- 53 54 55 # ファイルの更新時間に差が無いか をチェック 56 $aaa = t_FileTimeDifferent $files "t?????.txt" 57 # ↑試しに変数で受けてみたら 58 # [0]: $null 59 # [1]: $null 60 # [2]: $false 61 # の配列になっています 62 63 if (t_FileTimeDifferent $files "t?????.txt") { 64 return 8 65 } 66 67 68--- 以下 略 --- 69 70} 71 72
補足情報(FW/ツールのバージョンなど)
・PSVersion 5.1.19041.1237
・Visual Studio Code
バージョン: 1.62.2 (system setup)
OS: Windows_NT x64 10.0.19043
に
・PowerShell v2021.10.2
の拡張を入れてコーディングしています
回答1件
あなたの回答
tips
プレビュー