Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Изменить название объекта в зависимости от i

Ответить
Настройки темы
PowerShell - Изменить название объекта в зависимости от i

Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изменения
Автор: obseoe
Дата: 21-02-2014
Добрый день! Буду благодарен, если кто-то поможет. Не очень разбираюсь в программировании, пытался найти ответ в google, но не удалось.

Есть скрипт вида:
for ($i=0; $i - le 14; $i++)
{
Copy-Item-Path $path-Destination $A%$i%-Force
}

Так, естественно не работает, вопрос как сделать, чтобы у меня копирование шло в -Destination $A0 - $A14?

Переменные:
$path="\\fs03\Distrib\123.exe"
$A0="\\fs03\inst0\123.exe"
$A1="\\fs03\inst1\123.exe"
$A2="\\fs03\inst2\123.exe"
и так далее для A

Заранее спасибо за ответ!

Отправлено: 13:12, 21-02-2014

 

Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Во-первых, убрать пробелы между «-» и названием параметра или операции. Во-вторых, где определения переменной «$path», «$A»?
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:17, 21-02-2014 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


Поправил пробелы, определения переменных добавил

Последний раз редактировалось obseoe, 21-02-2014 в 13:35.


Отправлено: 13:23, 21-02-2014 | #3


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


obseoe, а зачем такое неудобное использование:
Цитата obseoe:
$A0="\\fs03\inst0\123.exe"
$A1="\\fs03\inst1\123.exe"
$A2="\\fs03\inst2\123.exe"
и так далее для A »
?! Почему не массив?

Код: Выделить весь код
$sSourceFile = "\\fs03\Distrib\123.exe"
$aDestPaths  = "\\fs03\inst0", "\\fs03\inst1", "\\fs03\inst2"

if(Test-Path -Path $sSourceFile -PathType Leaf) {
    $aDestPaths | ForEach-Object -Process {
        if(Test-Path -Path $_ -PathType Container) {
            Copy-Item -Path $sSourceFile -Destination $_ -Force
        } else {
            Write-Host "Can't find destination path [$_]" -ForegroundColor Red
        }
    }
} else {
    Write-Host "Can't find source file [$sSourceFile]" -ForegroundColor Red
}
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:41, 21-02-2014 | #4


Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


Спасибо за ответ!

Массив не догадался использовать, с другой стороны реальный путь для каждой переменной длиннее и их 14 штук, получается очень длинная строка, по-моему это не удобно. Поэтому я оставил эти переменные и изменил $aDestPaths = $aDestPaths = "\\fs03\inst0", "\\fs03\inst1", "\\fs03\inst2" на $aDestPaths = $A0, $A1,.., $A14

У вас очень красивый код, я пока так не умею

Вот только не пойму как теперь изменить, чтобы выполнялось следующее: Кроме копирования файла в нужную директорию, мне нужно запустить этот файл из этой директории (то есть сначала сделать туда change dir, а потом запуск). Написал вот так, до момента смены директории, а дальше нужно сделать запуск и я запутался:

$A0="\\fs03\inst0"
$A1="\\fs03\inst1"
$A2="\\fs03\inst2"
$B0="\\fs03\inst0\123.exe"
$B1="\\fs03\inst1\123.exe"
$B2="\\fs03\inst2\123.exe"
$sSourceFile = "\\fs03\Distrib\123.exe"
$aDestPaths = $A0, $A1, $A2
$aDestFile = $B0, $B1, $B2

if(Test-Path -Path $sSourceFile -PathType Leaf) {
$aDestPaths | ForEach-Object -Process {
if(Test-Path -Path $_ -PathType Container) {
Copy-Item -Path $sSourceFile -Destination $_ -Force
cd $_
$aDestFile ; вот собственно тут я и не пойму как его добавить, сделать еще один цикл? Но какой? Или счетчик?
} else {
Write-Host "Can't find destination path [$_]" -ForegroundColor Red
}
}
} else {
Write-Host "Can't find source file [$sSourceFile]" -ForegroundColor Red
}

