I have the silent uninstall/wait/install script below that I need to push out to users, but I need to script it so it runs as administrator and I found some scripts, but I'm not understanding how to script it, any help is appreciated. Also, do I have to put the administrator script in twice? (i.e. in the first line of the uninstall script then before the line of the 2nd install script) or just once when I run it?

Get-WmiObject -Class Win32_Product | Where-Object {$_.Name -eq "On-Screen Takeoff"} | foreach-
object -process {$_.Uninstall()} 
Start-Sleep -Seconds 25
Start-Process "\\PATH_REMOVED\ROOT\Installs\OnCenter\OST\Testverion3906\ost3906.msi" $arguments
0 Comments   [ - ] Hide Comments


Please log in to comment

Answer this question or Comment on this question for clarity





Answered 09/25/2013 by: SMal.tmcc
Red Belt

  • did the below, but I get the error "Powershell.exe:Missing expression after unary operator '-': At line:1 char 15, any ideas?

    powershell.exe -elevated -scriptblock {
    Get-WmiObject -Class Win32_Product | Where-Object {$_.Name -eq "On-Screen Takeoff"} | foreach-object -process {$_.Uninstall()} Start-Sleep -Seconds 25 $arguments="/quiet" Start-Process "\\davisconstruction.com\ROOT\Installs\OnCenter\OST\Testverion3906\ost3906.msi" $arguments }
    • what vesion is powershell on the machine you are trying to run this on? 1.0 or 2.0
  • I'm running it on a windows powershell ISE and PowerGUI Script Editor v3.5 thank you.
  • The script below generates an error, but for some reason it still works, any ideas on the error?

    start-process powershell -verb runas -argument
    Get-WmiObject -Class Win32_Product | Where-Object {$_.Name -eq "On-Screen Takeoff"} | foreach-object -process {$_.Uninstall()}
    Start-Sleep -Seconds 25
    Start-Process "\\davisconstruction.com\ROOT\Installs\OnCenter\OST\Testverion3906\ost3906.msi" $arguments


    Start-Process : Missing an argument for parameter 'ArgumentList'. Specify a parameter of type 'System.String[]' and try again.
    At C:\Users\TEMP\AppData\Local\Temp\0f078c98-bbed-48be-966d-58e2f5f40e8c.ps1:1 char:47
    + start-process powershell -verb runas -argument <<<<
    + CategoryInfo : InvalidArgument: (:) [Start-Process], ParameterBindingException
    + FullyQualifiedErrorId : MissingArgument,Microsoft.PowerShell.Commands.StartProcessCommand

    __GENUS : 2
    __RELPATH :
    __DERIVATION : {}
    __SERVER :
    __PATH :
    ReturnValue : 0
    • Update: if I run "Set-item wsman:localhost\client\trustedhosts -value RM-Client1" as an Admin in Powershell Console then close that then open Powershell in a standard user account it runs without error (the script below), but the only part of part2.ps1 it executes is the uninstall, not the install so another step closer

      i researched more and modified the script to run script below which calls script "part2.ps1" but the error stumps me. I can run the script if I am logged in as admin, but if I log in as a standard user and try to run the script it fails with that error. My goal is to use this script and deploy it non-admin users via GPO using Active Directory and that is why I need it to work. I found a link to a possible solution, but I don't really understand it, if you can shed any light, I'd appreciate it, thanks. (http://www.thecodeking.co.uk/2011/02/winrm-with-mixed-domain-environments.html)

      $username = '.\admin'
      $password = 'Window's''
      $cred = New-Object System.Management.Automation.PSCredential -ArgumentList @($username,(ConvertTo-SecureString -String $password -AsPlainText -Force))
      Invoke-Command -FilePath \\davisconstruction.com\ROOT\Installs\OnCenter\OST\Testverion3906\part2.ps1 -Credential $cred -ComputerName $env:computername

      PART 2
      Get-WmiObject -Class Win32_Product | Where-Object {$_.Name -eq "On-Screen Takeoff"} | foreach-object -process {$_.Uninstall()}
      Start-Sleep -Seconds 25
      Start-Process "\\davisconstruction.com\ROOT\Installs\OnCenter\OST\Testverion3906\ost3906.msi" $arguments

      [j3q0yw1-e6530] Connecting to remote server failed with the following error message : WinRM cannot process the request. The following error occured while using Kerberos authentication
      : There are currently no logon servers available to service the logon request.
      Possible causes are:
      -The user name or password specified are invalid.
      -Kerberos is used when no authentication method and no user name are specified.
      -Kerberos accepts domain user names, but not local user names.
      -The Service Principal Name (SPN) for the remote computer name and port does not exist.
      -The client and remote computers are in different domains and there is no trust between the two domains.
      After checking for the above issues, try the following:
      -Check the Event Viewer for events related to authentication.
      -Change the authentication method; add the destination computer to the WinRM TrustedHosts configuration setting or use HTTPS transport.
      Note that computers in the TrustedHosts list might not be authenticated.
      -For more information about WinRM configuration, run the following command: winrm help config. For more information, see the about_Remote_Troubleshooting Help topic.
      + CategoryInfo : OpenError: (:) [], PSRemotingTransportException
      + FullyQualifiedErrorId : PSSessionStateBroken
Please log in to comment