我试过这个命令,它运行正常:
$path = "C:\sometext.txt"
[System.IO.File]::ReadAllBytes("$path")
但是当我尝试使用像这段代码的唯一ID读取PowerShell中文件的所有字节时,它不起作用:
$path = "\\.\Volume{3386ab07-0000-0000-0000-501f00000000}\sometext.txt"
[System.IO.File]::ReadAllBytes("$path")
我使用唯一ID:
$listdrive = ""
$drivelistuniqueID = Get-Volume
foreach ($item in $drivelistuniqueID)
{
$listdrive += $item.UniqueId + "DriveLetterSplIttEr"
}
$listdrive=$listdrive.Replace("?",".")
$listdrive
如果我不将?
替换为.
PowerShell说:
Exception calling "ReadAllBytes" with "1" argument(s): "Illegal characters in path." At line:3 char:1 + [System.IO.File]::ReadAllBytes("$path") + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : ArgumentException
有关如何解决此错误的任何想法? 我只需要使用GUID(唯一ID)读取文件。
答案 0 :(得分:0)
您在那里混合文件和设备namespaces,我甚至不确定System.IO.File
方法是否支持命名空间路径。无论如何你想要实现什么?如果要从已安装的卷读取文件,则应执行以下操作:
$guid = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
$drive = (Get-Volume | Where-Object {$_.ObjectId -like "*$guid*"}).DriveLetter
$path = Join-Path "${drive}:" 'sometext.txt'
$data = [IO.File]::ReadAllBytes($path)
如果驱动器尚未安装,则可能需要先安装它。
Get-Volume |
Where-Object {$_.ObjectId -like "*$guid*"} |
Get-Partition |
Set-Partition -NewDriveLetter X
我认为您无法通过System.IO.File
在未安装的卷上访问文件。
答案 1 :(得分:0)
实际上当你想要读取所有字节时,你可以直接进行。在您的计算机上测试这个使用GUID创建新文件然后尝试打开文件。你会发现你不能。如果你想使用readallbyte,你应该挂钩。