2016-09-30 2 views
0

Ich versuche herauszufinden, wie ein Powershell-Skript geschrieben wird, das office2010 automatisch auf mehreren PCs installiert. Ich kämpfe an dem Teil, wo Sie die Textdatei erstellen, durch die wir den Computernamen und die Benutzeranmeldung auflisten. Ich habe das alles im Internet recherchiert, aber aus irgendeinem Grund kann ich das nicht zur Arbeit bringen.Powershell-Skript zur Remote-Installation von Software (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 würde der Computername und David würde der Benutzer sein. Dann würde ich eine Liste wie diese Zeile für Zeile in der TXT-Datei haben.

Also dachte ich, ich könnte etwas tun, wie das Auflisten des Computernamens und dann den Benutzernamen der Installation. Dieser Teil verwirrt mich, obwohl ich nur versuche zu lernen und zu sehen, worum es in diesem Powershell-Zeug geht!

Jede Hilfe mit diesem würde sehr geschätzt werden!

Antwort

1

Eine Zeile Ihrer Datei enthält, wie Sie gesagt haben, etwas wie "IT-Tech | David". Wenn Sie also durch diese Datei iterieren, ist das der Wert $computer. Sie versuchen dann, dies als den Computernamenaufruf zu verwenden, der natürlich fehlschlägt, weil Sie zuerst es aufteilen müssen.

Ich werde auch darauf hinweisen, dass es extrem schlechte Form ist, Aliase in Skripten zu verkürzen und zu verwenden, sollten Sie sie nur in der Konsole verwenden. Auch zur besseren Lesbarkeit hilft es, komplexe Bits zu trennen.

$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 
    #> 
    } 
} 

Beachten Sie, dass dies nicht das Produkt installieren, wenn das Installationsprogramm bereits im Ziel ist, nicht sicher, ob das Verhalten bestimmt ist oder nicht.

Verwandte Themen