powershell如何处理来自&呼叫

时间:2016-06-27 13:06:29

标签: powershell

我们有现场设备,我们决定使用PowerShell脚本来帮助我们处理'更新'在将来。它每5分钟运行一次,以执行rsync以查看是否应下载任何新文件。该脚本,如果它看到任何文件类型.ps1,.exe,.bat等。然后将尝试使用&运算符执行这些文件。在执行结束时,脚本将写入执行了排除文件的文件(以便rsync不会再次下载)并删除该文件。我的问题是执行代码的返回(由&调用)的行为有所不同,具体取决于主脚本的调用方式。

这是主要的'胆量'脚本:

Get-ChildItem -Path $ScriptDir\Installs\* -Include @("*.ps1","*.exe","*.cmd","*.VBS","*.MSI") | ForEach {

   Write-Verbose "Executing: $_"
   & $_
   $CommandName = Split-Path -Leaf $_
   Write-Verbose "Adding $CommandName to rsync excludes"
   Write-Output "$CommandName" | Out-File -FilePath $ScriptDir\excludes     -Append -Encoding ASCII
   Write-Verbose "Deleting '$_'"
   Remove-Item $_
}

当调用powershell(powershell.exe -ExecutionPolicy bypass)然后执行脚本(.\Update.ps1 -Verbose)时,脚本运行完美(文件被写入以排除和删除)并且您可以看到详细的输出(写入和删除)。

如果运行以下命令(类似于任务调度程序)powershell.exe -ExecutionPolicy bypass -NoProfile -File "C:\Update.ps1" -Verbose,您可以看到新脚本已执行但之后的任何步骤都不会执行(没有添加到排除或删除文件或详细输出。)

0 个答案:

没有答案