#powershell
#powershell
Вопрос:
Я новичок в powershell и пытаюсь выполнить поиск в папке верхнего уровня для любых вложенных папок, которые могут содержать папку с именем «обучение» внутри них, а затем создать символические ссылки в целевой папке для каждого результата, используя имя родительской папки, в которой находится папка «обучение»….. Извините, если это звучит запутанно.
Итак, в основном, поиск «C:company » где , если «c:companytest » в папке была вложенная папка «training», скрипт записывал символическую ссылку на пункт назначения с именем «test», но указывал на «c:companytesttraining «.
У меня есть рабочая команда для поиска результатов поиска в папке, которые я хочу
$folder = gci "TopSearchedFolder" -recurse -filter "training" | Select-Object Parent
И при поиске появляется следующее, что создаст символические ссылки..
New-Item -Itemtype SymbolicLink -path "SymlinkDestinationFolder"
Я просто не уверен, как использовать результаты поиска для создания символических ссылок. Должен ли я использовать For-each или что-то в этом роде? Любая помощь будет оценена. Заранее спасибо.
Ответ №1:
Вам понадобится PowerShell 5.1 или новее.
Get-ChildItem -Path "TopSearchedFolder" -Filter 'training' -Directory -Recurse | ForEach-Object {
New-Item -ItemType SymbolicLink -Path "SymlinkDestinationFolder" -Name $_.Parent -Value $_.FullName
}
Комментарии:
1. Отлично, спасибо за помощь. Итак, если я правильно понимаю, $_. — это просто перенос передаваемой переменной, и вы можете специально выбирать элементы этой переменной? Еще раз спасибо.
2. @bjones306 Да, это именно то, для чего предназначена автоматическая переменная $_ .
Ответ №2:
Попробуйте это:
gci "TopSearchedFolder" -recurse -filter "training" | Select-Object -ExpandProperty Parent|Foreach{
New-Item -Itemtype SymbolicLink -path "$($_)"
}
$_
является текущим элементом в конвейере и -ExpandProperty
только для расширения значений.
Комментарии:
1. После создания вложенной папки с именем «test» в папке «TopSearchedFolder» с папкой «training» в ней, приведенное выше выдает следующую ошибку……
New-Item : Test At line:2 char:1 New-Item -Itemtype SymbolicLink -path "$($_)" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ CategoryInfo : InvalidArgument: (:) [New-Item], PSArgumentNullException FullyQualifiedErrorId : ArgumentNull,Microsoft.PowerShell.Commands.NewItemCommand
2. Таким образом, он находит правильную вложенную папку, содержащую тестовую папку, но, похоже, он не хочет создавать символическую ссылку.