В случае сомнений прочитайте документацию (выделено мной):
-Path
Указывает в виде строкового массива путьк элементам для копирования.
Тип: String []
Позиция: 1
Значение по умолчанию: Нет
Принимать входные данные конвейера: True (ByPropertyName, ByValue)
Принимать подстановочные символы:False
Значения путей типа /home/shubham/ps/*.docx
не поддерживаются Copy-Item
.Вероятно, это работает в Linux, поскольку оболочка уже расширяет подстановочный знак до списка абсолютных путей до того, как Copy-Item
его увидит.
Не говоря уже о том, что ваш код слишком сложен.Примерно так должно хватить:
$src = '/home/shubham/ps/'
$dst = '/home/shubham/ps/check'
$files = Get-ChildItem $src
$files |
Select-Object -Expand Extension -Unique |
New-Item -Path $dst -Name {'_' + $_.TrimStart('.')} -Type Directory |
Out-Null
$files | Copy-Item -Destination {Join-Path $dst ('_' + $_.Extension.TrimStart('.')} -Container