以下にtxtファイルとエクセルファイル内の文字列を検索する例を示します。
Get-ChildItem -Path "検索対象のフォルダパス" -Recurse -Filter "*.txt","*.xlsx","*.xls" | Select-String -Pattern "検索したい文字列"
一行です。
[0回]
PR
▼Powershell
# 圧縮対象のフォルダパス
$sourceDir = "C:\path\to\your\files"
# 圧縮ファイルの出力先フォルダパス
$archiveDir = "C:\path\to\your\archives"
# 圧縮対象の更新日時(YYYYMM形式で指定)
$targetDate = "202008" # 例:2020年8月
# 圧縮処理
try {
# 圧縮対象のファイルを検索
$filesToArchive = Get-ChildItem -Path $sourceDir | Where-Object { $_.LastWriteTime.ToString("yyyyMM") -eq $targetDate -and $_.Extension -eq ".txt" }
if ($filesToArchive) {
foreach ($file in $filesToArchive) {
# 圧縮ファイル名を作成(YYYYMM形式)
$archiveName = "{0}\{1}.zip" -f $archiveDir, $file.LastWriteTime.ToString("yyyyMM")
# 同名ファイルが存在する場合は連番を付与
$counter = 1
while (Test-Path -Path $archiveName) {
$archiveName = "{0}\{1}_{2}.zip" -f $archiveDir, $file.LastWriteTime.ToString("yyyyMM"), $counter
$counter++
}
# 圧縮を実行
Compress-Archive -Path $file.FullName -DestinationPath $archiveName -CompressionLevel Optimal
# 圧縮が成功したら元のファイルを削除
if (Test-Path -Path $archiveName) {
Remove-Item -Path $file.FullName -Force
Write-Host "File '$file.FullName' archived to '$archiveName' and deleted."
} else {
Write-Error "Failed to archive '$file.FullName'."
}
}
} else {
Write-Host "No files found to archive for the specified date '$targetDate'."
}
} catch {
Write-Error "An error occurred: $_"
}
▼スクリプトの説明:
変数の定義:
$sourceDir: 圧縮対象のファイルがあるフォルダパスを指定します。
$archiveDir: 圧縮ファイルを保存するフォルダパスを指定します。
$targetDate: 圧縮対象ファイルの更新日時を YYYYMM 形式で指定します(例: "202008")。
ファイルの検索:
Get-ChildItem コマンドで指定したフォルダ内のすべてのファイルを取得します。
Where-Object コマンドで、更新日時が $targetDate と一致し、拡張子が ".txt" のファイルを絞り込みます。
圧縮処理:
絞り込まれたファイルごとに以下の処理を行います。
圧縮ファイル名を YYYYMM 形式で作成します。
同名ファイルが存在する場合は、連番を付与してファイル名が重複しないようにします。
Compress-Archive コマンドでファイルを圧縮します。
圧縮が成功したら、Remove-Item コマンドで元のファイルを削除します。
エラー処理:
try-catch ブロックでエラーを捕捉し、エラーメッセージを表示します。
スクリプトの実行方法:
スクリプトをテキストファイルに保存します(例: archive_files.ps1)。
PowerShell を管理者権限で実行します。
スクリプトを保存したパスに移動します。
.\archive_files.ps1 と入力してスクリプトを実行します。
注意点:
スクリプト実行前に、$sourceDir、$archiveDir、$targetDate の値を適切に設定してください。
圧縮対象のファイルが存在しない場合は、メッセージが表示されます。
圧縮処理中にエラーが発生した場合は、エラーメッセージが表示されます。
スクリプト実行後、元のファイルは削除されますので、ご注意ください。
[0回]
# リモートサーバー名と共有フォルダ名、出力先を指定
$remoteServer = "NameServer01"
$shareName = "G$"
$outputPath = "C:\Temp"
# 出力ファイル名(タイムスタンプ付き)
$outputFile = Join-Path $outputPath ("$($shareName)_DriveInfo_$(Get-Date -Format yyyyMMdd_HHmmss).csv")
# リモートGドライブの情報を取得し、CSVファイルに出力
Get-ChildItem -Path "\\$remoteServer\$shareName" -Recurse | Select-Object Name, LastWriteTime, FullName | Export-Csv -Path $outputFile -NoTypeInformation
# 結果を表示
Write-Host "結果を以下のファイルに出力しました:" $outputFile
[0回]
カレントディレクトリ配下のディレクトリを再帰的に検索して
1GB以上のファイルをDドライブに出力している。
Get-ChildItem -Recurse -Force | Where-Object {$_.Length -gt 1GB} | Select-Object FullName, @{Name='SizeGB';Expression={$_.Length / 1GB}} > D:\largefiles.txt
[0回]
とりあえず形にしました。
#
# Cドライブの空き容量が90GBを下回った場合にのみメッセージを出力したい場合
#
# 監視対象ドライブ
$targetDrive = "C"
# しきい値(GB単位)
$threshold = 90
# パスワードファイルのパス
$credentialFile = "C:\passwords.txt"
# パスワードファイルからユーザー名とパスワードを読み込む
$credentials = Get-Content $credentialFile | ConvertFrom-Csv
# 各サーバに対して処理を実行
foreach ($server in $servers) {
$credential = $credentials | Where-Object { $_.ServerName -eq $server }
# Credentialオブジェクトを作成
$credentialObject = New-Object System.Management.Automation.PSCredential (
$credential.Username,
(ConvertTo-SecureString $credential.Password -AsPlainText -Force)
)
try {
# サーバに接続し、ディスク容量を取得
Invoke-Command -ComputerName $server -Credential $credentialObject -ScriptBlock {
$volume = Get-Volume -DriveLetter $using:targetDrive
if ($volume.Available -lt $using:threshold * 1GB) {
Write-EventLog -LogName Application -Source "DiskSpaceMonitor" -EventID 1001 -Message
"ドライブ$($volume.DriveLetter)の空き容量がしきい値を下回っています。$($volume.Available / 1GB:N2) GB"
}
}
}
catch {
Write-Warning "サーバー $server への接続に失敗しました: $($_.Exception.Message)"
}
}
[0回]