2017-10-23 3 views
1

Ich verwende den folgenden Code-Dateien im aktuellen Skriptverzeichnis zu referenzierenPowershell Referenzierung aktuellen Verzeichnis und Unterordner

$PSScriptRoot = Split-Path -Parent -Path $MyInvocation.MyCommand.Definition 

Dann kann ich es nennen wie

try { 
WriteLog("Installing...") 
$installresult = (Start-Process msiexec.exe -ArgumentList "/i 
$PSScriptRoot\InstallPrism6.msi /qn /norestart" -Wait -PassThru).ExitCode 
WriteLog("Installation finished with return code: $installresult") 
} 
catch { 
    WriteLog($_.Exception.Message) 
} 

Dies funktioniert gut. Allerdings, wenn ich wie eine Datei in einem Unterverzeichnis verweisen möge so

try { 
WriteLog("Installing...") 
$installresult = (Start-Process msiexec.exe -ArgumentList "/i $PSScriptRoot 
+ \test\InstallPrism6.msi /qn /norestart" -Wait -PassThru).ExitCode 
WriteLog("Installation finished with return code: $installresult") 
} 
catch { 
    WriteLog($_.Exception.Message) 
} 

es nicht mit dem Fehlercode 1639 Wenn dies nicht funktioniert, wie kann ich Verzeichnisse verweisen, wenn $ PSScriptRoot verwenden?

+0

Wir rufen PowerShell-Funktionen nicht mit Klammern auf - Sie sollten sagen "WriteLog" Installing ... "' ohne '()'. –

Antwort

0

Beachten Sie, dass die $PSScriptRoot Variable auf Powershell vorgegeben ist 3.0 und höher, so dass Sie nur die Variable benötigen, wenn es nicht bereits definiert ist. Ich glaube, die richtige Syntax für das, was Sie wie folgt tun wollen aussehen sollte:

if (-not $PSScriptRoot) { 
    $PSScriptRoot = Split-Path $MyInvocation.MyCommand.Path -Parent 
} 

try { 
    WriteLog "Installing..." 
    $installresult = (Start-Process msiexec.exe -ArgumentList "/i","`"$PSScriptRoot\test\InstallPrism6.msi`"","/qn","/norestart" -Wait -PassThru).ExitCode 
    WriteLog "Installation finished with return code: $installresult" 
} 
catch { 
    WriteLog $_.Exception.Message 
} 

-ArgumentList ist technisch ein Array ist, und ich die " bei eingebetteten der Pfad jedes Leerzeichen enthält.

0

Versuchen Sie, keine Leerzeichen in Ihrem Pfad zu hinterlassen. Wenn Sie eine Zeichenfolge mit einer Variablen erstellen, müssen Sie nicht verketten. Es geht nicht darum, Unterordner zu referenzieren.

try { 
WriteLog("Installing...") 
$installresult = (Start-Process msiexec.exe -ArgumentList "/i ${PSScriptRoot}\test\InstallPrism6.msi /qn /norestart" -Wait -PassThru).ExitCode 
WriteLog("Installation finished with return code: $installresult") 
} 
catch { 
    WriteLog($_.Exception.Message) 
} 
+0

Leider funktioniert das nicht. – Pickle

+0

Versuchen Sie, '$ {PSScriptRoot} \ test \ InstallPrism6.msi' string auszudrucken ... enthält es Leerzeichen? Auch "das funktioniert nicht" bedeutet, dass Sie den gleichen Fehler haben oder was? – Alfabravo

+0

Es gibt "\ test \ InstallPrism6.msi" ohne Leerzeichen zurück. Fehlercode 1619. – Pickle

Verwandte Themen