Ошибка удаления файлов Powershell v2 Невозможно преобразовать «LastWriteTime» - PullRequest
0 голосов
/ 17 апреля 2020

ОС: Windows 2008 R2 64 бит

Я пытаюсь удалить все текстовые файлы старше X дней, используя powershell, используя ниже CMD

PS C:\temp> POWERSHELL -COMMAND "Get-ChildItem c:\temp -Recurse -Include *.txt | Where LastWriteTime -lt  (Get-Date).AddDays(-10) | Remove-Item -Force"

Но получить следующую ошибку

Where-Object : Cannot bind parameter 'FilterScript'. Cannot convert the "LastWriteTime" value of type "System.String" to type "System.Management.Automation.ScriptBlock".At line:1 char:54+ Get-ChildItem c:\temp -Recurse -Include *.txt | Where <<<<  LastWriteTime -lt  (Get-Date).AddDays(-10) | Remove-Item -Force    + CategoryInfo          : InvalidArgument: (:) [Where-Object], ParameterBindingException    + FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.PowerShell.Commands.WhereObjectCommand

PS версия:

PS C:\temp>  $PSVersionTable.PSVersion

Major  Minor  Build  Revision
-----  -----  -----  --------
2      0      -1     -1
Howto sort it?

1 Ответ

0 голосов
/ 19 апреля 2020

??? .... и вы можете напрямую использовать PowerShell для выполнения столько кода, файлов .ps1 и функций, сколько вы выберете за один прогон. Нет необходимости в отдельном запуске кода, и вам не нужен cmd.exe для этого, хотя вы можете, если захотите.

Поскольку PowerShell в любом случае выполняет функцию (работу), а код / ​​эти функции представляют собой код PowerShell (предположим, что здесь), то снова просто укажите, что это один файл .ps1, и запустите его напрямую

# Contents of SomeName.ps1 file

Get-ChildItem -path (c:\temp -Recurse -Include *.txt).FullName | 
ForEach {
    $PSItem| 
    Where LastWriteTime -lt  (Get-Date).AddDays(-10) | 
    Remove-Item -Force
}


powershell '.\SomeName.ps1'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...