Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- $driveLetter = "V:" # Set your drive letter here
- $idleMinutes = 1
- $idleThreshold = $idleMinutes * 60
- # Define native method for idle detection
- Add-Type @"
- using System;
- using System.Runtime.InteropServices;
- public static class IdleTime {
- [StructLayout(LayoutKind.Sequential)]
- struct LASTINPUTINFO {
- public uint cbSize;
- public uint dwTime;
- }
- [DllImport("user32.dll")]
- static extern bool GetLastInputInfo(ref LASTINPUTINFO plii);
- public static int GetIdleTimeInSeconds() {
- LASTINPUTINFO lii = new LASTINPUTINFO();
- lii.cbSize = (uint)Marshal.SizeOf(typeof(LASTINPUTINFO));
- if (!GetLastInputInfo(ref lii)) {
- return 0;
- }
- return (Environment.TickCount - (int)lii.dwTime) / 1000;
- }
- }
- "@
- function Get-IdleTime {
- return [IdleTime]::GetIdleTimeInSeconds()
- }
- Write-Host "Auto-lock script running. Will lock $driveLetter after $idleMinutes minutes of inactivity."
- while ($true) {
- $idleTime = Get-IdleTime
- Write-Host "Idle time: $idleTime seconds"
- if ($idleTime -ge $idleThreshold) {
- Write-Host "Idle for $idleTime seconds. Locking drive $driveLetter..."
- manage-bde -lock $driveLetter -ForceDismount
- # Wait for some activity before continuing (reset loop after user returns)
- do {
- Start-Sleep -Seconds 10
- $idleTime = Get-IdleTime
- } while ($idleTime -ge 30)
- Write-Host "User activity detected. Resuming idle monitoring..."
- }
- Start-Sleep -Seconds 30
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement