2017-02-09 405 views
1

私はスクリプトを使用して、特定のディレクトリ内のいくつかのファイルを再帰的に削除します。問題はそのディレクトリの指定にあります。Get-Childitemディレクトリのワイルドカード「アクセスが拒否されました」

私は(つまりのみUSER1ディレクトリをクリアするために)明示的に指定しようとすると、それが正常に動作します:

$temp = "C:\Users\user1\AppData\Local\Temp\" 
Get-ChildItem $temp -Recurse -Force -Verbose -ErrorAction SilentlyContinue | remove-item -force -Verbose -recurse -ErrorVariable FailedItems -ErrorAction SilentlyContinue 

私はワイルドカードでそれを指定するしかしとき(すなわち、このPC上すべてのユーザーに影響を与えるために)

$temp = "C:\Users\*\AppData\Local\Temp\*" 
Get-ChildItem $temp -Recurse -Force -Verbose -ErrorAction SilentlyContinue | remove-item -force -Verbose -recurse -ErrorVariable FailedItems -ErrorAction SilentlyContinue 

それはエラー

Get-ChildItem : Access is denied 
At line:7 char:1 
+ Get-ChildItem $localTempDir -Recurse -Force -Verbose -ErrorAction Sil ... 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
+ CategoryInfo   : NotSpecified: (:) [Get-ChildItem], UnauthorizedAccessException 
+ FullyQualifiedErrorId : System.UnauthorizedAccessException,Microsoft.PowerShell.Commands.GetChildItemCommand 
で失敗

どうしたの? 許可の問題ではありません。と同じ dirです。 はい、私は昇格した特権でスクリプトを実行します。
このような形式で指定された他のディレクトリ。

C:\Users\*\AppData\Local\Microsoft\Windows\Caches 
C:\Windows\Temp\* 

は、魅力のようにパージされます。

+0

こんにちはです、これは特別な/隠された/システムプロファイルのフォルダに関連することができませんでしたか?例えば'Default' – sodawillow

+0

おそらく。これを診断するには? – Suncatcher

+0

プロファイルを列挙し、特殊なものを除外し、残りのロジックを適用しますか? – sodawillow

答えて

1

たぶん、あなたはプロファイルのリストを除外したい場合は、これらの線に沿って何かを使用して、サブフォルダのリストを処理することができます:

$targets = "AppData\Local\Microsoft\Windows\Caches", 
      "AppData\Local\Microsoft\Windows\Temporary Internet Files" 

$special = @("Default", "Public") 

$profiles = Get-ChildItem "C:\Users" -Directory | 
    Where-Object Name -NotIn $special | 
    Select-Object -ExpandProperty FullName 

$profiles | ForEach-Object { 
    foreach($target in $targets) { 
     $path = Join-Path $_ $target 
     #delete/empty $path 
    } 
} 

NB:構文は、PS3.0 +

+0

それはエラーなしで動作しますが、 '$ special'スクリプトから' Public'を削除してもそれに影響します。しかし、もし私が 'Default'を取り除くと、それはとにかくゴミは取り除かれません。どうして?スクリプトは非隠し(非システム)ディレクトリのみを処理しますか?既定のフォルダには多くの一時ファイルも格納できるため、処理する必要があります。 – Suncatcher

+0

私は '-Force'が' gci'でここで助けてくれると思います – sodawillow

+0

正解!期待どおりに作業しました。 – Suncatcher

関連する問題