Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

Automatische software installatie + Server mag Niet rebooten

Pagina: 1
Acties:

Vraag


Verwijderd

Topicstarter
Hi allen,

Ik heb een vraagje, ik wil een automatische software installatie maken en de server mag niet herstarten.
Nu ben ik zover dat als ik het script draai dat de software installatie word geopend, nu wil ik alleen deze hem automatisch next next finished. En nog belangrijker de server mag niet herstart ookal is dit nodig om de installatie te voltooien.

Hierbij het scriptje, graag hoor ik van jullie wat ik kan aanpassen / toevoegen.

#Variabele
$devices = (Get-content -path "C:\Users\larsh_adm\Desktop\vmtools\server\servers.txt")
$sourcefile = "C:\Users\larsh_adm\Desktop\vmtools\software\setup64.exe"

ForEach-Object($ServerName)

#voor elke server in de serverlijst.
foreach ($device in $devices)

{

#Kopieer install file naar de remote computer.
Copy-Item $sourcefile "\\$device\c$\Temp\setup64.exe" -Force
}

#Start de setup op meerder servers en return de output in een log.
$setup=Start-Process "C:\temp\setup64.exe" -ArgumentList /S -Wait
if ($setup.exitcode -ne 0) {
throw ("De installatie van server $devices is Niet geslaagd $devices $(Get-Date -Format g)") | Out-File -FilePath C:\Users\larsh_adm\Desktop\vmtools\Server\result.txt -Force -Append
}
write-host("De installatie van server $devices is Geslaagd met exit code $($setup.exitcode) op server $devices$ (Get-Date -Format g)") | Out-File -FilePath C:\Users\larsh_adm\Desktop\vmtools\Server\result.txt -Force -Append

Alle reacties


  • Microkid
  • Registratie: Augustus 2000
  • Nu online

Microkid

Frontpage Admin / Moderator PW/VA

Smile

Het niet rebooten zal je in de argumentlist moeten verwerken. /S is altijd een silent install, hierin zit vaak wel een reboot indien nodig. Je zal dus moeten uitzoeken of er een commando is om de reboot tegen te houden. Besef wel dat een reboot soms nodig is om bepaalde functionaliteit werkend te krijgen. Zonder een reboot loop je dus kans dat je software niet werkt, tenzij je de reboot op een later geschikt moment uitvoert.

Ik zie dat het om iets van VMware gaat. Volgens mij moet onderstaand commando dan de oplossing zijn:

setup64.exe /S /v "/qn REBOOT=R"

Zie ook hier: http://dcinfrastructure.b...ls-from-command-line.html

[ Voor 54% gewijzigd door Microkid op 22-01-2016 13:18 ]

4800Wp zonnestroom met Enphase
Life's a waste of time. Time's a waste of life. Get wasted all the time and you'll have the time of your life.


  • D4NG3R
  • Registratie: Juli 2009
  • Laatst online: 16:18

D4NG3R

kiwi

:)

Is het geen beter idee om een update/installatieplan op te stellen waarbij je eens in de zoveel tijd software installeert inclusief een reboot? Zoals hierboven aangegeven werkt veel software niet of in mindere mate zonder een reboot, in zulke gevallen kan het zelfs flink nadelig zijn om een reboot uit te stellen.

[ Voor 6% gewijzigd door D4NG3R op 22-01-2016 13:19 ]

Komt d'r in, dan kö-j d’r oet kieken


Verwijderd

