Repository navigation
Closed
Labels
Area-FileSystem-Providerspecific to the FileSystem providerspecific to the FileSystem providerIssue-BugIssue has been identified as a bug in the productIssue has been identified as a bug in the productResolution-No ActivityIssue has had no activity for 6 months or moreIssue has had no activity for 6 months or moreWG-Cmdletsgeneral cmdlet issuesgeneral cmdlet issuesWG-Engine-Providersbuilt-in PowerShell providers such as FileSystem, Certificates, Registry, etc.built-in PowerShell providers such as FileSystem, Certificates, Registry, etc.
Description
PowerShell Core (unlike Windows PowerShell) by default is supposed to not follow symlinks (symbolic links) to directories during recursive traversal with Get-ChildItem -Recurse (you can opt in with -FollowSymlink).
While this generally works, using the -Name or -Include / -Exclude switches unexpectedly causes symlinks to be followed even without the -FollowSymlink switch.
Note: On Windows, the tests currently fail categorically, due to an unrelated bug: #9127
Steps to reproduce (on Unix)
Run the following Pester tests:
Describe "Get-ChildItem: symlink-following tests" {
BeforeAll {
Push-Location TestDrive:/
# Create a directory with 2 files in it.
$null = New-Item -Type Directory someDir
1..2 | % { $_ > "someDir/$_.txt" }
# Create a symlink to that directory, as a sibling.
New-Item -Type SymbolicLink someDirLink -Target someDir
}
AfterAll {
Pop-Location
}
It "Get-ChildItem -Recurse doesn't follow dir. symlinks." {
(Get-ChildItem -File -Recurse).Count | Should -Be 2
}
It "Get-ChildItem -Recurse -Path with a wildcard doesn't follow dir. symlinks." {
(Get-ChildItem -File -Recurse -Path *).Count | Should -Be 2
}
It "Get-ChildItem -Recurse -Name doesn't follow dir. symlinks." {
(Get-ChildItem -File -Recurse -Name).Count | Should -Be 2
}
It "Get-ChildItem -Recurse -Include doesn't follow dir. symlinks." {
(Get-ChildItem -File -Recurse -Include *).Count | Should -Be 2
}
It "Get-ChildItem -Recurse -Exclude doesn't follow dir. symlinks." {
(Get-ChildItem -File -Recurse -Exclude nosuch).Count | Should -Be 2
}
}Expected behavior
All tests should pass.
Actual behavior
The last 3 tests fail.
Environment data
PowerShell Core 6.2.0-rc.1
Reacted by Aleksey Usatov
Metadata
Metadata
Assignees
Labels
Area-FileSystem-Providerspecific to the FileSystem providerspecific to the FileSystem providerIssue-BugIssue has been identified as a bug in the productIssue has been identified as a bug in the productResolution-No ActivityIssue has had no activity for 6 months or moreIssue has had no activity for 6 months or moreWG-Cmdletsgeneral cmdlet issuesgeneral cmdlet issuesWG-Engine-Providersbuilt-in PowerShell providers such as FileSystem, Certificates, Registry, etc.built-in PowerShell providers such as FileSystem, Certificates, Registry, etc.
Activity
[-]Get-ChildItem -Name and Get-ChildItem -Include / -Exclude unexpectedly follow symlinks[/-][+]Get-ChildItem -Name and Get-ChildItem -Include / -Exclude unexpectedly follow symlinks with -Recurse[/+]ChrSchultz commentedon Mar 13, 2019
on Windows all tests fails,
Describing Get-ChildItem: symlink-following tests[-] Get-ChildItem -Recurse doesn't follow dir. symlinks. 6ms Expected 2, but got 3.15: (Get-ChildItem -File -Recurse).Count | Should -Be 2at <ScriptBlock>, C:\Users\ic-sc\test.ps1: line 15[-] Get-ChildItem -Recurse -Path with a wildcard doesn't follow dir. symlinks. 5ms Expected 2, but got 3.19: (Get-ChildItem -File -Recurse -Path *).Count | Should -Be 2 at <ScriptBlock>, C:\Users\ic-sc\test.ps1: line 19[-] Get-ChildItem -Recurse -Name doesn't follow dir. symlinks. 7ms Expected 2, but got 3.23: (Get-ChildItem -File -Recurse -Name).Count | Should -Be 2 at <ScriptBlock>, C:\Users\ic-sc\test.ps1: line 23[-] Get-ChildItem -Recurse -Include doesn't follow dir. symlinks. 7ms Expected 2, but got 3.27: (Get-ChildItem -File -Recurse -Include *).Count | Should -Be 2 at <ScriptBlock>, C:\Users\ic-sc\test.ps1: line 27[-] Get-ChildItem -Recurse -Exclude doesn't follow dir. symlinks. 8ms Expected 2, but got 3.31: (Get-ChildItem -File -Recurse -Exclude nosuch).Count | Should -Be 2 at <ScriptBlock>, C:\Users\ic-sc\test.ps1: line 31Tests completed in 146msTests Passed: 0, Failed: 5, Skipped: 0, Pending: 0, Inconclusive: 0mklement0 commentedon Mar 13, 2019
Christoph Schultz (@ChrSchultz): That is due to an unrelated bug, reported in #9127 - I've added this info to the OP.
Bertaz commentedon Oct 9, 2022
By changing #L4
New-Item -Type SymbolicLink someDirLink -Target someDirintoNew-Item -Type SymbolicLink someDirLink -Target .\someDirthe tests can ignore the unrelated bug.That bug is specifically caused by #15161, which was closed as duplicate of the more comprehensive issue #15235. (#9127 is closed as fixed, but was only partially fixed)
Result:
microsoft-github-policy-service commentedon Nov 16, 2023
This issue has not had any activity in 6 months, if this is a bug please try to reproduce on the latest version of PowerShell and reopen a new issue and reference this issue if this is still a blocker for you.
microsoft-github-policy-service commentedon Nov 16, 2023
This issue has not had any activity in 6 months, if this is a bug please try to reproduce on the latest version of PowerShell and reopen a new issue and reference this issue if this is still a blocker for you.
microsoft-github-policy-service commentedon Nov 16, 2023
This issue has not had any activity in 6 months, if this is a bug please try to reproduce on the latest version of PowerShell and reopen a new issue and reference this issue if this is still a blocker for you.
microsoft-github-policy-service commentedon Nov 23, 2023
This issue has been marked as "No Activity" as there has been no activity for 6 months. It has been closed for housekeeping purposes.