2010-05-05 17 views

Odpowiedz

7

Ahh często wywołuje to ludzi w PowerShell. Chociaż PowerShell ma pojęcie bieżącego katalogu, to nie jest tożsamy ​​z bieżącym katalogiem dla procesu. Powodem jest to, że proces systemu Windows może mieć tylko jeden bieżący katalog, podczas gdy proces PowerShell może mieć wiele obszarów roboczych/potoków, każdy z własnym katalogiem bieżącym, a katalog bieżący PowerShell może nawet nie być lokalizacją pliku.

. Metody .NET, które pobierają ścieżki względne, zostaną rozwiązane względem bieżącego katalogu procesu. Aby być bezpiecznym, podczas wywoływania metod .NET powinieneś używać w pełni rozwiązanych ścieżek. Można zrobić:

PS> (New-Object IO.FileInfo "$PWD\test.txt").FullName 

$ PWD zostanie rozszerzony wewnątrz łańcucha (ze względu na cudzysłów) i jej zmienną automatyczną, która zawsze zwraca bieżący katalog roboczy. W rzeczywistości zwraca obiekt PathInfo, ponieważ łańcuch, który osadza, nie zawsze jest absolutną ścieżką fizyczną. Jeśli używasz PSDrives (na przykład mam temp: \ dysk zmapowany do mojego katalogu tymczasowego), musisz być bardziej bezpośredni.

PS> (New-Object IO.FileInfo "$($PWD.ProviderPath)\test.txt").FullName 

Guru PowerShell może mieć bardziej zwięzłą składnię. Powyższe jest wprawdzie dość brzydkie.

Powiązane problemy