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

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

Ответить
Настройки темы
PowerShell - powershell запуск скрипта на удаленном компьютере с авторизацией на сетевом ресурсе

Пользователь


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

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


Здравствуйте.
Знакомлюсь с 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
Благодарности: 1

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


Желательно не сохраняя в теле скрипта в явном виде пароль.

Отправлено: 10:46, 15-02-2018 | #2



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

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


Ветеран


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

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


Задача нетривиальная, самое простое решение:
1) Использовать пароль для подключения в скрипте для шары
2) Скопировать дитрибутив на компьютер через $hostname\C$\distr
3) Разрешить учетной записи компьютеров доступ к шаре

Более сложный варианты - https://blogs.technet.microsoft.com/...lved-securely/

Отправлено: 10:59, 15-02-2018 | #3


Пользователь


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

Профиль | Отправить 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
}
для каждого ПК приходится вводить пароль пользователя для авторизации на сетевом ресурсе.
почему-то не проходит конструкция с однократным вводом пароля
Код: Выделить весь код
$credential = Get-Credential domain\username
....
Invoke-Command -Session $session -ScriptBlock {New-PSDrive -name "U" -PSProvider "FileSystem" -Root $net_setup_folder -Credential $credential}
в этом случае авторизация не проходит

Отправлено: 13:37, 15-02-2018 | #4


Ветеран


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

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


Для разового ввода пароля.Перед Foreach добавить:
Код: Выделить весь код
$Credential = Get-Credential domain\username
И изменить:
Код: Выделить весь код
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



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Прочее - Запуск бат-файла на удаленном компьютере чере 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




 
Переход