Topicstarter
Ja dat is beter maar dat is in dit geval helaas geen optie, de updates dienen nu te worden geïnstalleerd en als het nodig is worden de servers later herstart nu mag dat in elk geval niet.. :(

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

Je begrijpt dat als het nodig is dat

* De updates nu moeten worden geinstalleerd, ze essentieel zijn voor jouw werk.
* De software die deze upates dus gebruikt worden op dit moment
* Jouw applicatie/de software dus niet meer gaat functioneren na het installeren van de update (wegens pending reboot)
* OF Jouw applicatie gaat nog steeds de oude versie gebruiken van de software, waardoor je probleem niet is opgelost.

[ Voor 5% gewijzigd door Snake op 22-01-2016 13:40 ]

Going for adventure, lots of sun and a convertible! | GMT-8


  • Razwer
  • Registratie: December 2000
  • Laatst online: 14-11 20:46
3010 is succes, pending reboot.
Handig om ook af te vangen :)
dus
PowerShell:
1
if ($setup.exitcode -ne 0 OR -ne 3010)


http://desktopengineer.com/windowsinstallererrorcodes

[ Voor 23% gewijzigd door Razwer op 22-01-2016 14:10 ]

Newton's 3rd law of motion. Amateur moraalridder.


  • Question Mark
  • Registratie: Mei 2003
  • Laatst online: 28-11 16:59

Question Mark

Moderator SSC/WOS

F7 - Nee - Ja

Ik gok even dat het gaat om de installatie van de VMWare tools binnen een VCenter omgeving?

Waarom gebruik je VMWare Update manager dan niet met een scheduled install? Je loopt nu handmatig iets te maken, waar VMWare zelf als iets voor gebouwd heeft...

Even ervan uitgaan dat mijn aanname correct is

MCSE NT4/2K/2K3, MCTS, MCITP, CCA, CCEA, CCEE, CCIA, CCNA, CCDA, CCNP, CCDP, VCP, CEH + zwemdiploma A & B


Verwijderd

Topicstarter
Hi allen ik ben al iets verder nu loop ik tegen het volgende probleem aan,, lokaal werkt het alleen als ik het remote wil doen krijg ik de volgende melding:

The FileSystem provider supports credentials only on the New-PSDrive cmdlet. Perform the operation again without specifying credentials.

Ik er inmiddels dit van gemaakt maar dat werkt ook nog niet helemaal :(

#Variabele
$devices = (Get-content -path "C:\Users\larsh_adm\Desktop\vmtools\server\servers.txt")
$sourcefile = "C:\Users\larsh_adm\Desktop\vmtools\software\setup64.exe"
$Password = ConvertTo-SecureString -AsPlainText -Force -String "mijnwachtwoord"
$User = "Domain\username"
$credentials = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $user,$password

ForEach-Object($ServerName)

#voor elke server in de serverlijst.
foreach ($device in $devices)

{

#Kopieer install file naar de remote computer.
Copy-Item $sourcefile "\\$device\c$\Temp\setup64.exe" -Credential larsh_adm -Force
}

#Start de setup op meerder servers en return de output in een log.
$setup= "C:\temp\setup64.exe /S /v /qn /l*v ""%TEMP%\vmmsi.log"" REBOOT=R ADDLOCAL=ALL REMOVE=Hgfs"

  • Question Mark
  • Registratie: Mei 2003
  • Laatst online: 28-11 16:59

Question Mark

Moderator SSC/WOS

F7 - Nee - Ja

Als je dit wilt, zul je de setup ook binnen de ForEach-Object lus moeten uitvoeren...;)

Voor elke server kopieer je nu binnen de lus de installatiebestanden, daarna stopt je lus en probeer je lokaal de software te installen (op je server waar je script start).

MCSE NT4/2K/2K3, MCTS, MCITP, CCA, CCEA, CCEE, CCIA, CCNA, CCDA, CCNP, CCDP, VCP, CEH + zwemdiploma A & B


Verwijderd

Topicstarter
Dat klopt ;) thx, helaas heb ik nog wel de zelfde foutmelding:

The FileSystem provider supports credentials only on the New-PSDrive cmdlet. Perform the operation again without specifying credentials.

  • Razwer
  • Registratie: December 2000
  • Laatst online: 14-11 20:46
Dat komt omdat credentials hoppen niet kan. Moment ik ben je script aan het herschrijven voor je.

