用于远程安装软件的Powershell脚本(Microsoft Office)

时间:2016-09-30 12:36:15

标签: powershell

我正在试图弄清楚如何编写一个powershell脚本,它将自动在多台PC上安装office2010。我正在努力创建我们循环列出ComputerName和Users Login的文本文件。我已经在整个网络上研究了这个,但由于某些原因我无法让这个工作。

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将是计算机名称,David将成为用户。然后我会在txt文件中逐行列出这样的列表。

所以我认为我可以做这样的事情。列出计算机名称,然后列出如何安装的用户名。这部分让我感到困惑,虽然只是想学习并看看这些PowerShell的内容是什么!

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

正如您所说,您的文件的某一行将包含类似于" IT-Tech |大卫",所以当您遍历该文件时,$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
    #>
    }
}

请注意,如果安装程序已在目标中,则不会安装该产品,不确定是否是预期的行为。