#powershell #powershell-ise
#powershell #powershell-ise
Вопрос:
Цель: мне нужно скопировать и вставить фоновые команды во все профили пользователей на множестве машин Ошибка: путь не существует. Я не могу понять проблему, почему мой путь C:usersuser1Appdata превращается в C:Users1 Users2Appdata Пользователи 2Appdata
Вот полный код:
$Folders = Get-ChildItem -Directory "C:Users" | Where-Object {$_.Name -notlike "Public"} | Where-Object {$_.Name -notlike "AppData"}
$Backgrounds = "\Server1Teams-Backgrounds*"
Foreach($Folder in $Folders) {
Copy-Item -Path $Backgrounds -Destination "C:Users$($Folders.Name)AppDataRoamingMicrosoftTeamsBackgroundsUploads" -Force -ErrorAction Stop
}
Комментарии:
1.
$($Folders.Name)
подразумевается$($Folder.Name)
. Вы пытаетесь сделать это для всей коллекции, а не для одного объекта в цикле foreach.2. Да… Один из тех моментов, когда вы говорите себе «Это был долгий день».
3. Совет — никогда не использовать множественные элементы вашей коллекции в циклах. Например,
Foreach($Item in $Folders)
илиForeach($Dir in $Folders)
Ответ №1:
Это то, что вам нужно.
# Combined the Where-Object filter into a single
$Folders = Get-ChildItem -Directory "C:Users" | Where-Object {($_.Name -notlike "Public") -and ($_.Name -notlike "AppData")}
$Backgrounds = "\Server1Teams-Backgrounds*"
Foreach($Folder in $Folders) {
# Changed $Folders.Name to $Folder.Name
Copy-Item -Path $Backgrounds -Destination "C:Users$($Folder.Name)AppDataRoamingMicrosoftTeamsBackgroundsUploads" -Force -ErrorAction Stop
}