在事件查看器中显示退出代码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"
}
答
您是否记得在小时内输入负值?
解决发生的问题的一个好方法是使用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脚本吗? –
它是如何部署到biztalk服务器的? – 4c74356b41
我们正在使用Windows任务调度程序。以具有本地管理员权限的帐户运行。 – Jarrett
所以它与biztalk真的没有关系? – 4c74356b41