Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Изменить название объекта в зависимости от i (http://forum.oszone.net/showthread.php?t=278145)

obseoe 21-02-2014 13:12 2312997

Изменить название объекта в зависимости от i
 
Добрый день! Буду благодарен, если кто-то поможет. Не очень разбираюсь в программировании, пытался найти ответ в 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

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

Iska 21-02-2014 13:17 2313005

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

obseoe 21-02-2014 13:23 2313009

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

Iska 21-02-2014 14:41 2313072

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
}


obseoe 21-02-2014 15:58 2313131

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

Массив не догадался использовать, с другой стороны реальный путь для каждой переменной длиннее и их 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
}

Iska 21-02-2014 16:37 2313165

Цитата:

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

Сделайте короткую:
Код:

$aDestPaths  = `
    "\\fs03\inst0", `
    "\\fs03\inst1", `
    "\\fs03\inst2"

Цитата:

Цитата obseoe
Кроме копирования файла в нужную директорию, мне нужно запустить этот файл из этой директории »

В чём глубинный смысл запуска …цать раз одного и того же файла?

obseoe 21-02-2014 16:54 2313178

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

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

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

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

Iska 21-02-2014 18:16 2313247

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

obseoe 21-02-2014 19:13 2313286

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

obseoe 24-02-2014 15:38 2314864

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

$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 в текущую директорию запуска), не понимаю как. Буду благодарен за ответ!


Время: 03:42.

Время: 03:42.
© OSzone.net 2001-