2016-04-28 11 views
1

私は、スクリプトを完了するためにいくつかの助けを必要とする、私はすでに、リモートサーバー上の特定のプロファイルを削除するスクリプトを持っている、しかし、私はOの時間枠を追加します。例:プロファイルが120日以上使用されていない場合は、削除します。削除ドメインプロファイルは

Function Get-OldProfiles { 
[CmdletBinding()] 
Param(
[Parameter(Mandatory=$True,Position=1)] [string]$computerName 
) 


PROCESS { 
    foreach ($computer in $computerName) { 
     Write-host -ForegroundColor Yellow "Housekeeping on $computer" 
     Write-host -ForegroundColor Yellow "Mapping drive \\$computer\c$" 
     $drive = New-PSDrive -Name $computer.replace(".","-") -PSProvider FileSystem -Root \\$computer\C$ 
     Write-host -ForegroundColor Yellow "Checking windows version" 
     #Cheking windows version 
     $version = (Get-WmiObject -ComputerName $computer -Class Win32_OperatingSystem).version 
     Write-host -ForegroundColor Yellow "Windows version $version" 


     #Profile Deleting area. 
     if ($version -ge 6) { 
      Write-host -ForegroundColor Yellow "Getting profiles from WMI" 
      $profiles = Get-WmiObject -ComputerName $computer Win32_UserProfile -filter "LocalPath Like 'C:\\Users\\%'" | Where-object localpath -Match 'B.{5}R$'| Select-Object {$_.ConvertToDateTime($_.LastUseTime) -lt (Get-Date).AddDays(-2)} 
      if ($profiles -ne $null) { 
       $profiles | foreach { 
       Write-host -ForegroundColor Red ("Deleting profile: " + $_.LocalPath) 
       #$_.Delete() 
        } 
       } 
      } 
     } 
    } 
} 

私はこれを試してみた:

$profiles= Get-WmiObject -ComputerName $computer -class Win32_UserProfile -filter "Special = False -and LocalPath Like 'C:\\Users\\%'" | Where-object localpath -Match 'B.{5}R$' | Where {$_.ConvertToDateTime($_.LastUseTime) -lt (Get-Date).AddDays(-120)}

をしかし、それはあなたがWQLフィルタで-andを使用することはできませんエラー

Get-WmiObject : Invalid query "select * from Win32_UserProfile where Special = False -and LocalPath Like 'C:\\Users\\%'" 
At line:22 char:24 + $profiles= Get-WmiObject -ComputerName $computer -class Win32_UserPr ... 
+0

何を試しましたか?プロファイルが最後に使用された時間を見つける方法は複数あります。また、関数とコマンドレットの名前は 'verb-noun'とし、' Get-OldProfile'とします。 –

+0

delete()の前にこのコマンドを追加しようとしました。 {(!$ _。スペシャル) - および($ _。ConvertToDateTime($ _。LastUseTime)-lt(ゲット-日).AddDays(-5))}が、私はエラーを取得します。グーグルサーチの後、さまざまな方法がたくさんありますが、私はスクリプト作成の知識が不足しているため、私にはうまくいかないでしょう。だから簡単なタスクを行うことで学ぶことを試みている:) –

+0

Wmiの日付、イベントログ、レジストリ(私は思う)、ユーザーフォルダlastmodified。 |:誰もがそれを見ている場合 –

答えて

0

を返し、それだけでANDです。試してください:

$profiles = Get-WmiObject -ComputerName $computer -Class Win32_UserProfile -filter "Special = False AND LocalPath Like 'C:\\Users\\%'" | 
Where-Object { ($_.localpath -Match 'B.{5}R$') -and ($_.ConvertToDateTime($_.LastUseTime) -lt (Get-Date).AddDays(-120)) } 
+0

はいそれは働いています!ありがとう。ちょうどチェックした。あなたは素晴らしいです:) –