2017-05-24 3 views
1

Das Ausführen dieses Codes in ISE funktioniert.Aktuelles Verzeichnis anscheinend nicht aktuelles Verzeichnis

Push-Location -Path $(Split-Path -Parent $myInvocation.MyCommand.Path) 
Get-Location 
$file = '.\ex.txt' 
$reader = New-Object System.IO.StreamReader($file) 

Das Ausführen des gleichen Codes in der Konsole schlägt fehl. Was vermisse ich?

PS H:\src\powershell> .\ccount.ps1 

Path 
---- 
H:\src\powershell 
New-Object : Exception calling ".ctor" with "1" argument(s): "Could not find file 
'C:\src\powershell\ex.txt'." 
At H:\src\powershell\ccount.ps1:9 char:11 
+ $reader = New-Object System.IO.StreamReader($file) 
+   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : InvalidOperation: (:) [New-Object], MethodInvocationException 
    + FullyQualifiedErrorId : ConstructorInvokedThrowException,Microsoft.PowerShell.Commands 
    .NewObjectCommand 

Wie dies von der vorgeschlagenen doppelten

Die anderen Frage/Antwort anders tut für eine Erklärung geben, warum Powershell in diesem Fall versagt. Es gibt jedoch keinen Hinweis darauf, warum dies in ISE funktioniert. Dies scheint ein signifikanter Unterschied zwischen der Konsole und dem ISE-Host zu sein.

Ich verwende PSVersion 5.0.10586.117 auf Windows 7 Enterprise SP1.

+0

Mögliche Duplikate von [Warum nicht .NET-Objekte in PowerShell verwenden das aktuelle Verzeichnis?] (Https://stackoverflow.com/questions/11246068/why-dont-net-objects-in-powershell-use-the -current-directory) – BenH

Antwort

1
Push-Location -Path $(Split-Path -Parent $myInvocation.MyCommand.Path) 
$myInvocation.MyCommand.Path 
Get-Location 
$file = Resolve-Path '.\ex.txt' 
$reader = New-Object System.IO.StreamReader($file) 
+0

Genau das funktioniert nicht auf dem Konsolen-Host. Hast du das in ISE ausgeführt? – lit

+0

Ich habe dies auf ISE und Konsolenhost ausgeführt. Meine Umgebung ist jedoch Windows 10. Überprüfen Sie die Umgebungsvariable '[Environment] :: CurrentDirectory'. Es kann in Konsolen-Host und ISE anders eingestellt sein. – rawel

0

Verwenden Sie einfach:

Push-Location $PSScriptRoot 

Es ist in beiden Fällen funktioniert, solange Sie eine aktuelle Powershell-Version (v3 +) verwenden.

+0

Das ist falsch, das Problem liegt nicht bei '$ myInvocation.MyCommand.Path', sondern beim Erstellen eines .Net-Objekts mit' New-Object System.IO.StreamReader ($ file) ' . Wie der Fragesteller zeigt, stimmt die von 'Get-Location':' H: \ src \ powershell' zurückgegebene Position nicht mit der Position in der Fehlermeldung 'C: \ src \ powershell \ ex.txt' überein – BenH

Verwandte Themen