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

问题描述:

我对power shell非常陌生,并且我被要求生成一个脚本来检查特定文件夹并确定是否有任何.xml文件已经在此文件夹中保存更长时间比2小时。我写的脚本确实有用,但是当它被部署到biztalk服务器时,它会生成1的退出码。我不确定这个脚本是否导致我们现在正在使用该服务器遇到的问题,或者不是,所以我希望这里的某个人可能会提供一些见解。在事件查看器中显示退出代码1的PowerShell脚本

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" 
} 
+0

它是如何部署到biztalk服务器的? – 4c74356b41

+0

我们正在使用Windows任务调度程序。以具有本地管理员权限的帐户运行。 – Jarrett

+0

所以它与biztalk真的没有关系? – 4c74356b41

您是否记得在小时内输入负值?

解决发生的问题的一个好方法是使用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" 
    } 
+0

另外请确保检查服务器上的executionpolicy。你允许运行PowerShell脚本吗? –