Отправлено: 15:58, 21-02-2014 | #5


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата obseoe:
с другой стороны реальный путь для каждой переменной длиннее и их 14 штук, получается очень длинная строка, … Поэтому я оставил эти переменные и изменил $aDestPaths = $aDestPaths = "\\fs03\inst0", "\\fs03\inst1", "\\fs03\inst2" на $aDestPaths = $A0, $A1,.., $A14 »
Сделайте короткую:
Код: Выделить весь код
$aDestPaths  = `
    "\\fs03\inst0", `
    "\\fs03\inst1", `
    "\\fs03\inst2"
Цитата obseoe:
Кроме копирования файла в нужную директорию, мне нужно запустить этот файл из этой директории »
В чём глубинный смысл запуска …цать раз одного и того же файла?
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:37, 21-02-2014 | #6


Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


По поводу короткой записи понял, спасибо!

А то что касается вашего вопроса:

читать дальше »
Есть программа бухгалтерская, обновляться не умеет (тем более автоматически), а вручную мне надоело это делать . Обновить ее можно следующим образом: скачать с сайта свежий дистрибьютив и установить его прямо поверх уже имеющейся.
Особенностью этого приложения является то, что оно не умеет поддерживать несколько фирм, разработчик предлагает ставить для каждой фирмы программку в отдельную папку, ну мы так и сделали.
Если просто взять .exe, скачать его с сайта и прописать путь установки, то всплывают окна уведомлений (вроде тех, что: вы уверены что хотите установить программу, укажите путь и тд), если же взять и положить ее прямо в нужную директорию установка проходит в "тихом" режиме.

Поэтому я решил все немного автоматизировать:
Скрипт скачивает файл (уже сделано) и дальше должен положить его в папку дистрибьютивов (на всякий случай, в дальнейшем хотелось бы добавить проверку версий, а не ставить на угад), из которой копирует в нужные директории и устанавливает.
Все это решил запускать через планировщик, чтобы не всплывал UAC.

Отправлено: 16:54, 21-02-2014 | #7


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


obseoe, ну, так Вам запускать-то приложение нужно на удалённых машинах, так?

Отправлено: 18:16, 21-02-2014 | #8


Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


Не совсем понимаю к чему вопрос, поэтому подробно распишу:
читать дальше »
директория с программой на файловом сервере, запускать приложения будут с узла сеансов удаленных рабочих столов (несколько RDS серверов, где работает много пользователей), установка не прописывает никакие параметры для пользователей/реестра, поэтому ставить обновление можно прямо на файловый сервер с любой машины, все папки с этой программкой будут там.

Отправлено: 19:13, 21-02-2014 | #9


Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


Вот так выглядит код на текущий момент:

$storageDir = "\\fs01\Distrib\Бухгалтерские\Бухсофт 2014"
$webclient = New-Object System.Net.WebClient
$url = "http://download.buhsoft.ru/Zarplata2014.exe"
$file = "$storageDir\Zarplata2014.exe"
$webclient.DownloadFile($url,$file)
$sSourceFile = "\\fs01\Distrib\Бухгалтерские\Бухсофт 2014\Zarplata2014.exe"
$aDestPaths = '
"\\fs01\Programs_Shared_Folder\Accounting\Buhsoft\Buhsoft2014\Agor\Zarplata2014.exe", '
"\\fs01\Programs_Shared_Folder\Accounting\Buhsoft\Buhsoft2014\Niso\Zarplata2014.exe", '
"\\fs01\Programs_Shared_Folder\Accounting\Buhsoft\Buhsoft2014\Fina\Zarplata2014.exe", '
"\\fs01\Programs_Shared_Folder\Accounting\Buhsoft\Buhsoft2014\Koe\Zarplata2014.exe", '
"\\fs01\Programs_Shared_Folder\Accounting\Buhsoft\Buhsoft2014\Goe\Zarplata2014.exe", '
"\\fs01\Programs_Shared_Folder\Accounting\Buhsoft\Buhsoft2014\Empty\Zarplata2014.exe", '
"\\fs01\Programs_Shared_Folder\Accounting\Buhsoft\Buhsoft2014\Empty2\Zarplata2014.exe", '
"\\fs01\Programs_Shared_Folder\Accounting\Buhsoft\Buhsoft2014\Dsz\Zarplata2014.exe", '
"\\fs01\Programs_Shared_Folder\Accounting\Buhsoft\Buhsoft2014\Dso\Zarplata2014.exe", '
"\\fs01\Programs_Shared_Folder\Accounting\Buhsoft\Buhsoft2014\Dso2\Zarplata2014.exe", '
"\\fs01\Programs_Shared_Folder\Accounting\Buhsoft\Buhsoft2014\Dso3\Zarplata2014.exe", '
"\\fs01\Programs_Shared_Folder\Accounting\Buhsoft\Buhsoft2014\abc\Zarplata2014.exe", '
"\\fs01\Programs_Shared_Folder\Accounting\Buhsoft\Buhsoft2014\abc_auto\Zarplata2014.exe", '
"\\fs01\Programs_Shared_Folder\Accounting\Buhsoft\Buhsoft2014\aa\Zarplata2014.exe", '
"\\fs01\Programs_Shared_Folder\Accounting\Buhsoft\Buhsoft2014\bb\Zarplata2014.exe"
$aDestFolders = '
"\\fs01\Programs_Shared_Folder\Accounting\Buhsoft\Buhsoft2014\Agor", '
"\\fs01\Programs_Shared_Folder\Accounting\Buhsoft\Buhsoft2014\Niso", '
"\\fs01\Programs_Shared_Folder\Accounting\Buhsoft\Buhsoft2014\Fina", '
"\\fs01\Programs_Shared_Folder\Accounting\Buhsoft\Buhsoft2014\Koe", '
"\\fs01\Programs_Shared_Folder\Accounting\Buhsoft\Buhsoft2014\Goe", '
"\\fs01\Programs_Shared_Folder\Accounting\Buhsoft\Buhsoft2014\Empty", '
"\\fs01\Programs_Shared_Folder\Accounting\Buhsoft\Buhsoft2014\Empty2", '
"\\fs01\Programs_Shared_Folder\Accounting\Buhsoft\Buhsoft2014\Dsz", '
"\\fs01\Programs_Shared_Folder\Accounting\Buhsoft\Buhsoft2014\Dso", '
"\\fs01\Programs_Shared_Folder\Accounting\Buhsoft\Buhsoft2014\Dso2", '
"\\fs01\Programs_Shared_Folder\Accounting\Buhsoft\Buhsoft2014\Dso3", '
"\\fs01\Programs_Shared_Folder\Accounting\Buhsoft\Buhsoft2014\abc", '
"\\fs01\Programs_Shared_Folder\Accounting\Buhsoft\Buhsoft2014\abc_auto", '
"\\fs01\Programs_Shared_Folder\Accounting\Buhsoft\Buhsoft2014\aa", '
"\\fs01\Programs_Shared_Folder\Accounting\Buhsoft\Buhsoft2014\bb"

if(Test-Path -Path $sSourceFile -PathType Leaf) {
$aDestPaths | ForEach-Object -Process {
if(Test-Path -Path $_ -PathType Container) {
Copy-Item -Path $sSourceFile -Destination $_ -Force
} else {
Write-Host "Can't find destination path [$_]" -ForegroundColor Red
}
}
} else {
Write-Host "Can't find source file [$sSourceFile]" -ForegroundColor Red
}


В итоге файл скачивается и копируется во все нужные директории, далее нужно его запустить оттуда (сделав cd в текущую директорию запуска), не понимаю как. Буду благодарен за ответ!

Отправлено: 15:38, 24-02-2014 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Изменить название объекта в зависимости от i

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Интерфейс - [решено] Помогите изменить название папки laslo1405 Microsoft Windows 7 7 14-09-2013 09:02
[решено] Как изменить название(букву) системного логического диска? Sviaga Хочу все знать 5 30-10-2012 07:28
VBS/WSH/JS - [решено] Изменить название окна AlexM Скриптовые языки администрирования Windows 3 26-11-2010 23:58
CMD/BAT - [решено] Изменить название службы Тарнум Скриптовые языки администрирования Windows 5 07-11-2010 03:35
Как изменить название CD которое показывает проводник? Guest Microsoft Windows 95/98/Me (архив) 4 30-09-2004 09:09




 
Переход