繁体   English   中英

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

[英]Powershell Script to Remotely Install Software (Microsoft Office)

我试图弄清楚如何编写一个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的内容是什么!

任何帮助,将不胜感激!

正如您所说,文件的一行将包含“ 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
    #>
    }
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM