Warum verwenden .NET-Objekte in PowerShell nicht das aktuelle Verzeichnis?

8

Wenn Sie ein .NET-Objekt von PowerShell verwenden und einen Dateinamen verwenden, scheint es immer relativ zu C:\Windows\System32 zu sein.

Zum Beispiel:

%Vor%

... schreibt C:\Windows\System32\hello.txt anstatt C:\Current\Directory\hello.txt

Warum macht PowerShell das? Kann dieses Verhalten geändert werden? Wenn es nicht geändert werden kann, wie kann ich es umgehen?

Ich habe versucht, Resolve-Path , aber das funktioniert nur mit Dateien, die bereits vorhanden sind, und es ist viel zu ausführlich, um die ganze Zeit zu tun.

    
Roger Lipscombe 28.06.2012, 13:45
quelle

5 Antworten

7

Die Gründe, warum PowerShell die .NET-Vorstellung des aktuellen Arbeitsverzeichnisses nicht mit PowerShells Konzept des Arbeitsverzeichnisses synchronisiert, sind:

  1. PowerShell-Arbeitsverzeichnisse können sich in einem Anbieter befinden, der nicht einmal ein Dateisystem ist basierend z.B. HKLM: \ Software
  2. Ein einzelner PowerShell-Prozess kann vorhanden sein mehrere Runspaces. Jeder Runspace kann in eine andere Datei umgewandelt werden Systemstandort Allerdings ist das .NET / Prozess "Arbeitsverzeichnis" im Wesentlichen eine globale für den Prozess und würde nicht für eine funktionieren Szenario, in dem mehrere Arbeitsverzeichnisse vorhanden sein können (einer pro Runspace).
Keith Hill 28.06.2012, 15:41
quelle
15

Sie können das .net-Arbeitsverzeichnis in das Powershell-Arbeitsverzeichnis ändern:
[Environment]::CurrentDirectory = (Get-Location -PSProvider FileSystem).ProviderPath
Nach dieser Zeile funktionieren alle .net Methoden wie [io.path]::GetFullPath und [IO.File]::WriteAllText ohne Probleme

    
Denis Bakharev 30.04.2013 16:59
quelle
0

Das liegt wahrscheinlich daran, dass PowerShell in System32 ausgeführt wird. Wenn Sie in ein Verzeichnis in PowerShell wechseln, wird das Arbeitsverzeichnis von powershell.exe nicht geändert.

Siehe:

PowerTip-Artikel zum Synchronisieren der beiden Verzeichnisse

Channel9-Forum-Thread

    
JohnL 28.06.2012 13:50
quelle
0

Wenn Sie Dateinamen in .NET-Methoden verwenden, empfiehlt es sich, vollständig qualifizierte Pfadnamen zu verwenden. Oder benutze

%Vor%

Wenn Sie in der Powershell-Konsole von:

%Vor%

Sie können sehen, welchen Ordner .net verwenden.

    
CB. 28.06.2012 13:56
quelle
0

Ich habe vor langer Zeit dasselbe Problem kennengelernt und jetzt füge ich folgendes an den Anfang meines Profils:

%Vor%     
Greg Wojan 28.06.2012 14:50
quelle

Tags und Links