Скрипт Powershell для определения возраста папки и наличия - PullRequest
0 голосов
/ 14 января 2019

Создан скрипт PowerShell для обнаружения наличия папки Windows.old. Скрипт проверит на возраст папки больше 14 дней, если папка присутствует. Затем укажите значение «1», если возраст превышает 14 дней. Выход должен быть '0', если возраст меньше 14 дней. Кроме того, скрипт должен выдавать вывод в виде '0', если папка отсутствует.

Ниже приведен скрипт, который я создал, где первые два условия работают нормально. Для третьего сценария он выдает выходные данные (0), как требуется, но показывает ошибку, как показано. У нас есть возможность получить вывод без сообщения об ошибке.

$limit = (Get-Date).AddDays(-15)
$path = "C:\Windows.old"
$test = Test-Path $path
$task = ((Get-Item $path |
        Where-Object { $_.CreationTime -lt $limit }))
if ($test -eq $true) {
    if ($task) {
        $compliance ='1'
    } else {
        $compliance ='0'
    }
    $compliance
}
if ($test -eq $false) {
    Write-host '0'
}

Output Screenshot

1 Ответ

0 голосов
/ 14 января 2019

Итак, я написал функцию, которая должна делать то, что вам нужно

function Get-ItemTest(){
    Param(     
        [Parameter(ValueFromPipeline, Mandatory=$True)]
        [string]$Path,
        [Parameter(Mandatory=$True)]
        [DateTime]$Limit
    )
    process{
        if(Test-Path $Path){
            Get-Item $path | %{
                if($_.Creationtime -lt $Limit){
                    new-object psobject -Property @{Name=$_.FullName;Compliance=1}
                }else{
                    new-object psobject -Property @{Name=$_.FullName;Compliance=0}
                }
            }
        }else{
            new-object psobject -Property @{Name=$Path;Compliance=0}
        }
        return $Response
    }
}

Get-ItemTest -Limit (get-date).AddDays(-15) -Path "C:\Windows"

"C:\Windows.old", "C:\Windows","C:\Users" | Get-ItemTest -Limit (get-date).AddDays(-15)

Давайте рассмотрим, что здесь происходит.

В вашем сценарии

$task = ((Get-Item $path | Where-Object { $_.CreationTime -lt $limit }))

Вы уже пытаетесь получить Предмет, прежде чем проверять, работает ли путь. Вместо этого вы можете инкапсулировать это в IF с помощью Test-Path

if(Test-Path $Path){
    Get-Item ...
}else{
    "failed"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...