这是我的问题。我试图弄清楚如何隐藏父级主管和我使用powershell创建的所有子目录。这是我正在使用的代码... $ f = ni -ItemType目录-Path'C:[名称] [名称] [名称] \'-强制 $ f.attributes ='隐藏' 我的问题是它只会隐藏最后一个文件夹,而不是整个路径。请帮助我摆脱掉头发和牙齿。
$ f = ni -ItemType目录-路径'C:[名称] [名称] [名称] \'-强制 $ f.attributes ='隐藏'
$ f = ni -ItemType目录-路径'C:[名称] [名称] [名称] \'-强制 $ f.attributes ='隐藏'
预期结果是隐藏父目录和子目录。实际发生的只是只隐藏了最后一个子目录。
答案 0 :(得分:0)
改为在C:\ Name上设置属性。
答案 1 :(得分:0)
首先,为什么要排队? 他们在做完全一样的事情。
这不是特定于PowerShell的问题。这是Windows文件系统约束。因此,如果您在DOS(cmd.exe)或任何其他语言中执行此操作并尝试了此操作,则同样的事情也会发生。
属性应用于传递给它的单个对象。目录树不是一件事,它是一个集合。
因此,如果要执行此操作,则必须迭代树。
最后,如果您隐藏父级,我不确定为什么需要隐藏子级,因为默认情况下会隐藏它们(即使未设置属性) ,好吧,除非您知道父母的名字和导航到孩子的名字。然而,发现隐藏的东西的任何一种方法都非常简单。因此,我不确定您要借此完成什么。
反正这就是我的意思...
New-Item -ItemType Directory -Path 'E:\Parent\Child\GrandChild' -Force
# Results
<#
Directory: E:\Parent\Child
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 7/7/2019 7:16 PM GrandChild
Notice that doing what you are doing, only returns the last thing, by Windows
file system design. This is why you are only getting the setting on the one
item.
#>
# Not all of them that were created - To get all things in a tree, you have to recurse.
Get-ChildItem -Path 'E:\Parent' -Recurse
# Results
<#
Directory: E:\Parent
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 7/7/2019 7:16 PM Child
Directory: E:\Parent\Child
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 7/7/2019 7:16 PM GrandChild
#>
<#
Since there is no -recurse in New-Item, as per the help files info ...
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/new-item?view=powershell-6
... after doing the first line to create the tree, iterate to set the attribute
on the children and grandchildren, etc., first, then act on the parent.
Again, breaking down the object.
#>
($NewTree = New-Item -ItemType Directory -Path 'E:\Parent\Child\GrandChild' -Force)
# Results
<#
Directory: E:\Parent\Child
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 7/7/2019 7:16 PM GrandChild
#>
$NewTree.Name
# Results
# GrandChild
$NewTree.FullName
# Results
# E:\Parent\Child\GrandChild
$NewTree.Parent
# Results
<#
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 7/7/2019 8:10 PM Child
#>
$NewTree.PSChildName
# Results
# GrandChild
Get-ChildItem -Path 'E:\Parent' -Recurse
# Results
<#
Get-ChildItem -Path 'E:\Parent' -Recurse
Directory: E:\Parent
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 7/7/2019 8:30 PM Child
Directory: E:\Parent\Child
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 7/7/2019 8:30 PM GrandChild
#>
# So, iterate the children and set the attribute
($ChildFolders = (Get-ChildItem -Path 'E:\Parent' -Recurse)) |
ForEach{$PSItem.Attributes = 'Hidden'}
# Then set the final parent.
($ParentFolder = Get-ChildItem -Directory -Path 'E:\' |
Where Name -eq 'Parent').Attributes = 'Hidden'
Get-ChildItem -Path 'E:\Parent' -Recurse
# Resutls
<#
#>
Get-ChildItem -Path 'E:\Parent' -Force -Recurse
# Results
<#
Get-ChildItem -Path 'E:\Parent' -Force -Recurse
Directory: E:\Parent
Mode LastWriteTime Length Name
---- ------------- ------ ----
d--h-- 7/7/2019 8:39 PM Child
Directory: E:\Parent\Child
Mode LastWriteTime Length Name
---- ------------- ------ ----
d--h-- 7/7/2019 8:39 PM GrandChild
#>