none
Удаление временных файлов в профиле пользователя у неактивных пользователей. RRS feed

  • Вопрос

  • Добрый день коллеги!

    Собственно вопрос:

    Как средствами PoSh удалять у пользователей терминального сервера в профиле C:\Documents and Settings\User_name\Local Settings\Temp файлы но только в том случае,если пользователь не залогинен на данный момент.

    Заранее спасибо за любую помощь.

    17 сентября 2013 г. 12:09

Ответы

  • $hklm = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList"
    $profiles = Get-ChildItem Registry::HKU | Where {$_.PsChildName -match "^S.+\d$"} | Foreach {$_.PsChildName}
    Get-ChildItem  $hklm | Where {$profiles -notcontains $_.PsChildName} | 
    	Get-ItemProperty -Name ProfileImagePath | Foreach {
    	$path = "$($_.ProfileImagePath)\Local Settings\Temp"
    	if(Test-Path $path) {
    		Remove-Item "$path\*" -Force -Recurse
    	}
    }
      Я Вас правильно понял,что в ветке  HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList находятся SIDы залогиненых на данный момент пользователей?



    Нет,они находятся в HKU.Но можно и через HKLM,параметр RefCount:

    $hklm = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList"
    Get-ChildItem  $hklm  | Get-ItemProperty -PSProperty RefCount,ProfileImagePath -Ea 0 | 
    	Where {!$_.RefCount} | Foreach {
    	$path = "$($_.ProfileImagePath)\Local Settings\Temp"
    	if(Test-Path $path) {
    		Remove-Item "$path\*" -Force -Recurse
    	}
    }


    • Изменено KazunEditor 17 сентября 2013 г. 13:14 RefCount
    • Помечено в качестве ответа Igor3000 17 сентября 2013 г. 13:17
    17 сентября 2013 г. 13:01
    Отвечающий

Все ответы

  • $hklm = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList"
    $profiles = Get-ChildItem Registry::HKU | Where {$_.PsChildName -match "^S.+\d$"} | Foreach {$_.PsChildName}
    Get-ChildItem  $hklm | Where {$profiles -notcontains $_.PsChildName} | 
    	Get-ItemProperty -Name ProfileImagePath | Foreach {
    	$path = "$($_.ProfileImagePath)\Local Settings\Temp"
    	if(Test-Path $path) {
    		Remove-Item "$path\*" -Force -Recurse
    	}
    }

    17 сентября 2013 г. 12:44
    Отвечающий
  • $hklm = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList"
    $profiles = Get-ChildItem Registry::HKU | Where {$_.PsChildName -match "^S.+\d$"} | Foreach {$_.PsChildName}
    Get-ChildItem  $hklm | Where {$profiles -notcontains $_.PsChildName} | 
    	Get-ItemProperty -Name ProfileImagePath | Foreach {
    	$path = "$($_.ProfileImagePath)\Local Settings\Temp"
    	if(Test-Path $path) {
    		Remove-Item "$path\*" -Force -Recurse
    	}
    }
      Я Вас правильно понял,что в ветке  HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList находятся SIDы залогиненых на данный момент пользователей?


    • Изменено Igor3000 17 сентября 2013 г. 13:00 очепятка
    17 сентября 2013 г. 12:55
  • $hklm = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList"
    $profiles = Get-ChildItem Registry::HKU | Where {$_.PsChildName -match "^S.+\d$"} | Foreach {$_.PsChildName}
    Get-ChildItem  $hklm | Where {$profiles -notcontains $_.PsChildName} | 
    	Get-ItemProperty -Name ProfileImagePath | Foreach {
    	$path = "$($_.ProfileImagePath)\Local Settings\Temp"
    	if(Test-Path $path) {
    		Remove-Item "$path\*" -Force -Recurse
    	}
    }
      Я Вас правильно понял,что в ветке  HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList находятся SIDы залогиненых на данный момент пользователей?



    Нет,они находятся в HKU.Но можно и через HKLM,параметр RefCount:

    $hklm = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList"
    Get-ChildItem  $hklm  | Get-ItemProperty -PSProperty RefCount,ProfileImagePath -Ea 0 | 
    	Where {!$_.RefCount} | Foreach {
    	$path = "$($_.ProfileImagePath)\Local Settings\Temp"
    	if(Test-Path $path) {
    		Remove-Item "$path\*" -Force -Recurse
    	}
    }


    • Изменено KazunEditor 17 сентября 2013 г. 13:14 RefCount
    • Помечено в качестве ответа Igor3000 17 сентября 2013 г. 13:17
    17 сентября 2013 г. 13:01
    Отвечающий
  • Спасибо большое!

    А как запускать этот скрипт не на локальной машине а с удалённой? Просто на терминалс серверах неустановлен Пош а ставить не хочиццо?

    17 сентября 2013 г. 13:18
  • $computer = "Terminal"
    $key = "SOFTWARE\Microsoft\\Windows NT\CurrentVersion\ProfileList"
    $reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey("LocalMachine","$computer")
    $sub = $reg.OpenSubKey($key)
    $sub.GetSubKeyNames() | Where {!$sub.OpenSubKey($_).GetValue("RefCount")} | Foreach {
    	$path = "\\$computer\" + $sub.OpenSubKey($_).GetValue("ProfileImagePath").Replace(":","$") 
    	if(Test-Path $path) {
    		Remove-Item "$path\*" -Force -Recurse
    	}
    }

    17 сентября 2013 г. 13:38
    Отвечающий
  • Ещё раз огромное спасибо!!!!

    А как всё-таки сделать, чтобы удалялись файлы по пути ProfileImagePath)\Local Settings\Temp ???

    • Изменено Igor3000 18 сентября 2013 г. 5:05
    18 сентября 2013 г. 4:59
  • Извиняюсь, строчку измените на:

    $path = "\\$computer\" + $sub.OpenSubKey($_).GetValue("ProfileImagePath").Replace(":","$") + "\Local Settings\Temp"

    18 сентября 2013 г. 5:33
    Отвечающий
  • Извиняюсь, строчку измените на:

    $path = "\\$computer\" + $sub.OpenSubKey($_).GetValue("ProfileImagePath").Replace(":","$") + "\Local Settings\Temp"
    Да ну что Вы какие могут быть претензии???Это Вы меня извените за надоедливость!!! Как говорилось в одном фильме: "Со мной со временем даже таксисты перестают разговаривать." ;) Огромное Вам спасибо за проделаный труд!!!!

    18 сентября 2013 г. 5:41