Pourquoi ces deux extraits de code se comportent-ils différemment? Est-ce un bug? (PSVersion = 5.1.22621.2506, PSEdition = Desktop)
## Extrait de code #1
rmdir -recurse org
mkdir org\dir1
Get-ChildItem org -Directory | foreach { $_.GetType() }
vs
## Extrait de code #2
rmdir -recurse org
mkdir org\dir1 | Out-Null
Get-ChildItem org -Directory | foreach { $_.GetType() }
La seule différence entre ces deux est que dans l'extrait 2, la sortie de mkdir
est redirigée vers Out-Null. Ce deuxième extrait (et ses variantes comme $null = mkdir org/dir1
) fonctionnent comme je m'y attendais:
Get-ChildItem org -Directory | foreach { $_.GetType() }
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True DirectoryInfo System.IO.FileSystemInfo
Mais lorsque la sortie de mkdir n'est pas capturée (comme dans l'extrait 1), Get-ChildItem fait quelque chose d'inattendu:
Get-ChildItem org -Directory | foreach { $_.GetType() }
Directory: C:\Users\Phil\ps\as1\org
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 4/10/2024 12:56 AM dir1
Module : CommonLanguageRuntimeLibrary
Assembly : mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
TypeHandle : System.RuntimeTypeHandle
DeclaringMethod :
BaseType : System.IO.FileSystemInfo
UnderlyingSystemType : System.IO.DirectoryInfo
FullName : System.IO.DirectoryInfo
AssemblyQualifiedName : System.IO.DirectoryInfo, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
[: : :]
Les mêmes résultats sont observés si vous utilisez New-Item
au lieu de mkdir
. Je ne comprends pas pourquoi (ou même comment) une structure de répertoire peut être différente en fonction de la capture de sa création.