Tof*_*Bug 5 powershell powershell-4.0
当我FileInfo
通过调用获取对象时,我注意到 PS ISE 和 PS 中的行为非常奇怪
$FileInfo = [System.IO.FileInfo](".\SomeFile.ext")
Run Code Online (Sandbox Code Playgroud)
当我查看它的属性DirectoryName
及其相关属性时,它们都默认为 PS 打开的原始路径。
这是我的 ISE 的副本,它以管理员身份启动,并c:\Windows\System32
作为默认路径
如果我运行以下代码:
$Fileinfo = [System.IO.FileInfo](".\@OpenWithToastLogo.png")
cd c:\temp
$Fileinfo2 = [System.IO.FileInfo](".\activation.txt")
z:
$Fileinfo3 = [System.IO.FileInfo](".\7za.exe")
$Fileinfo | fl *
$Fileinfo2 | fl *
$Fileinfo3 | fl *
Run Code Online (Sandbox Code Playgroud)
我明白了
版本信息 :
文件 : C:\WINDOWS\system32\@OpenWithToastLogo.png
内部名称 :
OriginalFilename :
FileVersion :
FileDescription :
产品 :
ProductVersion :
调试 : False
修补 : False
PreRelease : False
PrivateBuild : False
SpecialBuild : False
语言 :
BaseName : @OpenWithToastLogo
目标 : {C:\Windows\WinSxS\wow64_microsoft-windows-openwith_31bf3856ad364e35_10.0.10240.16384_none_7f75eaad41c1f239\@OpenWithToastLogo.png,C:\Windows\SysWOW64\@OpenWithToastLogo.png}
链接类型:硬链接
模式:-a---l
名称:@OpenWithToastLogo .png
长度:160
目录名称:C:\WINDOWS\system32
目录:C:\WINDOWS\system32
IsReadOnly:False
存在:True
全名:C:\WINDOWS\system32\@OpenWithToastLogo.png
扩展名:.png 创建时间:7/10/ 2015 7:00:32 上午
CreationTimeUtc : 7/10/2015 11:00:32 上午
LastAccessTime : 7/10/2015 7:00:32 上午
LastAccessTimeUtc : 7/10/2015 11:00:32 上午
LastWriteTime : 7/ 10/2015 7:00:32 AM
LastWriteTimeUtc:7/10/2015 11:00:32 AM
属性:存档版本信息:
基本名称:激活目标:
链接类型:
模式:darhsl
名称:activation.txt
长度:目录
名称:C:\WINDOWS\system32
目录:C:\WINDOWS\system32
IsReadOnly:True
存在:False
全名:C:\WINDOWS\system32\激活.txt
扩展名:.txt
创建时间:12/31/1600 7:00:00 PM
CreationTimeUtc:1/1/1601 12:00:00 AM
LastAccessTime:12/31/1600 7:00:00 PM
LastAccessTimeUtc:1/ 1/1601 12:00:00 AM
LastWriteTime:12/31/1600 7:00:00 PM
LastWriteTimeUtc:1/1/1601 12:00:00 AM
属性:-1版本信息:
基本名称:
7za 目标:
链接类型:
模式:darhsl
名称:7za.exe
长度:目录
名称:C:\WINDOWS\system32
目录:C:\WINDOWS\system32
IsReadOnly:True
存在:False
全名:C:\WINDOWS\system32\ 7za.exe
扩展名:.exe
创建时间:12/31/1600 7:00:00 PM
CreationTimeUtc:1/1/1601 12:00:00 AM LastAccessTime:12/31/1600 7:00:00 PM
LastAccessTimeUtc:1/ 1/1601 12:00:00 AM
LastWriteTime:12/31/1600 7:00:00 PM
LastWriteTimeUtc:1/1/1601 12:00:00 AM
属性:-1
对于我的常规帐户,它默认为我的H:\
路径,因此H:\
与DirectoryName
.
是的,这些文件中的每一个都只存在于它相对的目录中。
有人以前见过这个吗?他们知道一个好的解决办法吗?使用完全限定当然可行,但这适用于其他技术人员可能运行的脚本,而且我们都非常习惯使用 PS 相对路径的想法。
\n\n\n\n\nPowerShell 具有您当前位置的概念。
\n\n$pwd
您可以使用自动变量或Get-Location
cmdlet [..]来查看\nPowerShell 使用此路径来解析 PowerShell API 级别的相对路径。
\n\n[..]
\n\n应用程序有当前目录的概念。这是用于解析 Windows API 级别的相对路径的目录。
\n\n你是如何被烧伤的
\n\n您当前的位置可能与当前目录相同,也可能不同。
\n
和
\n\n\n\n\n\n经常出现的一个问题是,\xe2\x80\x9c为什么
\n\n[System.Environment]::CurrentDirectory
当我在 shell 中导航时,PowerShell 不\n 更改它?\xe2\x80\x9d其中困难的方面之一来自于 PowerShell 支持多个执行管道这一事实。虽然它\xe2\x80\x99s\n 尚未直接公开,但用户很快就能够暂停后台作业和其他并发任务。
\n\n当前目录会影响整个进程,因此,如果我们在 shell 中导航时更改\n 目录,则可能会损坏\n 在后台运行的作业的环境。
\n\n在 .Net 方法中使用文件名时,最佳做法是使用完全限定路径名。cmdlet
\n\nResolve-Path
使这一切变得简单:\n
$reader = new-object System.Xml.XmlTextReader (Resolve-Path baseline.xml)