検索条件
全2件
(1/1ページ)
PowerShellで空き容量チェックスクリプトを書いてみました。Windows 10 のアクションセンターで通知されます(トースト通知)。
# ドライブごとにしきい値を設定 $min_freespace = @{ "C" = 30GB; "D" = 10GB; "E" = 50GB; } function ShowBalloonTip( [string] $tilte = "件名", [string] $body = "本文" ) { #[Reference] # PowerShell can I use balloons, toasts and notifications? # https://deploywindows.info/2015/12/01/powershell-can-i-use-balloons-toasts-and-notifications/ # Toasts templates # https://msdn.microsoft.com/en-us/library/windows/apps/hh761494.aspx [Windows.UI.Notifications.ToastNotificationManager, Windows.UI.Notifications, ContentType = WindowsRuntime] > $null $template = [Windows.UI.Notifications.ToastNotificationManager]::GetTemplateContent([Windows.UI.Notifications.ToastTemplateType]::ToastText02) # Convert to .NET type for XML manipuration $toastXml = [xml] $template.GetXml() # Customize the toast message $text = $toastXml.GetElementsByTagName("text") $text[0].AppendChild($toastXml.CreateTextNode($tilte)) > $null $text[1].AppendChild($toastXml.CreateTextNode($body)) > $null # Convert back to WinRT type $xml = New-Object Windows.Data.Xml.Dom.XmlDocument $xml.LoadXml($toastXml.OuterXml) $Toast = [Windows.UI.Notifications.ToastNotification]::new($xml) $AppID = 'Microsoft.Explorer.Notification.{3e1c1f24-a023-49cf-98ff-90cdabb9930b}' [Windows.UI.Notifications.ToastNotificationManager]::CreateToastNotifier($AppID).Show($Toast) } $msg = "" foreach ($drive_letter in $min_freespace.Keys) { $drive = Get-PSDrive $drive_letter if ( $drive.Free -lt $min_freespace[$drive_letter] ) { $msg += "{0}ドライブ空き容量:{1,0:0.00}GB`n" -f $drive_letter, ($drive.Free/1GB); } } if ( $msg ) { ShowBalloonTip "空き容量警告" $msg }
以下のレジストリを登録しないとトースト通知を履歴に残せないようです。(通知自体はされる。)
コマンドで追加するなら、
reg add "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Notifications\Settings\Microsoft.Explorer.Notification.{3e1c1f24-a023-49cf-98ff-90cdabb9930b}" /v ShowInActionCenter /t REG_DWORD /d 1
「Microsoft.Explorer.Notification.3e1c1f24-a023-49cf-98ff-90cdabb9930b」*1のところに特に意味は無く、ソースコード内のIDと一致していれば良いです。
タスクスケジューラーに登録すれば、自動実行できます。
ただ、普通に登録するだけではどうしてもウィンドウが表示されてしまうようです。検索するとWSH(VBScriptやJScript)経由でPowerShellを呼び出すことでウィンドウを隠す方法が見つかります。PowerShell単体でできるようにして欲しい(-_-;)