Мне нужна помощь с простым скриптом PowerShell. Я только начинающий с этим языком, так что прости меня за любые ошибки в языке.
Мне нужен сценарий для копирования файла (который находится в том же каталоге, что и сценарий PowerShell) в каждый пользовательский каталог на ПК при запуске, за исключением нескольких. Это предполагается для структур папок Windows 7.
Кодовая идея:
- Разобрать подкаталоги верхнего уровня в C: \ Users
- Скопируйте элемент с именем deploy.properties в C: \ Users \ USER_PROFILE_NAME \ AppData \ LocalLow \ Sun \ Java \ Deployment \ - перезаписать файл, если он существует, и создать структуру папок, если его нет
- Не делайте этого для учетных записей «Все пользователи», «Администратор» и «По умолчанию»
У меня был своего рода скрипт, который анализировал имена пользователей, но когда он был запущен, он добавлял @ из каждого имени пользователя. Также не удалось создать подкаталоги, если они не существуют. Я чувствую, что это намного проще, чем я это представляю.
Вот что у меня есть для моего кода:
$UserFolders = get-childitem -path "C:\Users" | ?{$_.Psiscontainer} |select-object fullname
$from = ".\deployment.properties"
foreach ($UserFolder in $Userfolders)
$to = "C:\Users\$UserFolder\AppData\LocalLow\Sun\Java\Deployment\deployment.properties"
New-Item -ItemType File -Path $to -Force
Copy-Item $from $to
}
Код не генерирует значимых данных из пользовательских каталогов и выдает ошибки каталога при запуске. Строка "New-Item" была недавно добавлена, поскольку каталоги не создавались. Я немного потерян, чтобы быть совершенно честным. Я все еще новичок в синтаксисе и что не уверен, что с этим делать.
источник
select-object -ExpandProperty Name
. Я бы посоветовал вам запустить свой скрипт в PowerShell ISE. Установите точки останова на разных строках и проверьте переменные, чтобы увидеть, выглядит ли то, что вы ожидаете.foreach ($UserFolder in $Userfolders)
.Ответы:
Это только мои мысли и мнения о том, как я могу это сделать ... и я немного изменил имена переменных, чтобы они соответствовали используемым командлетам. Вы не должны просто сделать это более читабельным для меня.
Как уже отмечалось, я играю с этим на отдельном компьютере, но вывод команд, которые я получаю, находится здесь:
Вы также можете получить команду, которая будет выполняться, если вы хотите сначала проверить ее, просто заключив команды в двойные кавычки:
"Copy-Item -Path $sFile -Destination $dest -Force"
источник