|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - powershell запуск скрипта на удаленном компьютере с авторизацией на сетевом ресурсе |
|
PowerShell - powershell запуск скрипта на удаленном компьютере с авторизацией на сетевом ресурсе
|
Пользователь Сообщения: 60 |
Здравствуйте.
Знакомлюсь с Powershell в режиме получения новых знаний при решении конкретных задач. Есть задача установить на большом количестве компьютеров заказную установку MS Office 2010. Скрипт для заказной установки есть и работает. На части ПК дистрибутив MS Office 2010 присутствует в каталоге c:\distr. Проверка дистрибутива и запуск установки реализовано. Не могу реализовать запуск установки из сетевой папки, нужно авторизоваться на удаленном сервере. Стартующий скрипт: $currentFolder=$MyInvocation.MyCommand.Path | Split-Path -Parent $currentFolder=$currentFolder+"\" $fileIN = $currentFolder+"pc.txt" $fileOffLine= $currentFolder+"offline.txt" $report= $currentFolder+"report.txt" $fileFolder=$currentFolder+"files\" $scriptFile=$currentFolder+"local.ps1" $hostnames=get-content $fileIn ForEach ($hostname in $hostnames) { if ( Test-Connection $hostname -Count 2 -Quiet:$true ) { Invoke-Command -FilePath $scriptFile -ComputerName $hostname } ### ONLINE else { $hostname+" offline" $hostname | Out-File $fileOffLine -Append } ### OFFLINE } $localsetupfile="c:\distr\MS_Office_2010_Prof_Plus_SP1_64Bit_Russian_CORE_MLF_X17-77007\setup.exe" function check_mso_version () #проверяем наличие установленного MS Office 2010 #т.к. через gwmi долго, иcпользуем такой способ #$be=New-Object -ComObject Excel.Application { try { $be=((New-Object -ComObject Excel.Application).version).Substring(0,2) } catch { $be="" } Return $be } function check_distr ($file) { $isfile= Test-Path $file if($isfile -eq "True") { # $report=$env:COMPUTERNAME+" дистрибутив есть" # Write-host $report } else { # Write-host "Дистрибутив не найден" } Return $isfile } function install_excel () { } $version=check_mso_version if (!$version) { # Write-Host "Excel не установлен" if (check_distr($localsetupfile)) { Write-Host "$env:COMPUTERNAME. Excel не установлен, дистрибутив найден" cmd /c "c:\distr\MS_Office_2010_Prof_Plus_SP1_64Bit_Russian_CORE_MLF_X17-77007\files\only_excel.cmd" } else { Write-Host "$env:COMPUTERNAME. Excel не установлен, дистрибутив не найден" # запуск установки из сетевой папки с авторизацией } } else { Write-Host "$env:COMPUTERNAME. Excel установлен" } |
|
Отправлено: 10:27, 15-02-2018 |
Пользователь Сообщения: 60
|
Профиль | Отправить PM | Цитировать Желательно не сохраняя в теле скрипта в явном виде пароль.
|
Отправлено: 10:46, 15-02-2018 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 1259
|
Профиль | Отправить PM | Цитировать Задача нетривиальная, самое простое решение:
1) Использовать пароль для подключения в скрипте для шары 2) Скопировать дитрибутив на компьютер через $hostname\C$\distr 3) Разрешить учетной записи компьютеров доступ к шаре Более сложный варианты - https://blogs.technet.microsoft.com/...lved-securely/ |
Отправлено: 10:59, 15-02-2018 | #3 |
Пользователь Сообщения: 60
|
Профиль | Отправить PM | Цитировать Вроде решил, но все равно скрипт далек от идеала
$currentFolder=$MyInvocation.MyCommand.Path | Split-Path -Parent $currentFolder=$currentFolder+"\" $fileIN = $currentFolder+"pc.txt" $fileOffLine= $currentFolder+"offline.txt" $report= $currentFolder+"report.txt" $fileFolder=$currentFolder+"excel\" $scriptFile=$currentFolder+"local.ps1" $net_setup_folder="\\domain.local\bla-bla-bla\MS_Office_2010_Prof_Plus_SP1_64Bit_Russian_CORE_MLF_X17-77007" $hostnames=get-content $fileIn ForEach ($hostname in $hostnames) { if ( Test-Connection $hostname -Count 2 -Quiet:$true ) { Copy-Item -Path $fileFolder -Destination \\$hostname\C$\Temp -Force -Recurse $session = New-PSSession -ComputerName $hostname -Name $hostname Invoke-Command -Session $session -ScriptBlock {New-PSDrive -name "U" -PSProvider "FileSystem" -Root $net_setup_folder -Credential domain\username} Invoke-Command -FilePath $scriptFile -Session $session Invoke-Command -Session $session -ScriptBlock {Remove-PSDrive -name "U"} Remove-PSSession $session Remove-Item -Path \\$hostname\C$\Temp\excel -Force -Recurse } ### ONLINE else { $hostname+" offline" $hostname | Out-File $fileOffLine -Append } ### OFFLINE } почему-то не проходит конструкция с однократным вводом пароля в этом случае авторизация не проходит |
Отправлено: 13:37, 15-02-2018 | #4 |
Ветеран Сообщения: 1259
|
Профиль | Отправить PM | Цитировать Для разового ввода пароля.Перед Foreach добавить:
И изменить: Invoke-Command -Session $session -ScriptBlock { param($user,$pass,$root) $pass = ConvertTo-SecureString $pass -AsPlainText -Force $credential = New-Object System.Management.Automation.PSCredential($user,$pass) New-PSDrive -name "U" -PSProvider "FileSystem" -Root $root -Credential $credential } -ArgumentList $Credential.UserName,$Credential.GetNetworkCredential().Password,$net_setup_folder |
|
Отправлено: 14:07, 15-02-2018 | #5 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Прочее - Запуск бат-файла на удаленном компьютере чере psexec.exe | Genry | Сетевые технологии | 5 | 03-08-2015 09:02 | |
Медиа - Запуск фильма на удаленном компьютере | pavel.sar | Microsoft Windows 2000/XP | 2 | 03-01-2014 21:17 | |
Доступ - Восстановить папку, удалённую на сетевом ресурсе. | 3vs | Microsoft Windows 7 | 5 | 12-11-2011 14:12 | |
.NET - запуск приложений на удаленном компьютере | Efsey | Программирование и базы данных | 12 | 09-11-2010 14:27 | |
CMD/BAT - [решено] Запуск файла на удаленном компьютере | Expo37 | Скриптовые языки администрирования Windows | 2 | 09-08-2010 18:03 |
|