2016-09-30 2 views
0

Я пытаюсь понять, как написать сценарий powershell, который автоматически установит office2010 на нескольких ПК. Я борюсь с той частью, где вы создаете текстовый файл, который мы прокручиваем, перечисляя имя_компьютера и пользователя. Я исследовал это по всей сети, но по какой-то причине не могу заставить это работать.Скрипт Powershell для удаленной установки программного обеспечения (Microsoft Office)

Function Get-FileName{ 
[CmdletBinding()] 
Param(
    [String]$Filter = "|*.*", 
    [String]$InitialDirectory = "C:\") 

    [void][System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") 
    $OpenFileDialog = New-Object System.Windows.Forms.OpenFileDialog 
    $OpenFileDialog.initialDirectory = $InitialDirectory 
    $OpenFileDialog.filter = $Filter 
    [void]$OpenFileDialog.ShowDialog() 
    $OpenFileDialog.filename 
} 


ForEach ($computer in (GC (Get-FileName -InitialDirectory $env:USERPROFILE\Desktop -Filter "Text files (*.txt)|*.txt|All files (*.*)|*.*"))) { 

$filepath = Test-Path -Path "\\$computer\C:\Program Files (x86)\Microsoft Office" 
    If ($filepath -eq $false) 
    { 
Get-Service remoteregistry -ComputerName $computer | Start-Service 
    Copy-Item -Path "\\server\Orig\Install\Office2010" -Destination "\\$computer\c$\windows\temp\" -Container -Recurse -Force 
    # $InstallString = '"C:\windows\temp\Office 2010\setup.exe"' 
    # ([WMICLASS]"\\$computer\ROOT\CIMV2:Win32_Process").Create($InstallString) 

    # "$computer" + "-" + "(Get-Date)" | Out-File -FilePath "\\server\Orig\Install\RemoteInstallfile.txt" -Append 
    # } 
    # Else 
    # { 
    # "$computer" + "_Already_Had_Software_" + "(Get-Date)" | Out-File -FilePath "\\server\Orig\Install\RemoteInstallfile.txt" -Append 
    } 
} 

ComputerList.txt

IT-Tech | David 

IT-Tech будет имя компьютера и Дэвид был бы пользователь. Тогда у меня был бы такой список, как строка в текстовом файле.

Так что я думал, что смогу сделать что-то подобное этому списку имя компьютера, а затем имя пользователя, как установить. Эта часть меня смущает, хотя просто пытается узнать и посмотреть, что это за штука!

Любая помощь с этим была бы принята с благодарностью!

ответ

1

Строка вашего файла, как вы уже сказали, будет содержать что-то вроде «IT-Tech | David», поэтому, когда вы перебираете этот файл, это значение $computer. Затем вы пытаетесь использовать это как вызов имени компьютера, который, конечно, потерпит неудачу, потому что сначала вам нужно разбить его.

Я также укажу, что это чрезвычайно плохая форма для сокращения и использования псевдонимов в скриптах, вы должны использовать их только в консоли. Также для удобства чтения он позволяет разбить сложные биты.

$file = Get-FileName -InitialDirectory $env:USERPROFILE\Desktop -Filter "Text files (*.txt)|*.txt|All files (*.*)|*.*" 
ForEach ($item in (Get-Content $file)) { 
    $sitem = $item.Split("|") 
    $computer = $sitem[0].Trim() 
    $user = $sitem[1].Trim() 

    $filepath = Test-Path -Path "\\$computer\C:\Program Files (x86)\Microsoft Office" 
    If ($filepath -eq $false) 
    { 
    Get-Service remoteregistry -ComputerName $computer | Start-Service 

    Copy-Item -Path "\\server\Orig\Install\Office2010" -Destination "\\$computer\c$\windows\temp\" -Container -Recurse -Force 

    <# 
    $InstallString = '"C:\windows\temp\Office 2010\setup.exe"' 
    ([WMICLASS]"\\$computer\ROOT\CIMV2:Win32_Process").Create($InstallString) 

    "$computer" + "-" + "(Get-Date)" | Out-File -FilePath "\\server\Orig\Install\RemoteInstallfile.txt" -Append 
    } 
    Else 
    { 
    "$computer" + "_Already_Had_Software_" + "(Get-Date)" | Out-File -FilePath "\\server\Orig\Install\RemoteInstallfile.txt" -Append 
    #> 
    } 
} 

Обратите внимание, что это не будет устанавливать продукт, если программа установки уже в пункте назначения, не уверен, если это предназначено поведение или нет.

Смежные вопросы