PowerShell脚本在事件查看器中显示退出代码1

时间:2016-12-15 19:47:25

标签: powershell

我对power shell很新,我被要求生成一个检查特定文件夹的脚本,并确定是否有任何.xml文件在此文件夹中放置的时间超过2小时。我编写的脚本确实有效但是当它部署到biztalk服务器时它会生成1的退出代码。我不确定这个脚本是否导致了我们现在正在使用该服务器的问题,所以我希望这里有人可能能提供一些见解。

    param(
        [String]$folderPath, 
        [int] $hoursToCheck
     )

$folderExists = Test-Path $folderPath

If((Get-Date).DayOfWeek.value__ -eq 0 -or (Get-Date).DayOfWeek.value__ -eq 6)
{
    exit
}

If($folderExists -eq $false)
{

    Send-MailMessage -SmtpServer "mail server" -To "email address" -From "email address" -Subject "email subject." -Body "email message"
}

ElseIf(Get-ChildItem -Path $folderPath | Where-Object {$_.Extension -like "*.xml" -and $_.LastWriteTime -lt (get-Date).AddHours($hoursToCheck)})
{

    Send-MailMessage -SmtpServer "email server" -To "address" -From "address" -Subject "email message" -Body "email body"
}

1 个答案:

答案 0 :(得分:0)

您还记得输入负值吗?

解决正在发生的事情的一个好方法是使用write-verbose命令。以下是脚本的修改版本,顶部有cmdletbinding(),允许您在运行脚本时使用verbose参数。我已经改变了小时的标志,所以我减去了小时数。您使用-verbose参数运行脚本,例如。\。ps1 C:\ xml_folder 2 -Verbose

        [cmdletbinding()]
      param(
            [String]$folderPath, 
            [int] $hoursToCheck
         )

    $folderExists = Test-Path $folderPath
    $currentDate=get-date

    If((Get-Date).DayOfWeek.value__ -eq 0 -or (Get-Date).DayOfWeek.value__ -eq 6)
    {
        write-verbose 'exit here'
        exit
    }

    If($folderExists -eq $false)
    {

        write-verbose 'folder does not exist'
    }

    ElseIf(Get-ChildItem -Path $folderPath -filter '*.xml' | Where-Object {$_.LastWriteTime -lt $currentDate.AddHours(-$hoursToCheck)})
    {

        write-verbose 'xml file exists' 
    }
    else
    {
        write-verbose "no old xml files in folder $folderpath"
    }