Скрипт Powershell не будет слушать заявление if - PullRequest
0 голосов
/ 04 октября 2019

Я действительно воняю от сценариев, и мне нужна твоя помощь. Я собрал этот скрипт из нескольких мест в интернете, и он работает, пока я не включу свой оператор IF ...

Я просто пытаюсь получить количество файлов в папке из пути UNC, иесли он превышает указанную сумму, я хочу, чтобы он отправил электронное письмо с указанием текущего счета.

Однако, если я раскомментирую часть if ($count -gt 50), я не получу электронное письмо, есличисло превышает 50.

Я не знаю, как сделать переменную ".Count" для использования в другом месте скрипта. Может кто-нибудь помочь, пожалуйста?

Тогда мне нужно выяснить, как его запустить. Я думал о запланированном задании в Windows, чтобы оно запускалось каждые несколько минут или около того, но если у вас есть идеи получше, я бы хотел их услышать!

$FolderList = @(
    "\\server\path\test"
        )
$Body = ($FolderList | ForEach-Object {
    "Check to see if Sweep Service is running, file count for '$($_)':  " + (Get-ChildItem -Path $_ -File -ErrorAction SilentlyContinue | Measure-Object).Count
}) -join "`r`n"

#if ($count -gt 50)
#{
    $From = "me@you.com"
    $To = "me@you.com"
    $Subject = "Sweep Checker"
    $SmtpServer = "webmail.you.com"
    Send-MailMessage -From $From -to $To -Subject $Subject -Body $Body -SmtpServer $SmtpServer
#}

1 Ответ

0 голосов
/ 05 октября 2019

Ваша главная проблема, кажется, НЕ сохранение количества файлов в любую переменную. вместо этого вы сохраняете значение как часть строки, а не число. [ ухмылка ]

следующий код явно помещает число файлов для текущего каталога в переменную, добавляет его к счету total , а затем использует текущий счетпостроить вашу строку вывода для тела вашего сообщения.

$FolderList = @(
    $env:TEMP
    $env:USERPROFILE
    $env:ALLUSERSPROFILE
        )
$TriggerFileCount = 20
$TotalFileCount = 0

$Body = foreach ($FL_Item in $FolderList)
    {
    $CurrentFileCount = @(Get-ChildItem -LiteralPath $FL_Item -File -ErrorAction SilentlyContinue).Count
    $TotalFileCount += $CurrentFileCount

    # send out to the "$Body" collection
    'Check to see if Sweep Service is running, file count for [ {0} ] = {1}' -f $FL_Item, $CurrentFileCount
    }

if ($TotalFileCount -gt $TriggerFileCount)
    {
    $SMM_Params = @{
        From = 'NotMe@example.com'
        To = 'NotYou@example.com'
        Subject = 'Sweep Checker'
        Body = $Body -join [System.Environment]::NewLine
        SmtpServer = $SmtpServer
        }

    $SMM_Params

    #Send-MailMessage @SMM_Params
    }

вывод ...

Name                           Value
----                           -----
Subject                        Sweep Checker
From                           NotMe@example.com
To                             NotYou@example.com
SmtpServer                     webmail.you.com
Body                           Check to see if Sweep Service is running, file count for [ C:\Temp ] = 22...

полное содержимое переменной $Body ...

Check to see if Sweep Service is running, file count for [ C:\Temp ] = 22
Check to see if Sweep Service is running, file count for [ C:\Users\MyUserName ] = 5
Check to see if Sweep Service is running, file count for [ C:\ProgramData ] = 0
...