Я могу, наконец, воспроизвести это, и ИМО кажется, что это ошибка. Репродукция должна иметь открытый ресурс, такой как C $, но для установки Deny Modify perms для пользователя в файле. Когда я делаю это, я наблюдаю это:
PS> gci '\\Keith-PC\C$\Users\Keith\foo.txt' | ri -for
ri : Cannot remove item \\Keith-PC\C$\Users\Keith\foo.txt: Access to the path is denied.
At line:1 char:43
+ gci '\\Keith-PC\C$\Users\Keith\foo.txt' | ri -for
+ ~~~~~~~
+ CategoryInfo : InvalidArgument: (\\Keith-PC\C$\Users\Keith\foo.txt:FileInfo) [Remove-Item], ArgumentExc
eption
+ FullyQualifiedErrorId : RemoveFileSystemItemArgumentError,Microsoft.PowerShell.Commands.RemoveItemCommand
PS> gci '\\Keith-PC\C$\Users\Keith\foo.txt' | %{$_.Delete()} # <== this works!
Я также заметить, что удаление параметра -Force
удаляет файл без ошибок, а также. Функция deny perms по-прежнему позволяет мне удалить файл из проводника Windows, что заставляет меня думать, что файл должен удалить. Так что же с использованием параметра -Force
? Когда я вникать в ErrorRecord я вижу это:
Message : Access to the path is denied.
ParamName :
Data : {}
InnerException :
TargetSite : Void set_Attributes(System.IO.FileAttributes)
StackTrace : at System.IO.FileSystemInfo.set_Attributes(FileAttributes value)
at Microsoft.PowerShell.Commands.FileSystemProvider.RemoveFileSystemItem(FileSystemInfo
fileSystemInfo, Boolean force)
Кажется, что параметр -Force
пытается установить (скорее сброс) атрибуты и права доступа к файлу не позволяют ему, например:
PS> gci '\\Keith-PC\C$\Users\Keith\foo.txt' | %{$_.Attributes = 'Normal'}
Exception setting "Attributes": "Access to the path is denied."
At line:1 char:45
+ gci '\\Keith-PC\C$\Users\Keith\foo.txt' | %{$_.Attributes = 'Normal'}
+ ~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], SetValueInvocationException
+ FullyQualifiedErrorId : ExceptionWhenSetting
Так что мне кажется, что PowerShell должен сначала попробовать, как если бы -Force
не присутствовал, и если это не удается, попробуйте сбросить атрибуты.
, который работал на моей коробке PSV4. Какую версию вы используете? вы пытались указать полный путь: '$ files = gci \\ UncPath \ Folder | ? {$ _. LastWriteTime -le (Get-Date) .addDays (-28) | выбрать полное имя} ' –
' $ PSVersionTable' возвращает 4.0 для 'PSVersion'.Добавляя 'select fullname', я теперь получаю errormessage, такой как« Remove-Item: Can not find path »\\ UncPath \ Folder \ @ {FullName = \ UncPath \ Folder \ test.RTF} ', потому что он не существует.' , –
'$ files [0]' возвращает '\\ UncPath \ Folder \ test.RTF' –