Powershell Get-Item 找不到路径
Powershell Get-Item cannot find path
我正在使用 Powershell 脚本来更改文件夹(实际上是 $Recycle.Bin 文件夹)的 ACL,但我一直坚持对文件夹实际应用权限,因为 Get-Item cmdlet 没有找到路径。
这是(部分)脚本:
$acl = Get-Acl "$env:USERPROFILE\`$Recycle.Bin"
$AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule("BUILTIN\Users",'FullControl', 'ContainerInherit, ObjectInherit', 'None', 'Allow')
$acl.SetAccessRule($AccessRule)
(Get-Item "$env:USERPROFILE\`$Recycle.Bin").SetAccessControl($acl)
我得到的错误是找不到路径:
Get-Item : Could not find item C:\Users\TestUser$Recycle.Bin.
At line:1 char:2
+ (Get-Item "$env:USERPROFILE\`$Recycle.Bin").SetAccessControl($acl)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (C:\Users\test$Recycle.Bin:String) [Get-Item], IOException
+ FullyQualifiedErrorId : ItemNotFound,Microsoft.PowerShell.Commands.GetItemCommand
You cannot call a method on a null-valued expression.
At line:1 char:1
+ (Get-Item "$env:USERPROFILE\`$Recycle.Bin").SetAccessControl($acl)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
Get-Item
cmdlet 找不到路径,但我可以使用 CD
命令成功导航到该路径:
PS C:\Users\TestUser> cd "$env:USERPROFILE\`$Recycle.Bin"
PS C:\Users\RestUser$Recycle.Bin>
我怀疑这是因为 $Recycle.Bin 文件夹在路径中有一个“$”,但我又认为它不应该被解释为一个变量,因为我在其中添加了“`”字符.
虽然我对此可能是错误的。
最好指出此路径实际上是安装到服务器的用户配置文件磁盘(因此是 VHDX)。
如何才能让 Get-Item
cmdlet 真正找到路径?
谢谢!
那是因为那不是 $env: 属性,也不是 Recycle.Bin 所在的地方。
它在这里:要访问回收站文件夹,粘贴...
C:$Recycle.Bin
...在 运行.
也可以用这个访问它:
Get-RecycleBin - 显示回收站的内容
此功能旨在补充 Clear-RecycleBin cmdlet,它不提供查看存储在回收站中的文件的功能。
假设您的路径是正确的并且不在默认位置 C:$Recycle.bin
,您只需要用单引号引用该路径以防止 PowerShell 尝试评估 $Recycle
这很可能是不存在的变量。你可以这样获取回收站的ACL:
Get-Acl -Path (Join-Path -Path $env:USERPROFILE -ChildPath '$Recycle.bin')
如果您想获得更多信息(如 Get-Item
),您必须添加 -Force
参数,因为它是一个隐藏的系统文件夹:
Get-Item -Path (Join-Path -Path $env:USERPROFILE -ChildPath '$Recycle.bin') -Force
我正在使用 Powershell 脚本来更改文件夹(实际上是 $Recycle.Bin 文件夹)的 ACL,但我一直坚持对文件夹实际应用权限,因为 Get-Item cmdlet 没有找到路径。
这是(部分)脚本:
$acl = Get-Acl "$env:USERPROFILE\`$Recycle.Bin"
$AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule("BUILTIN\Users",'FullControl', 'ContainerInherit, ObjectInherit', 'None', 'Allow')
$acl.SetAccessRule($AccessRule)
(Get-Item "$env:USERPROFILE\`$Recycle.Bin").SetAccessControl($acl)
我得到的错误是找不到路径:
Get-Item : Could not find item C:\Users\TestUser$Recycle.Bin.
At line:1 char:2
+ (Get-Item "$env:USERPROFILE\`$Recycle.Bin").SetAccessControl($acl)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (C:\Users\test$Recycle.Bin:String) [Get-Item], IOException
+ FullyQualifiedErrorId : ItemNotFound,Microsoft.PowerShell.Commands.GetItemCommand
You cannot call a method on a null-valued expression.
At line:1 char:1
+ (Get-Item "$env:USERPROFILE\`$Recycle.Bin").SetAccessControl($acl)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
Get-Item
cmdlet 找不到路径,但我可以使用 CD
命令成功导航到该路径:
PS C:\Users\TestUser> cd "$env:USERPROFILE\`$Recycle.Bin"
PS C:\Users\RestUser$Recycle.Bin>
我怀疑这是因为 $Recycle.Bin 文件夹在路径中有一个“$”,但我又认为它不应该被解释为一个变量,因为我在其中添加了“`”字符.
虽然我对此可能是错误的。
最好指出此路径实际上是安装到服务器的用户配置文件磁盘(因此是 VHDX)。
如何才能让 Get-Item
cmdlet 真正找到路径?
谢谢!
那是因为那不是 $env: 属性,也不是 Recycle.Bin 所在的地方。
它在这里:要访问回收站文件夹,粘贴...
C:$Recycle.Bin
...在 运行.
也可以用这个访问它:
Get-RecycleBin - 显示回收站的内容 此功能旨在补充 Clear-RecycleBin cmdlet,它不提供查看存储在回收站中的文件的功能。
假设您的路径是正确的并且不在默认位置 C:$Recycle.bin
,您只需要用单引号引用该路径以防止 PowerShell 尝试评估 $Recycle
这很可能是不存在的变量。你可以这样获取回收站的ACL:
Get-Acl -Path (Join-Path -Path $env:USERPROFILE -ChildPath '$Recycle.bin')
如果您想获得更多信息(如 Get-Item
),您必须添加 -Force
参数,因为它是一个隐藏的系统文件夹:
Get-Item -Path (Join-Path -Path $env:USERPROFILE -ChildPath '$Recycle.bin') -Force