Newton's 3rd law of motion. Amateur moraalridder.


  • base_
  • Registratie: April 2003
  • Laatst online: 17:58
Software installeren die een reboot vereist en dan niet rebooten is een recipe for disaster. Zou niet de eerste keer zijn dat ik memory leaks en vervolgens crashes had omdat ik vergeten was te rebooten na een install.

  • Craven
  • Registratie: Februari 2007
  • Laatst online: 20:51
Dit script is op zoveel niveau's fout dat ik even niet weet waar ik moet beginnen. Dan heb ik het nog niet eens over het feit dat je dus een berg met servers hebt die je schijnbaar niet centraal kan managen. Scripting is leuk voor de uitzondering maar niet iets wat regelmatig gebeurt. Of tenminste niet met dit niveau van scripting.

  • Question Mark
  • Registratie: Mei 2003
  • Laatst online: 28-11 16:59

Question Mark

Moderator SSC/WOS

F7 - Nee - Ja

base_ schreef op vrijdag 22 januari 2016 @ 14:43:
Software installeren die een reboot vereist en dan niet rebooten is een recipe for disaster. Zou niet de eerste keer zijn dat ik memory leaks en vervolgens crashes had omdat ik vergeten was te rebooten na een install.
Eens, daarom zou ik installatie en reboot ook bij voorkeur gelijktijdig doen.

