enrixk
Goto Top

Mit Powershell ein Verzeichnis kopieren, wenn Visual Studio Code beendet wurde

Hallo Powershell-Experten,

ich habe ein Powershell-Skript geschrieben, das die IDE Visual Studio Code startet. Das Starten wird durch den &-Operator ausgelöst (Zeile 30). Ich benötige nun eine weitere Anweisung, die dafür sorgt, dass das Verzeichnis, in dem der Benutzer programmiert hat, von C:\Users\ nach H:\projekte kopiert wird, wenn der Benutzer die IDE schließt.

Nun weiß ich nicht genau, ob das Skript nach der Verwendung des &-Operators hält und auf das Schließen von Visual Studio Code wartet oder ob die Abarbeitung der Anweisungen parallel zum Aufruf der IDE fortgesetzt wird.

Dank!


class VSCodeSetup{

	[string] $WorkingDir
	[string] $userDataDir
	[string] $projectpath
	[string] $packagepath
		
	VSCodeSetup([string]$workingDir,[string]$userDataDir,[string]$projectpath,[string] $packagepath){
		$this.workingDir=$workingDir
		$this.userDataDir=$userDataDir
		$this.projectpath=$projectpath
		$this.packagepath=$packagepath

		If(!(test-path -Path $this.WorkingDir)){
      		New-Item -ItemType Directory -Force -Path $this.WorkingDir
	  		New-Item -ItemType Directory -Force -Path $this.userDataDir
			New-Item -ItemType Directory -Force -Path $this.projectpath
			Copy-Item "C:\Program Files\Microsoft VS Code\projects\" -Destination $this.projectpath -Recurse  
		}	
		
		If(!(test-path -Path ($this.packagepath+"\packages"))){  
			Copy-Item "C:\Program Files\Microsoft VS Code\packages\" -Destination $this.packagepath -Recurse  
		}	
	}

	[void] startVSCode(){
		$this.projectpath+="\projects"  
		$userDataPath=$this.userDataDir
		$arguments=@("--extensions-dir=""C:\Program Files\Microsoft VS Code\ext""","--user-data-dir=""$userDataPath""", $this.projectpath)  
		& "C:\Program Files\Microsoft VS Code\Code.exe"  $arguments  
	}
	
	[void] clearUserdata(){
		If(!(test-path -Path ($this.userDataDir))){
			Remove-Item 'C:\tmp\userdata' -Recurse  
		}
	}

}
$workingDir="H:\vscode"  
$extensionsDir="C:\Program Files\Microsoft VS Code\ext"  
$userDataDir="C:\tmp\userdata"  
$projectpath=$workingDir
$packagepath="C:\"  

$start= [VSCodeSetup]::new($workingDir,$userDataDir,$projectpath,$packagepath)
$start.clearUserdata()
$start.startVSCode()

Content-Key: 2277920221

Url: https://administrator.de/contentid/2277920221

Ausgedruckt am: 25.04.2024 um 20:04 Uhr

Mitglied: 1915348599
Lösung 1915348599 25.03.2022 aktualisiert um 07:27:03 Uhr
Goto Top
Nun weiß ich nicht genau, ob das Skript nach der Verwendung des &-Operators hält und auf das Schließen von Visual Studio Code wartet
Das ist beim & Operator per Default der Fall, aber kommt primär auf die Anwendung drauf an, wenn diese bspw. einen Prozess startet der sich kurz nach dem Start selbst beendet und einen anderen initiiert dann arbeitet die Shell natürlich direkt weiter.
Des weiteren hast du immer auch start-process mit dem -wait Parameter zur Verfügung, aber auch hier gilt, macht die Anwendung nicht mit bringt dir der -wait Parameter auch nichts, dann musst du per while Schleife die Prozessliste auf dein Programm überwachen und bei Fehlen des Prozesses in der Liste dann weiter machen.
while((Get-Process -Name [MeinProzess] -EA SilentlyContinue)){
    Sleep 2
}
# hier geht's weiter nachdem es keinen Prozess mehr gibt 

Hatte man ja eigentlich auch selbst mal schnell selbst testen können, 🤔 ...
Mitglied: Enrixk
Enrixk 25.03.2022 um 11:03:53 Uhr
Goto Top
Ich habe es gerade mit dem folgenden Default-Verhalten probiert:

	[void] startVSCode(){
		$this.projectpath+="\projects"  
		$userDataPath=$this.userDataDir
		$arguments=@("--extensions-dir=""C:\Program Files\Microsoft VS Code\ext""","--user-data-dir=""$userDataPath""", $this.projectpath)  
		& "C:\Program Files\Microsoft VS Code\Code.exe"  $arguments  
		Move-Item -path $this.workingDir -Destination "H:\" 	  
	}

Move-Item soll, nachdem Visual Studio Code beendet wurde, das Projektverzeichnis verschieben.

Dummerweise wartet das Skript tatsächlich nicht, bis Visual Studio Code geschlossen wurde. Es rast gleich weiter zu der Anweisung Move-Items und zieht der noch offenen IDE den Boden unter den Füßen weg face-smile

Ich steige allerdings nicht durch, was deine While-Schleife macht. Ist -EA ein logischer Operator?
Mitglied: Enrixk
Enrixk 25.03.2022 um 11:09:16 Uhr
Goto Top
Ah...Ich habs gecheckt, die While-Schleife wird ausgeführt, solange z. B. der Prozess Code läuft. Wenn dieser Beendet wurde termi9niert die Schleife und ich kannd en Ordner verschieben.