Home > Software engineering >  How to shutdown the computer after closing the powershell window?
How to shutdown the computer after closing the powershell window?

Time:07-29

I am new to powershell. I have a powershell script I've been using to backup my files. After it runs, I would like to shutdown the computer and close the powershell window. It seems I can do one or the other, but not both. So when I restart the computer, powershell complains that it was not closed properly.

How to shutdown the computer after closing the powershell window?

TIA

p.s. Contrary to popular belief, I have read the manual. However, as mentioned below, if I put EXIT before Stop-Computer, the script exits before executing Stop-Computer. If I put EXIT after Stop-Computer, powershell complains that the file was not closed properly on reboot. Either way, I lose. :(

CodePudding user response:

PowerShell does provid and 'Exit', as noted in my comment. As for stopping, just put the 'Stop-Computer' cmdlet at the end of your script to shut down the computer.

Get-Help -Name Stop-Computer -examples
# Results
<#
NAME
    Stop-Computer

SYNOPSIS
    Stops (shuts down) local and remote computers.


    ----------- Example 1: Shut down the local computer -----------

    Stop-Computer -ComputerName localhost


    Example 2: Shut down two remote computers and the local computer

    Stop-Computer -ComputerName "Server01", "Server02", "localhost"

    `Stop-Computer` uses the ComputerName parameter to specify two remote computers and the local computer. Each computer is shut down.
    -- Example 3: Shut down remote computers as a background job --

    $j = Stop-Computer -ComputerName "Server01", "Server02" -AsJob
    $results = $j | Receive-Job
    $results

    `Stop-Computer` uses the ComputerName parameter to specify two remote computers. The AsJob parameter runs the command as a background job. The job objects are stored in the `$j` variable.

    The job objects in the `$j` variable are sent down the pipeline to `Receive-Job`, which gets the job results. The objects are stored in the `$results` variable. The `$results` variable displays the job information
    in the PowerShell console.

    Because AsJob creates the job on the local computer and automatically returns the results to the local computer, you can run `Receive-Job` as a local command.
    ------------ Example 4: Shut down a remote computer ------------

    Stop-Computer -ComputerName "Server01" -Impersonation Anonymous -DcomAuthentication PacketIntegrity

    `Stop-Computer` uses the ComputerName parameter to specify the remote computer. The Impersonation parameter specifies a customized impersonation and the DcomAuthentication parameter specifies authentication-level
    settings.
    ---------- Example 5: Shut down computers in a domain ----------

    $s = Get-Content -Path ./Domain01.txt
    $c = Get-Credential -Credential Domain01\Admin01
    Stop-Computer -ComputerName $s -Force -ThrottleLimit 10 -Credential $c

    `Get-Content` uses the Path parameter to get a file in the current directory with the list of domain computers. The objects are stored in the `$s` variable.

    `Get-Credential` uses the Credential parameter to specify the credentials of a domain administrator. The credentials are stored in the `$c` variable.

    `Stop-Computer` shuts down the computers specified with the ComputerName parameter's list of computers in the `$s` variable. The Force parameter forces an immediate shutdown. The ThrottleLimit parameter limits the
    command to 10 concurrent connections. The Credential parameter submits the credentials saved in the `$c` variable.
#>

Or use the Restart-Computer cmdlet, if that is your goal instead.

Update

Use two scripts, main and child.

# Start-Main.ps1
0..4 | 
ForEach{
    "Inside function... $PSItem"
    Start-Sleep -Seconds 1
}
.\Start-Child
Exit


# Start-Child.ps1
'Preparing to shutdown in 10 seconds'
Start-Sleep -Seconds 10
Stop-Computer

or Using PS Jobs is another option as noted in my comment:

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/start-job?view=powershell-7.2

  • Related