En ik zou het persoonlijk niet zelf gaan scripten als daar al (standaard) managementtooling voor bestaat (VMWare update manager, AD policy's, etc). Dat maakt een oplossing vele malen beheersbaarder en maakt overdracht en documentatie ook eenvoudiger.

MCSE NT4/2K/2K3, MCTS, MCITP, CCA, CCEA, CCEE, CCIA, CCNA, CCDA, CCNP, CCDP, VCP, CEH + zwemdiploma A & B


  • Razwer
  • Registratie: December 2000
  • Laatst online: 14-11 20:46
deze heb ik niet getest maar dit zou ongeveer moeten doen wat je wilt

PowerShell:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#Variabele
$Servers = (Get-content -path "C:\Users\larsh_adm\Desktop\vmtools\server\servers.txt")
$sourcefile = "C:\Users\larsh_adm\Desktop\vmtools\software\setup64.exe"
$OtherUser = $false # Set to $true for credentials to pop up.
$Logfile = "\\server\share\file.txt"


# Build Scriptblock for remote injection
$ScriptBlock = {
 # Fetch input params
 Param
      (
        [String]$Computer,
        [String]$SourceFile,
        [String]$LogFile
      )
    
    # Functions
    Function WriteLog ($Msg, [Switch]$ScreenOnly = $False) {
           $TimeStamp = Get-Date

           Switch -wildcard ($Msg) {
                 "-START-"    { Write-Host "$TimeStamp - Starting $($MyInvocation.ScriptName) (Version: $(Get-Date (Get-ChildItem $MyInvocation.ScriptName).LastWriteTime -format "yyyy-MM-dd HH.mm"))" }
                 "ERROR:*"    { Write-Host "$TimeStamp - $Msg" -ForegroundColor Red }
                 "WARNING:*" { Write-Host "$TimeStamp - $Msg" -ForegroundColor Yellow }
                 "OK:*"       { Write-Host "$TimeStamp - $Msg" -ForegroundColor Green }
                 "DEBUG:*"    { If ($Debug) { Write-Host "$TimeStamp - $Msg" -ForegroundColor Cyan } }
                 Default      { Write-Host "$TimeStamp - INFO: $Msg" }
           }
       
           If (!($ScreenOnly)) {
                 Switch -wildcard ($Msg) {
                        "-START-"    { $Msg = "$TimeStamp - Starting $($MyInvocation.ScriptName) (Version: $(Get-Date (Get-ChildItem $MyInvocation.ScriptName).LastWriteTime -format "yyyy-MM-dd HH.mm"))" }
                        "ERROR:*"    { $Msg = "$TimeStamp - $Msg" }
                        "WARNING:*" { $Msg = "$TimeStamp - $Msg" }
                        "OK:*"       { $Msg = "$TimeStamp - $Msg" }
                        "DEBUG:*"    { If ($Debug) { $Msg = "$TimeStamp - $Msg" } }
                        Default      { $Msg = "$TimeStamp - INFO: $Msg" }
                 }
             
                 If ($Debug -and ($msg -match "Debug:")) { 
                        $Msg | Out-File -FilePath $LogFile -Append
                 } Else {
                        If (!($msg -match "Debug:")) { 
                               $Msg | Out-File -FilePath $LogFile -Append
                        }
                 }
           }
    }

    
    #debug
    write-host "Currently targetting $Computer" -ForegroundColor Green
    WriteLog "DEBUG: Currently targetting $Computer"
    
    #Kopieer install file lokaal
    Try {
        Copy-Item $sourcefile "c:\Temp\setup64.exe" -Force   
        WriteLog "DEBUG: File Copy started on $Computer"
    }
    Catch {
        WriteLog "ERROR: File Copy on $Computer FAILED!"
    }
    #Start de setup
    Try {
        Start-Process -FilePath "C:\temp\setup64.exe" -ArgumentList "/S /v /qn /l*v ""%TEMP%\vmmsi.log"" REBOOT=R ADDLOCAL=ALL REMOVE=Hgfs"
        WriteLog "DEBUG: Install started on $Computer"
    }
    Catch {
        WriteLog "ERROR: Install on $Computer FAILED!"
    }

}

# Get credentials if other user is set to true
if ($OtherUser -eq $true) { $Cred = Get-Credential }

# loop scriptblock on each server
ForEach ($Computer in $Servers)
{
     Try
         {
             if ($OtherUser -ne $true) { Invoke-Command -ComputerName $Computer -ScriptBlock $ScriptBlock -ArgumentList $Computer, $SourceFile, $logfile -ErrorAction Stop }
             else {
                Invoke-Command -ComputerName $Computer -ScriptBlock $ScriptBlock -ArgumentList $Computer, $SourceFile, $logfile -Credential $Cred -ErrorAction Stop
             }
         }
     Catch
         {
             write-host "Something went wrong on computer $Computer" -ForegroundColor Red
         }
}

Heb stukken code van mezelf (en log functie is van collega) hergebruikt.

Dit doet een remote powershell (invoke command) met huidige credentials, of een popup als je andere wilt gebruiken.
Zorg er voor dat de user die het script draait ook toegang heeft op de share.

edit: misschien wil je nog een check/pauze inlassen tussen de copy en het uitvoeren van de executable. kom je vanzelf achter of dat nodig is.
Ook een test-path zou handig zijn, maar heb dit ff snel uit de mouw geschud voor je zonder te testen.

edit 2: als je overigens code plakt hier, doe het aub in brackets (code=powershell) en (/code) (andere brackets uiteraard)

edit3: overigens zijn die andere jongens ook niet gek wanneer ze je advies geven over pending reboots, dus neem dat aub ten harte :D

[ Voor 4% gewijzigd door Razwer op 22-01-2016 15:01 ]

Newton's 3rd law of motion. Amateur moraalridder.


Verwijderd

Topicstarter
Thx Razwer

bedankt voor alle hulp het werk zoals het hierboven staat !

Verwijderd

Topicstarter
En nu de domme vraag hoe sluit ik dit topic ? :x

  • Razwer
  • Registratie: December 2000
  • Laatst online: 14-11 20:46
Verwijderd schreef op vrijdag 22 januari 2016 @ 15:31:
En nu de domme vraag hoe sluit ik dit topic ? :x
Niet :)
Zo werkt GOT niet :)
tegenwoordig mag je wel een post als juiste antwoord aan merken maar meer dan dat valt er niet uit te slepen :)

Newton's 3rd law of motion. Amateur moraalridder.

Pagina: 1