2017-04-11 204 views
1

我有这个powershell脚本,当在某个目录中创建一个文件时触发一些指令。 一切正常,但我无法在动作完成后关闭PowerShell。 我该怎么做?退出PowerShell脚本

### SET FOLDER TO WATCH + FILES TO WATCH + SUBFOLDERS YES/NO 
$watcher = New-Object System.IO.FileSystemWatcher 
$watcher.Path = "C:\Users\Autostrade\CartellaSFTP" 
$watcher.Filter = "*.*" 
$watcher.IncludeSubdirectories = $false 
$watcher.EnableRaisingEvents = $true 
$uscita = 0 

### DEFINE ACTIONS AFTER AN EVENT IS DETECTED 
$action = { $path = $Event.SourceEventArgs.FullPath 
      $changeType = $Event.SourceEventArgs.ChangeType 
      $logline = "$(Get-Date), $changeType, $path" 
      Add-content "C:\Users\Autostrade\PHP Script Dati Telepass\log.txt" -value $logline 
      # Set up references to executable and script 
      $PhpExe = "C:\PHP\php.exe" 
      $PhpFile = "C:\Users\Autostrade\PHP Script Dati Telepass\script.php" 

      # Create arguments from Script location 
      # usually php.exe is invoked from console like: 
      # php.exe -f "C:\path\myscript.php" 
      #$PhpArgs = '-f "{0}"' -f $PhpFile 

      # Invoke, using the call operator 
      $PhpOutput = & $PhpExe $PhpFile 
      PhpOutput 
      $uscita = 1 
      }  
### DECIDE WHICH EVENTS SHOULD BE WATCHED 
Register-ObjectEvent $watcher "Created" -Action $action 
#Register-ObjectEvent $watcher "Changed" -Action $action 
#Register-ObjectEvent $watcher "Deleted" -Action $action 
#Register-ObjectEvent $watcher "Renamed" -Action $action 
while (!$uscita) {sleep 5} 
exit 

我试过使用“$ uscita”变量来停止while和exit,但它不工作。我也试图把行动的结束退出命令,但这是行不通的

+1

'$ uscita = 1' - >'$使用:uscita = 1' –

+0

我试过.. PowerShell的给一些错误,并立刻关闭..我不能读什么是错误 – seb

+0

删除'exit'并从PowerShell提示符运行脚本。 –

回答

0

副手它看起来像你的第二行到最后一行可能会返回true,所以它只是坐在睡眠命令。

试试这个测试,如果最后一条命令成功完成,它将返回true。

while (!$uscita) {write-output $?; sleep 5} 
+0

好吧,我试过了。当我在监控的目录中插入一个文件时,它会给我“错误”。但是循环不会停止。它继续并返回true – seb

+0

这很有道理,我们正在接近。 $?会告诉你(真/假)前一个命令是否成功并且它已经完成。现在我想知道:你说“它给我'假'”,你的意思是这个声明!$ uscita返回$ true? (意思是$ uscita -eq $ false)。 – primohacker

+0

我不确定你发布的答案是最好的办法。考虑设置$ uscita = $ true,而不是设置$ uscita = 1。然后解决使用 - while(!$ uscita){write-output $ uscita;睡5}。如果这仍然无限循环,这意味着$ uscita = $ true行没有被击中。开始将其他写入输出放在$ action块或更高的位置,以便您可以看到问题出在哪里。不要忘记排除功能PhpOutput的故障。意外的行为可能会阻止设置$ uscita。 – primohacker

0

我以这种方式编辑了我的代码的最后一部分,现在它的工作原理。所以在动作结束后,剧本结束。 下面的代码:

while (!$uscita) { 
if($? -eq $false) { 
    exit 
    } 
sleep 5}